Merge commit '66fdd3ae65e13349fbc0b2818d4b91a389075553' into glitch-soc/main
This commit is contained in:
commit
b9014ec220
14
Gemfile.lock
14
Gemfile.lock
@ -89,7 +89,7 @@ GEM
|
||||
securerandom (>= 0.3)
|
||||
tzinfo (~> 2.0, >= 2.0.5)
|
||||
uri (>= 0.13.1)
|
||||
addressable (2.8.9)
|
||||
addressable (2.9.0)
|
||||
public_suffix (>= 2.0.2, < 8.0)
|
||||
aes_key_wrap (1.1.0)
|
||||
android_key_attestation (0.3.0)
|
||||
@ -816,12 +816,12 @@ GEM
|
||||
securerandom (0.4.1)
|
||||
shoulda-matchers (7.0.1)
|
||||
activesupport (>= 7.1)
|
||||
sidekiq (8.0.10)
|
||||
connection_pool (>= 2.5.0)
|
||||
json (>= 2.9.0)
|
||||
logger (>= 1.6.2)
|
||||
rack (>= 3.1.0)
|
||||
redis-client (>= 0.23.2)
|
||||
sidekiq (8.1.2)
|
||||
connection_pool (>= 3.0.0)
|
||||
json (>= 2.16.0)
|
||||
logger (>= 1.7.0)
|
||||
rack (>= 3.2.0)
|
||||
redis-client (>= 0.26.0)
|
||||
sidekiq-bulk (0.2.0)
|
||||
sidekiq
|
||||
sidekiq-scheduler (6.0.1)
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
import type { AccountWarningAction } from 'mastodon/models/notification_group';
|
||||
|
||||
import type { ApiAccountJSON } from './accounts';
|
||||
import type { ApiCollectionJSON } from './collections';
|
||||
import type { ApiReportJSON } from './reports';
|
||||
import type { ApiStatusJSON } from './statuses';
|
||||
|
||||
@ -22,6 +23,8 @@ export const allNotificationTypes: NotificationType[] = [
|
||||
'moderation_warning',
|
||||
'severed_relationships',
|
||||
'annual_report',
|
||||
'added_to_collection',
|
||||
'collection_update',
|
||||
];
|
||||
|
||||
export type NotificationWithStatusType =
|
||||
@ -42,7 +45,9 @@ export type NotificationType =
|
||||
| 'severed_relationships'
|
||||
| 'admin.sign_up'
|
||||
| 'admin.report'
|
||||
| 'annual_report';
|
||||
| 'annual_report'
|
||||
| 'added_to_collection'
|
||||
| 'collection_update';
|
||||
|
||||
export interface BaseNotificationJSON {
|
||||
id: string;
|
||||
@ -83,6 +88,26 @@ interface ReportNotificationJSON extends BaseNotificationJSON {
|
||||
report: ApiReportJSON;
|
||||
}
|
||||
|
||||
interface AddedToCollectionNotificationGroupJSON extends BaseNotificationGroupJSON {
|
||||
type: 'added_to_collection';
|
||||
collection: ApiCollectionJSON;
|
||||
}
|
||||
|
||||
interface AddedToCollectionNotificationJSON extends BaseNotificationJSON {
|
||||
type: 'added_to_collection';
|
||||
collection: ApiCollectionJSON;
|
||||
}
|
||||
|
||||
interface CollectionUpdateNotificationGroupJSON extends BaseNotificationGroupJSON {
|
||||
type: 'collection_update';
|
||||
collection: ApiCollectionJSON;
|
||||
}
|
||||
|
||||
interface CollectionUpdateNotificationJSON extends BaseNotificationJSON {
|
||||
type: 'collection_update';
|
||||
collection: ApiCollectionJSON;
|
||||
}
|
||||
|
||||
type SimpleNotificationTypes = 'follow' | 'follow_request' | 'admin.sign_up';
|
||||
interface SimpleNotificationGroupJSON extends BaseNotificationGroupJSON {
|
||||
type: SimpleNotificationTypes;
|
||||
@ -146,7 +171,9 @@ export type ApiNotificationJSON =
|
||||
| ReportNotificationJSON
|
||||
| AccountRelationshipSeveranceNotificationJSON
|
||||
| NotificationWithStatusJSON
|
||||
| ModerationWarningNotificationJSON;
|
||||
| ModerationWarningNotificationJSON
|
||||
| AddedToCollectionNotificationJSON
|
||||
| CollectionUpdateNotificationJSON;
|
||||
|
||||
export type ApiNotificationGroupJSON =
|
||||
| SimpleNotificationGroupJSON
|
||||
@ -154,7 +181,9 @@ export type ApiNotificationGroupJSON =
|
||||
| AccountRelationshipSeveranceNotificationGroupJSON
|
||||
| NotificationGroupWithStatusJSON
|
||||
| ModerationWarningNotificationGroupJSON
|
||||
| AnnualReportNotificationGroupJSON;
|
||||
| AnnualReportNotificationGroupJSON
|
||||
| AddedToCollectionNotificationGroupJSON
|
||||
| CollectionUpdateNotificationGroupJSON;
|
||||
|
||||
export interface ApiNotificationGroupsResultJSON {
|
||||
accounts: ApiAccountJSON[];
|
||||
|
||||
@ -21,6 +21,7 @@ import { openModal } from 'mastodon/actions/modal';
|
||||
import { initMuteModal } from 'mastodon/actions/mutes';
|
||||
import { apiFollowAccount } from 'mastodon/api/accounts';
|
||||
import { Avatar } from 'mastodon/components/avatar';
|
||||
import { VerifiedBadge } from 'mastodon/components/badge';
|
||||
import { Button } from 'mastodon/components/button';
|
||||
import { FollowersCounter } from 'mastodon/components/counters';
|
||||
import { DisplayName } from 'mastodon/components/display_name';
|
||||
@ -29,7 +30,6 @@ import { FollowButton } from 'mastodon/components/follow_button';
|
||||
import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
|
||||
import { ShortNumber } from 'mastodon/components/short_number';
|
||||
import { Skeleton } from 'mastodon/components/skeleton';
|
||||
import { VerifiedBadge } from 'mastodon/components/verified_badge';
|
||||
import { useIdentity } from 'mastodon/identity_context';
|
||||
import { me } from 'mastodon/initial_state';
|
||||
import type { MenuItem } from 'mastodon/models/dropdown_menu';
|
||||
|
||||
@ -0,0 +1,45 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react-vite';
|
||||
|
||||
import { accountFactoryState } from '@/testing/factories';
|
||||
|
||||
import { AccountListItem } from './index';
|
||||
|
||||
const meta = {
|
||||
title: 'Components/AccountListItem',
|
||||
component: AccountListItem,
|
||||
args: {
|
||||
accountId: '1',
|
||||
withBorder: false,
|
||||
},
|
||||
parameters: {
|
||||
state: {
|
||||
accounts: {
|
||||
'1': accountFactoryState(),
|
||||
},
|
||||
},
|
||||
},
|
||||
} satisfies Meta<typeof AccountListItem>;
|
||||
|
||||
export default meta;
|
||||
|
||||
type Story = StoryObj<typeof meta>;
|
||||
|
||||
export const Default: Story = {};
|
||||
|
||||
export const WithCustomStats: Story = {
|
||||
args: {
|
||||
stats: ['posts', 'last-active'],
|
||||
},
|
||||
};
|
||||
|
||||
export const WithBorder: Story = {
|
||||
args: {
|
||||
withBorder: true,
|
||||
},
|
||||
};
|
||||
|
||||
export const WithoutButton: Story = {
|
||||
args: {
|
||||
renderButton: () => null,
|
||||
},
|
||||
};
|
||||
184
app/javascript/mastodon/components/account_list_item/index.tsx
Normal file
184
app/javascript/mastodon/components/account_list_item/index.tsx
Normal file
@ -0,0 +1,184 @@
|
||||
import { useMemo } from 'react';
|
||||
|
||||
import { FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import { Account } from 'mastodon/components/account';
|
||||
import { VerifiedBadge } from 'mastodon/components/badge';
|
||||
import { useAccount } from 'mastodon/hooks/useAccount';
|
||||
import { useRelationship } from 'mastodon/hooks/useRelationship';
|
||||
import type { Relationship } from 'mastodon/models/relationship';
|
||||
|
||||
import { EmojiHTML } from '../emoji/html';
|
||||
import { FamiliarFollowers } from '../familiar_followers';
|
||||
import { FollowButton } from '../follow_button';
|
||||
import { FormattedDateWrapper } from '../formatted_date';
|
||||
import { NumberFields, NumberFieldsItem } from '../number_fields';
|
||||
import { RelativeTimestamp } from '../relative_timestamp';
|
||||
import { ShortNumber } from '../short_number';
|
||||
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
export interface RenderButtonOptions {
|
||||
accountId: string | undefined;
|
||||
relationship: Relationship | null | undefined;
|
||||
}
|
||||
|
||||
type Stat = 'followers' | 'following' | 'posts' | 'joined' | 'last-active';
|
||||
|
||||
interface Props {
|
||||
accountId: string | undefined;
|
||||
stats?: Stat[];
|
||||
renderButton?: (options: RenderButtonOptions) => React.ReactNode;
|
||||
withBorder?: boolean;
|
||||
}
|
||||
|
||||
const DEFAULT_STATS: Stat[] = ['followers', 'following', 'joined'];
|
||||
|
||||
/**
|
||||
* Extended account list item with bio, verified link badge,
|
||||
* and familiar follower widget.
|
||||
*
|
||||
* The displayed account stats can be customised using the `stats` prop,
|
||||
* and button rendering can be customised via the `renderButton` prop.
|
||||
*/
|
||||
export const AccountListItem: React.FC<Props> = ({
|
||||
accountId,
|
||||
stats = DEFAULT_STATS,
|
||||
withBorder = true,
|
||||
renderButton = defaultRenderButton,
|
||||
}) => {
|
||||
const intl = useIntl();
|
||||
const account = useAccount(accountId);
|
||||
const relationship = useRelationship(accountId);
|
||||
|
||||
const createdThisYear = useMemo(
|
||||
() => account?.created_at.includes(new Date().getFullYear().toString()),
|
||||
[account?.created_at],
|
||||
);
|
||||
|
||||
if (!accountId || !account) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const firstVerifiedField = account.fields.find((item) => !!item.verified_at);
|
||||
|
||||
return (
|
||||
<div className={classes.wrapper} data-with-border={withBorder}>
|
||||
<div className={classes.header}>
|
||||
<Account
|
||||
id={accountId}
|
||||
minimal
|
||||
size={40}
|
||||
withMenu={false}
|
||||
withBorder={false}
|
||||
className={classes.account}
|
||||
/>
|
||||
|
||||
{renderButton({ accountId, relationship })}
|
||||
</div>
|
||||
|
||||
<NumberFields>
|
||||
{stats.includes('followers') && (
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='account.followers'
|
||||
defaultMessage='Followers'
|
||||
/>
|
||||
}
|
||||
hint={intl.formatNumber(account.followers_count)}
|
||||
>
|
||||
<ShortNumber value={account.followers_count} />
|
||||
</NumberFieldsItem>
|
||||
)}
|
||||
{stats.includes('following') && (
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='account.following'
|
||||
defaultMessage='Following'
|
||||
/>
|
||||
}
|
||||
hint={intl.formatNumber(account.following_count)}
|
||||
link={`/@${account.acct}/following`}
|
||||
>
|
||||
<ShortNumber value={account.following_count} />
|
||||
</NumberFieldsItem>
|
||||
)}
|
||||
{stats.includes('posts') && (
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage id='account.posts' defaultMessage='Posts' />
|
||||
}
|
||||
hint={intl.formatNumber(account.statuses_count)}
|
||||
>
|
||||
<ShortNumber value={account.statuses_count} />
|
||||
</NumberFieldsItem>
|
||||
)}
|
||||
{stats.includes('joined') && (
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='account.joined_short'
|
||||
defaultMessage='Joined'
|
||||
/>
|
||||
}
|
||||
hint={intl.formatDate(account.created_at)}
|
||||
>
|
||||
{createdThisYear ? (
|
||||
<FormattedDateWrapper
|
||||
value={account.created_at}
|
||||
month='short'
|
||||
day='2-digit'
|
||||
/>
|
||||
) : (
|
||||
<FormattedDateWrapper value={account.created_at} year='numeric' />
|
||||
)}
|
||||
</NumberFieldsItem>
|
||||
)}
|
||||
{stats.includes('last-active') && (
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='account.last_active'
|
||||
defaultMessage='Last active'
|
||||
/>
|
||||
}
|
||||
>
|
||||
<RelativeTimestamp
|
||||
long
|
||||
timestamp={account.last_status_at}
|
||||
noFuture
|
||||
/>
|
||||
</NumberFieldsItem>
|
||||
)}
|
||||
{firstVerifiedField && (
|
||||
<VerifiedBadge
|
||||
link={firstVerifiedField.value}
|
||||
className={classes.verifiedBadge}
|
||||
/>
|
||||
)}
|
||||
</NumberFields>
|
||||
<FamiliarFollowers accountId={accountId} />
|
||||
{account.note.length > 0 && (
|
||||
<EmojiHTML
|
||||
className={classNames(classes.bio, 'translate')}
|
||||
htmlString={account.note_emojified}
|
||||
extraEmojis={account.emojis}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const defaultRenderButton = ({ accountId }: RenderButtonOptions) => (
|
||||
<AccountListItemFollowButton accountId={accountId} />
|
||||
);
|
||||
|
||||
export const AccountListItemFollowButton: React.FC<{
|
||||
accountId: string | undefined;
|
||||
}> = ({ accountId }) => (
|
||||
<FollowButton compact labelLength='short' accountId={accountId} />
|
||||
);
|
||||
@ -0,0 +1,50 @@
|
||||
.wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: start;
|
||||
gap: 12px;
|
||||
padding: 16px;
|
||||
|
||||
&[data-with-border='true'] {
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
}
|
||||
|
||||
:global(.account__note) {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 3;
|
||||
line-clamp: 3;
|
||||
}
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
align-items: start;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.account {
|
||||
--account-name-size: 15px;
|
||||
--account-handle-color: var(--color-text-secondary);
|
||||
--account-handle-size: 13px;
|
||||
--account-bio-color: var(--color-text-primary);
|
||||
--account-bio-size: 13px;
|
||||
--account-outer-spacing: 0;
|
||||
|
||||
flex-grow: 1;
|
||||
margin-inline-end: 16px;
|
||||
}
|
||||
|
||||
.verifiedBadge {
|
||||
align-self: end;
|
||||
}
|
||||
|
||||
.bio {
|
||||
:any-link {
|
||||
color: var(--color-text-status-links);
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -35,6 +35,12 @@ export const Domain: Story = {
|
||||
},
|
||||
};
|
||||
|
||||
export const Verified: Story = {
|
||||
render() {
|
||||
return <badges.VerifiedBadge link='example.com' />;
|
||||
},
|
||||
};
|
||||
|
||||
export const CustomIcon: Story = {
|
||||
args: {
|
||||
...Default.args,
|
||||
|
||||
@ -5,18 +5,22 @@ import { FormattedMessage, useIntl } from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
|
||||
import AdminIcon from '@/images/icons/icon_admin.svg?react';
|
||||
import IconVerified from '@/images/icons/icon_verified.svg?react';
|
||||
import type { OnAttributeHandler } from '@/mastodon/utils/html';
|
||||
import BlockIcon from '@/material-icons/400-24px/block.svg?react';
|
||||
import GroupsIcon from '@/material-icons/400-24px/group.svg?react';
|
||||
import PersonIcon from '@/material-icons/400-24px/person.svg?react';
|
||||
import SmartToyIcon from '@/material-icons/400-24px/smart_toy.svg?react';
|
||||
import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react';
|
||||
|
||||
import { EmojiHTML } from '../emoji/html';
|
||||
import { Icon } from '../icon';
|
||||
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
interface BadgeProps {
|
||||
interface BadgeProps extends React.ComponentPropsWithoutRef<'div'> {
|
||||
label: ReactNode;
|
||||
icon?: ReactNode;
|
||||
className?: string;
|
||||
domain?: ReactNode;
|
||||
roleId?: string;
|
||||
variant?:
|
||||
@ -35,9 +39,16 @@ export const Badge: FC<BadgeProps> = ({
|
||||
className,
|
||||
domain,
|
||||
roleId,
|
||||
...otherProps
|
||||
}) => (
|
||||
<div
|
||||
className={classNames(classes.badge, classes[variant], className)}
|
||||
{...otherProps}
|
||||
className={classNames(
|
||||
classes.badge,
|
||||
!icon && classes.badgeWithoutIcon,
|
||||
classes[variant],
|
||||
className,
|
||||
)}
|
||||
data-account-role-id={roleId}
|
||||
>
|
||||
{icon}
|
||||
@ -134,3 +145,31 @@ export const BlockedBadge: FC<Partial<BadgeProps>> = ({ label, ...props }) => (
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
|
||||
const onAttribute: OnAttributeHandler = (name, value, tagName) => {
|
||||
if (name === 'rel' && tagName === 'a') {
|
||||
if (value === 'me') {
|
||||
return null;
|
||||
}
|
||||
return [
|
||||
name,
|
||||
value
|
||||
.split(' ')
|
||||
.filter((x) => x !== 'me')
|
||||
.join(' '),
|
||||
];
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
export const VerifiedBadge: React.FC<{ link: string; className?: string }> = ({
|
||||
link,
|
||||
className,
|
||||
}) => (
|
||||
<Badge
|
||||
variant='success'
|
||||
icon={<Icon id='verified' icon={IconVerified} noFill />}
|
||||
label={<EmojiHTML as='span' htmlString={link} onAttribute={onAttribute} />}
|
||||
className={className}
|
||||
/>
|
||||
);
|
||||
|
||||
@ -2,18 +2,28 @@
|
||||
color: var(--color-text-primary);
|
||||
font-size: 13px;
|
||||
display: inline-flex;
|
||||
max-width: 100%;
|
||||
padding: 4px;
|
||||
padding-inline-end: 8px;
|
||||
gap: 4px;
|
||||
border-radius: 6px;
|
||||
border-radius: 8px;
|
||||
align-items: center;
|
||||
overflow-wrap: anywhere;
|
||||
|
||||
> svg {
|
||||
width: auto;
|
||||
height: 15px;
|
||||
height: 17px;
|
||||
fill: currentColor;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
&:not(.badgeWithoutIcon) {
|
||||
padding-inline-end: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.domain {
|
||||
@ -41,7 +51,6 @@
|
||||
|
||||
.success {
|
||||
background-color: var(--color-bg-success-softest);
|
||||
color: var(--color-text-success);
|
||||
}
|
||||
|
||||
.warning {
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
|
||||
import { Avatar } from '@/mastodon/components/avatar';
|
||||
import { AvatarGroup } from '@/mastodon/components/avatar_group';
|
||||
import { LinkedDisplayName } from '@/mastodon/components/display_name';
|
||||
import type { Account } from '@/mastodon/models/account';
|
||||
|
||||
import { useFetchFamiliarFollowers } from '../hooks/familiar_followers';
|
||||
import classes from './styles.module.scss';
|
||||
import { useFetchFamiliarFollowers } from './use_fetch_familiar_followers';
|
||||
|
||||
const FamiliarFollowersReadout: React.FC<{ familiarFollowers: Account[] }> = ({
|
||||
familiarFollowers,
|
||||
@ -51,9 +54,10 @@ const FamiliarFollowersReadout: React.FC<{ familiarFollowers: Account[] }> = ({
|
||||
}
|
||||
};
|
||||
|
||||
export const FamiliarFollowers: React.FC<{ accountId: string }> = ({
|
||||
accountId,
|
||||
}) => {
|
||||
export const FamiliarFollowers: React.FC<{
|
||||
accountId: string;
|
||||
className?: string;
|
||||
}> = ({ accountId, className }) => {
|
||||
const { familiarFollowers, isLoading } = useFetchFamiliarFollowers({
|
||||
accountId,
|
||||
});
|
||||
@ -63,10 +67,10 @@ export const FamiliarFollowers: React.FC<{ accountId: string }> = ({
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='account__header__familiar-followers'>
|
||||
<AvatarGroup compact>
|
||||
<div className={classNames(classes.wrapper, className)}>
|
||||
<AvatarGroup compact avatarHeight={24}>
|
||||
{familiarFollowers.slice(0, 3).map((account) => (
|
||||
<Avatar withLink key={account.id} account={account} size={28} />
|
||||
<Avatar withLink key={account.id} account={account} size={24} />
|
||||
))}
|
||||
</AvatarGroup>
|
||||
<span>
|
||||
@ -0,0 +1,11 @@
|
||||
.wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
|
||||
a:any-link {
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@ import { FormattedMessage } from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { useFetchFamiliarFollowers } from '@/mastodon/components/familiar_followers/use_fetch_familiar_followers';
|
||||
import { fetchAccount } from 'mastodon/actions/accounts';
|
||||
import { AccountBio } from 'mastodon/components/account_bio';
|
||||
import { AccountFields } from 'mastodon/components/account_fields';
|
||||
@ -18,7 +19,6 @@ import { DisplayName } from 'mastodon/components/display_name';
|
||||
import { FollowButton } from 'mastodon/components/follow_button';
|
||||
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
||||
import { ShortNumber } from 'mastodon/components/short_number';
|
||||
import { useFetchFamiliarFollowers } from 'mastodon/features/account_timeline/hooks/familiar_followers';
|
||||
import { domain } from 'mastodon/initial_state';
|
||||
import { getAccountHidden } from 'mastodon/selectors/accounts';
|
||||
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||
|
||||
@ -1,22 +1,21 @@
|
||||
import classNames from 'classnames';
|
||||
import { NavLink } from 'react-router-dom';
|
||||
|
||||
import type { MastodonLocationDescriptor } from 'mastodon/components/router';
|
||||
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
interface WrapperProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export const NumberFields: React.FC<WrapperProps> = ({ children }) => {
|
||||
return <ul className={classes.list}>{children}</ul>;
|
||||
export const NumberFields: React.FC<React.ComponentPropsWithoutRef<'ul'>> = ({
|
||||
children,
|
||||
className,
|
||||
}) => {
|
||||
return <ul className={classNames(classes.list, className)}>{children}</ul>;
|
||||
};
|
||||
|
||||
interface ItemProps {
|
||||
interface ItemProps extends React.ComponentPropsWithoutRef<'li'> {
|
||||
label: React.ReactNode;
|
||||
hint?: string;
|
||||
link?: MastodonLocationDescriptor;
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export const NumberFieldsItem: React.FC<ItemProps> = ({
|
||||
@ -24,9 +23,10 @@ export const NumberFieldsItem: React.FC<ItemProps> = ({
|
||||
hint,
|
||||
link,
|
||||
children,
|
||||
className,
|
||||
}) => {
|
||||
return (
|
||||
<li className={classes.item} title={hint}>
|
||||
<li className={classNames(classes.item, className)} title={hint}>
|
||||
{label}
|
||||
{link ? (
|
||||
<NavLink exact to={link}>
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
.list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 8px 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
gap: 4px 20px;
|
||||
gap: 4px 24px;
|
||||
font-size: 13px;
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
@ -19,6 +19,7 @@
|
||||
font-weight: 600;
|
||||
color: var(--color-text-primary);
|
||||
font-size: 15px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
a {
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
import { EmojiHTML } from '@/mastodon/components/emoji/html';
|
||||
import CheckIcon from '@/material-icons/400-24px/check.svg?react';
|
||||
|
||||
import type { OnAttributeHandler } from '../utils/html';
|
||||
|
||||
import { Icon } from './icon';
|
||||
|
||||
const onAttribute: OnAttributeHandler = (name, value, tagName) => {
|
||||
if (name === 'rel' && tagName === 'a') {
|
||||
if (value === 'me') {
|
||||
return null;
|
||||
}
|
||||
return [
|
||||
name,
|
||||
value
|
||||
.split(' ')
|
||||
.filter((x) => x !== 'me')
|
||||
.join(' '),
|
||||
];
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
interface Props {
|
||||
link: string;
|
||||
}
|
||||
export const VerifiedBadge: React.FC<Props> = ({ link }) => (
|
||||
<span className='verified-badge'>
|
||||
<Icon id='check' icon={CheckIcon} className='verified-badge__mark' />
|
||||
<EmojiHTML as='span' htmlString={link} onAttribute={onAttribute} />
|
||||
</span>
|
||||
);
|
||||
@ -19,17 +19,17 @@ import type { Account } from '@/mastodon/models/account';
|
||||
import { getAccountHidden } from '@/mastodon/selectors/accounts';
|
||||
import { useAppSelector, useAppDispatch } from '@/mastodon/store';
|
||||
|
||||
import { FamiliarFollowers } from '../../../components/familiar_followers';
|
||||
|
||||
import { AccountName } from './account_name';
|
||||
import { AccountSubscriptionForm } from './account_subscription_form';
|
||||
import { AccountBadges } from './badges';
|
||||
import { AccountButtons } from './buttons';
|
||||
import { FamiliarFollowers } from './familiar_followers';
|
||||
import { AccountHeaderFields } from './fields';
|
||||
import { MemorialNote } from './memorial_note';
|
||||
import { MovedNote } from './moved_note';
|
||||
import { AccountNote as AccountNoteRedesign } from './note';
|
||||
import { AccountNote } from './note';
|
||||
import { AccountNumberFields } from './number_fields';
|
||||
import redesignClasses from './redesign.module.scss';
|
||||
import classes from './styles.module.scss';
|
||||
import { AccountTabs } from './tabs';
|
||||
|
||||
const titleFromAccount = (account: Account) => {
|
||||
@ -111,12 +111,7 @@ export const AccountHeader: React.FC<{
|
||||
<FollowRequestNoteContainer account={account} />
|
||||
)}
|
||||
|
||||
<div
|
||||
className={classNames(
|
||||
'account__header__image',
|
||||
redesignClasses.header,
|
||||
)}
|
||||
>
|
||||
<div className={classNames('account__header__image', classes.header)}>
|
||||
{!suspendedOrHidden && (
|
||||
<img
|
||||
src={autoPlayGif ? account.header : account.header_static}
|
||||
@ -126,16 +121,11 @@ export const AccountHeader: React.FC<{
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={classNames(
|
||||
'account__header__bar',
|
||||
redesignClasses.barWrapper,
|
||||
)}
|
||||
>
|
||||
<div className={classNames('account__header__bar', classes.barWrapper)}>
|
||||
<div
|
||||
className={classNames(
|
||||
'account__header__tabs',
|
||||
redesignClasses.avatarWrapper,
|
||||
classes.avatarWrapper,
|
||||
)}
|
||||
>
|
||||
<a
|
||||
@ -156,31 +146,32 @@ export const AccountHeader: React.FC<{
|
||||
<div
|
||||
className={classNames(
|
||||
'account__header__tabs__name',
|
||||
redesignClasses.displayNameWrapper,
|
||||
classes.displayNameWrapper,
|
||||
)}
|
||||
>
|
||||
<AccountName accountId={accountId} />
|
||||
<AccountButtons
|
||||
accountId={accountId}
|
||||
className={redesignClasses.buttonsDesktop}
|
||||
className={classes.buttonsDesktop}
|
||||
noShare={!isMe || 'share' in navigator}
|
||||
forceMenu={'share' in navigator}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<AccountBadges accountId={accountId} />
|
||||
|
||||
<AccountNumberFields accountId={accountId} />
|
||||
|
||||
{!isMe && !suspendedOrHidden && (
|
||||
<FamiliarFollowers accountId={accountId} />
|
||||
<FamiliarFollowers
|
||||
accountId={accountId}
|
||||
className={classes.familiarFollowers}
|
||||
/>
|
||||
)}
|
||||
|
||||
{!suspendedOrHidden && (
|
||||
<div className='account__header__extra'>
|
||||
<div className='account__header__bio'>
|
||||
{me && account.id !== me && (
|
||||
<AccountNoteRedesign accountId={accountId} />
|
||||
<AccountNote accountId={accountId} />
|
||||
)}
|
||||
|
||||
<AccountBio
|
||||
@ -188,7 +179,7 @@ export const AccountHeader: React.FC<{
|
||||
accountId={accountId}
|
||||
className={classNames(
|
||||
'account__header__content',
|
||||
redesignClasses.bio,
|
||||
classes.bio,
|
||||
)}
|
||||
/>
|
||||
|
||||
@ -203,8 +194,8 @@ export const AccountHeader: React.FC<{
|
||||
|
||||
<AccountButtons
|
||||
className={classNames(
|
||||
redesignClasses.buttonsMobile,
|
||||
!isIntersecting && redesignClasses.buttonsMobileIsStuck,
|
||||
classes.buttonsMobile,
|
||||
!isIntersecting && classes.buttonsMobileIsStuck,
|
||||
)}
|
||||
accountId={accountId}
|
||||
noShare
|
||||
|
||||
@ -21,7 +21,8 @@ import ContentCopyIcon from '@/material-icons/400-24px/content_copy.svg?react';
|
||||
import HelpIcon from '@/material-icons/400-24px/help.svg?react';
|
||||
import DomainIcon from '@/material-icons/400-24px/language.svg?react';
|
||||
|
||||
import classes from './redesign.module.scss';
|
||||
import { AccountBadges } from './badges';
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
const messages = defineMessages({
|
||||
lockedInfo: {
|
||||
@ -77,6 +78,8 @@ export const AccountName: FC<{ accountId: string }> = ({ accountId }) => {
|
||||
domain={domain}
|
||||
isSelf={account.id === me}
|
||||
/>
|
||||
|
||||
<AccountBadges accountId={accountId} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@ -3,6 +3,7 @@ import { useState, useCallback, useId } from 'react';
|
||||
import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
|
||||
import type { IntlShape } from 'react-intl';
|
||||
|
||||
import classNames from 'classnames';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { AxiosError } from 'axios';
|
||||
@ -18,7 +19,7 @@ import type { FieldStatus } from 'mastodon/components/form_fields';
|
||||
import { TextInputField } from 'mastodon/components/form_fields/text_input_field';
|
||||
import { useAppSelector } from 'mastodon/store';
|
||||
|
||||
import classes from './redesign.module.scss';
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
const messages = defineMessages({
|
||||
emailInvalid: {
|
||||
@ -127,7 +128,9 @@ export const AccountSubscriptionForm: React.FC<{ accountId: string }> = ({
|
||||
|
||||
if (submitted) {
|
||||
return (
|
||||
<div className={classes.bannerBaseCentered}>
|
||||
<div
|
||||
className={classNames(classes.bannerBase, classes.bannerBaseCentered)}
|
||||
>
|
||||
<div className={classes.bannerTextAndActions}>
|
||||
<h2>
|
||||
<FormattedMessage
|
||||
|
||||
@ -16,6 +16,8 @@ import { useAccount } from '@/mastodon/hooks/useAccount';
|
||||
import type { AccountRole } from '@/mastodon/models/account';
|
||||
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
||||
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
export const AccountBadges: FC<{ accountId: string }> = ({ accountId }) => {
|
||||
const account = useAccount(accountId);
|
||||
const localDomain = useAppSelector(
|
||||
@ -101,7 +103,7 @@ export const AccountBadges: FC<{ accountId: string }> = ({ accountId }) => {
|
||||
return null;
|
||||
}
|
||||
|
||||
return <div className={'account__header__badges'}>{badges}</div>;
|
||||
return <div className={classes.badges}>{badges}</div>;
|
||||
};
|
||||
|
||||
function isAdminBadge(role: AccountRole) {
|
||||
|
||||
@ -23,7 +23,7 @@ import { cleanExtraEmojis } from '../../emoji/normalize';
|
||||
import type { AccountField } from '../common';
|
||||
import { useFieldHtml } from '../hooks/useFieldHtml';
|
||||
|
||||
import classes from './redesign.module.scss';
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
const verifyMessage = defineMessage({
|
||||
id: 'account.link_verified_on',
|
||||
@ -285,11 +285,14 @@ function useColumnWrap() {
|
||||
if (!item) {
|
||||
break;
|
||||
}
|
||||
|
||||
const { ele, span } = item;
|
||||
|
||||
if (i < row.length - 1) {
|
||||
ele.dataset.cols = span.toString();
|
||||
remainingRowSpan -= span;
|
||||
} else if (
|
||||
row.length > 1 &&
|
||||
row.length === halfColSpan &&
|
||||
span === 1 &&
|
||||
remainingRowSpan > 1
|
||||
|
||||
@ -4,7 +4,6 @@ import type { FC } from 'react';
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
|
||||
import {
|
||||
blockAccount,
|
||||
followAccount,
|
||||
pinAccount,
|
||||
unblockAccount,
|
||||
@ -13,6 +12,7 @@ import {
|
||||
} from '@/mastodon/actions/accounts';
|
||||
import { removeAccountFromFollowers } from '@/mastodon/actions/accounts_typed';
|
||||
import { showAlert } from '@/mastodon/actions/alerts';
|
||||
import { initBlockModal } from '@/mastodon/actions/blocks';
|
||||
import { directCompose, mentionCompose } from '@/mastodon/actions/compose';
|
||||
import {
|
||||
initDomainBlockModal,
|
||||
@ -40,7 +40,7 @@ import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react'
|
||||
import ReportIcon from '@/material-icons/400-24px/report.svg?react';
|
||||
import ShareIcon from '@/material-icons/400-24px/share.svg?react';
|
||||
|
||||
import classes from './redesign.module.scss';
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
export const AccountMenu: FC<{ accountId: string }> = ({ accountId }) => {
|
||||
const intl = useIntl();
|
||||
@ -61,7 +61,7 @@ export const AccountMenu: FC<{ accountId: string }> = ({ accountId }) => {
|
||||
return [];
|
||||
}
|
||||
|
||||
return redesignMenuItems({
|
||||
return getMenuItems({
|
||||
account,
|
||||
signedIn: !isMe && signedIn,
|
||||
permissions,
|
||||
@ -223,7 +223,7 @@ const redesignMessages = defineMessages({
|
||||
},
|
||||
});
|
||||
|
||||
function redesignMenuItems({
|
||||
function getMenuItems({
|
||||
account,
|
||||
signedIn,
|
||||
permissions,
|
||||
@ -435,7 +435,7 @@ function redesignMenuItems({
|
||||
if (relationship?.blocking) {
|
||||
dispatch(unblockAccount(account.id));
|
||||
} else {
|
||||
dispatch(blockAccount(account.id));
|
||||
dispatch(initBlockModal(account));
|
||||
}
|
||||
},
|
||||
dangerous: true,
|
||||
|
||||
@ -10,7 +10,7 @@ import { IconButton } from '@/mastodon/components/icon_button';
|
||||
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
|
||||
import EditIcon from '@/material-icons/400-24px/edit_square.svg?react';
|
||||
|
||||
import classes from './redesign.module.scss';
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
|
||||
@ -28,14 +28,12 @@
|
||||
}
|
||||
|
||||
.name {
|
||||
display: flex;
|
||||
gap: 2px;
|
||||
align-items: baseline;
|
||||
|
||||
> h1 {
|
||||
display: inline;
|
||||
font-size: 22px;
|
||||
line-height: normal;
|
||||
white-space: initial;
|
||||
margin-inline-end: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,6 +41,10 @@
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
|
||||
.badges {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.handleHelpButton {
|
||||
display: flex;
|
||||
gap: 2px;
|
||||
@ -191,6 +193,10 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.familiarFollowers {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.note {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
@ -406,6 +412,15 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
margin: 16px 0;
|
||||
}
|
||||
|
||||
.bannerBaseCentered {
|
||||
min-height: 146px;
|
||||
align-items: center;
|
||||
|
||||
.bannerTextAndActions {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.bannerTextAndActions {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@ -426,16 +441,6 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
|
||||
}
|
||||
}
|
||||
|
||||
.bannerBaseCentered {
|
||||
composes: bannerBase;
|
||||
min-height: 146px;
|
||||
align-items: center;
|
||||
|
||||
.bannerTextAndActions {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.bannerInputButton {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
@ -10,7 +10,7 @@ import { useAccountId } from '@/mastodon/hooks/useAccountId';
|
||||
|
||||
import { areCollectionsEnabled } from '../../collections/utils';
|
||||
|
||||
import classes from './redesign.module.scss';
|
||||
import classes from './styles.module.scss';
|
||||
|
||||
const isActive: Required<NavLinkProps>['isActive'] = (match, location) =>
|
||||
match?.url === location.pathname ||
|
||||
|
||||
@ -3,22 +3,17 @@ import { useCallback, useRef, useState } from 'react';
|
||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||
|
||||
import type { ApiCollectionJSON } from 'mastodon/api_types/collections';
|
||||
import { Account } from 'mastodon/components/account';
|
||||
import type { RenderButtonOptions } from 'mastodon/components/account_list_item';
|
||||
import {
|
||||
AccountListItem,
|
||||
AccountListItemFollowButton,
|
||||
} from 'mastodon/components/account_list_item';
|
||||
import { Button } from 'mastodon/components/button';
|
||||
import { Callout } from 'mastodon/components/callout';
|
||||
import { FollowButton } from 'mastodon/components/follow_button';
|
||||
import {
|
||||
NumberFields,
|
||||
NumberFieldsItem,
|
||||
} from 'mastodon/components/number_fields';
|
||||
import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
|
||||
import {
|
||||
Article,
|
||||
ItemList,
|
||||
} from 'mastodon/components/scrollable_list/components';
|
||||
import { ShortNumber } from 'mastodon/components/short_number';
|
||||
import { useAccount } from 'mastodon/hooks/useAccount';
|
||||
import { useRelationship } from 'mastodon/hooks/useRelationship';
|
||||
import { me } from 'mastodon/initial_state';
|
||||
|
||||
import { useConfirmRevoke } from './revoke_collection_inclusion_modal';
|
||||
@ -31,99 +26,6 @@ const messages = defineMessages({
|
||||
},
|
||||
});
|
||||
|
||||
const AccountItem: React.FC<{
|
||||
accountId: string | undefined;
|
||||
collectionOwnerId: string;
|
||||
onRevoke: () => void;
|
||||
withBio?: boolean;
|
||||
withBorder?: boolean;
|
||||
}> = ({
|
||||
accountId,
|
||||
collectionOwnerId,
|
||||
onRevoke,
|
||||
withBio = true,
|
||||
withBorder = true,
|
||||
}) => {
|
||||
const intl = useIntl();
|
||||
const account = useAccount(accountId);
|
||||
const relationship = useRelationship(accountId);
|
||||
|
||||
if (!accountId || !account) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// When viewing your own collection, only show the Follow button
|
||||
// for accounts you're not following (anymore).
|
||||
// Otherwise, always show the follow button in its various states.
|
||||
const isOwnAccount = accountId === me;
|
||||
const withoutButton =
|
||||
isOwnAccount ||
|
||||
!relationship ||
|
||||
(collectionOwnerId === me &&
|
||||
(relationship.following || relationship.requested));
|
||||
|
||||
return (
|
||||
<div className={classes.accountItemWrapper} data-with-border={withBorder}>
|
||||
<Account
|
||||
minimal
|
||||
id={accountId}
|
||||
withBio={withBio}
|
||||
withBorder={false}
|
||||
withMenu={false}
|
||||
className={classes.accountItem}
|
||||
extraAccountInfo={
|
||||
<NumberFields>
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='account.followers'
|
||||
defaultMessage='Followers'
|
||||
/>
|
||||
}
|
||||
hint={intl.formatNumber(account.followers_count)}
|
||||
>
|
||||
<ShortNumber value={account.followers_count} />
|
||||
</NumberFieldsItem>
|
||||
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage id='account.posts' defaultMessage='Posts' />
|
||||
}
|
||||
hint={intl.formatNumber(account.statuses_count)}
|
||||
>
|
||||
<ShortNumber value={account.statuses_count} />
|
||||
</NumberFieldsItem>
|
||||
|
||||
<NumberFieldsItem
|
||||
label={
|
||||
<FormattedMessage
|
||||
id='account.last_active'
|
||||
defaultMessage='Last active'
|
||||
/>
|
||||
}
|
||||
>
|
||||
<RelativeTimestamp
|
||||
long
|
||||
timestamp={account.last_status_at}
|
||||
noFuture
|
||||
/>
|
||||
</NumberFieldsItem>
|
||||
</NumberFields>
|
||||
}
|
||||
/>
|
||||
{!withoutButton && <FollowButton compact accountId={accountId} />}
|
||||
{isOwnAccount && (
|
||||
<Button secondary compact onClick={onRevoke}>
|
||||
<FormattedMessage
|
||||
id='collections.detail.revoke_inclusion'
|
||||
defaultMessage='Remove me'
|
||||
/>
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const SensitiveScreen: React.FC<{
|
||||
sensitive: boolean | undefined;
|
||||
focusTargetRef: React.RefObject<HTMLHeadingElement>;
|
||||
@ -158,6 +60,7 @@ const SensitiveScreen: React.FC<{
|
||||
/>
|
||||
}
|
||||
onPrimary={showAnyway}
|
||||
className={classes.sensitiveScreen}
|
||||
>
|
||||
<FormattedMessage
|
||||
id='collections.detail.sensitive_note'
|
||||
@ -176,14 +79,37 @@ export const CollectionAccountsList: React.FC<{
|
||||
const listHeadingRef = useRef<HTMLHeadingElement>(null);
|
||||
|
||||
const isOwnCollection = collection?.account_id === me;
|
||||
const { items = [] } = collection ?? {};
|
||||
const { items = [], account_id: collectionOwnerId } = collection ?? {};
|
||||
|
||||
const renderAccountItemButton = useCallback(
|
||||
({ relationship, accountId }: RenderButtonOptions) => {
|
||||
// When viewing your own collection, only show the Follow button
|
||||
// for accounts you're not following anymore.
|
||||
const withoutButton =
|
||||
!relationship ||
|
||||
(collectionOwnerId === me &&
|
||||
(relationship.following || relationship.requested));
|
||||
|
||||
if (withoutButton) return null;
|
||||
|
||||
if (accountId === me) {
|
||||
return (
|
||||
<Button secondary compact onClick={confirmRevoke}>
|
||||
<FormattedMessage
|
||||
id='collections.detail.revoke_inclusion'
|
||||
defaultMessage='Remove me'
|
||||
/>
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
return <AccountListItemFollowButton accountId={accountId} />;
|
||||
},
|
||||
[collectionOwnerId, confirmRevoke],
|
||||
);
|
||||
|
||||
return (
|
||||
<ItemList
|
||||
isLoading={isLoading}
|
||||
emptyMessage={intl.formatMessage(messages.empty)}
|
||||
className={classes.itemList}
|
||||
>
|
||||
<>
|
||||
<h3
|
||||
className={classes.columnSubheading}
|
||||
tabIndex={-1}
|
||||
@ -207,22 +133,27 @@ export const CollectionAccountsList: React.FC<{
|
||||
sensitive={!isOwnCollection && collection.sensitive}
|
||||
focusTargetRef={listHeadingRef}
|
||||
>
|
||||
{items.map(({ account_id }, index) => (
|
||||
<Article
|
||||
key={account_id}
|
||||
aria-posinset={index + 1}
|
||||
aria-setsize={items.length}
|
||||
>
|
||||
<AccountItem
|
||||
withBorder={index !== items.length - 1}
|
||||
accountId={account_id}
|
||||
collectionOwnerId={collection.account_id}
|
||||
onRevoke={confirmRevoke}
|
||||
/>
|
||||
</Article>
|
||||
))}
|
||||
<ItemList
|
||||
isLoading={isLoading}
|
||||
emptyMessage={intl.formatMessage(messages.empty)}
|
||||
>
|
||||
{items.map(({ account_id }, index) => (
|
||||
<Article
|
||||
key={account_id}
|
||||
aria-posinset={index + 1}
|
||||
aria-setsize={items.length}
|
||||
>
|
||||
<AccountListItem
|
||||
accountId={account_id}
|
||||
withBorder={index !== items.length - 1}
|
||||
stats={['followers', 'last-active']}
|
||||
renderButton={renderAccountItemButton}
|
||||
/>
|
||||
</Article>
|
||||
))}
|
||||
</ItemList>
|
||||
</SensitiveScreen>
|
||||
)}
|
||||
</ItemList>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@ -11,6 +11,7 @@ import { useAccountHandle } from '@/mastodon/components/display_name/default';
|
||||
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';
|
||||
import { Badge } from 'mastodon/components/badge';
|
||||
import { Callout } from 'mastodon/components/callout';
|
||||
import { Column } from 'mastodon/components/column';
|
||||
import { ColumnHeader } from 'mastodon/components/column_header';
|
||||
@ -138,7 +139,7 @@ const CollectionHeader: React.FC<{ collection: ApiCollectionJSON }> = ({
|
||||
<header className={classes.header}>
|
||||
<div className={classes.titleWithMenu}>
|
||||
<div className={classes.titleWrapper}>
|
||||
{tag && <span className={classes.tag}>#{tag.name}</span>}
|
||||
{tag && <Badge label={`#${tag.name}`} icon={null} />}
|
||||
<h2 className={classes.name}>{name}</h2>
|
||||
<AuthorNote id={account_id} />
|
||||
</div>
|
||||
|
||||
@ -2,7 +2,8 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 24px;
|
||||
padding: 16px;
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
|
||||
.titleWithMenu {
|
||||
@ -20,15 +21,6 @@
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.tag {
|
||||
display: inline-block;
|
||||
padding: 4px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
color: var(--color-text-secondary);
|
||||
background: var(--color-bg-secondary);
|
||||
}
|
||||
|
||||
.name {
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
@ -71,45 +63,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
.itemList {
|
||||
padding-inline: 24px;
|
||||
.sensitiveScreen {
|
||||
margin: 16px;
|
||||
}
|
||||
|
||||
.columnSubheading {
|
||||
padding-bottom: 12px;
|
||||
padding-inline: 16px;
|
||||
font-size: 15px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.accountItemWrapper {
|
||||
display: flex;
|
||||
align-items: start;
|
||||
padding-block: 16px;
|
||||
|
||||
&[data-with-border='true'] {
|
||||
border-bottom: 1px solid var(--color-border-primary);
|
||||
}
|
||||
|
||||
:global(.account__note) {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 3;
|
||||
line-clamp: 3;
|
||||
}
|
||||
|
||||
// Hide 'No description provided' message added by `Account` component
|
||||
:global(.account__note--missing) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.accountItem {
|
||||
--account-name-size: 15px;
|
||||
--account-handle-color: var(--color-text-secondary);
|
||||
--account-handle-size: 13px;
|
||||
--account-bio-color: var(--color-text-primary);
|
||||
--account-bio-size: 13px;
|
||||
--account-outer-spacing: 0;
|
||||
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { useMemo } from 'react';
|
||||
import type { FC, ReactNode } from 'react';
|
||||
|
||||
import { Account } from '@/mastodon/components/account';
|
||||
import { AccountListItem } from '@/mastodon/components/account_list_item';
|
||||
import { Column } from '@/mastodon/components/column';
|
||||
import { ColumnBackButton } from '@/mastodon/components/column_back_button';
|
||||
import { LoadingIndicator } from '@/mastodon/components/loading_indicator';
|
||||
@ -53,12 +53,12 @@ export const AccountList: FC<AccountListProps> = ({
|
||||
}
|
||||
const children =
|
||||
list?.items.map((followerId) => (
|
||||
<Account key={followerId} id={followerId} />
|
||||
<AccountListItem key={followerId} accountId={followerId} />
|
||||
)) ?? [];
|
||||
|
||||
if (prependAccountId) {
|
||||
children.unshift(
|
||||
<Account key={prependAccountId} id={prependAccountId} minimal />,
|
||||
<AccountListItem key={prependAccountId} accountId={prependAccountId} />,
|
||||
);
|
||||
}
|
||||
return children;
|
||||
|
||||
@ -16,12 +16,12 @@ import {
|
||||
} from 'mastodon/actions/suggestions';
|
||||
import type { ApiSuggestionSourceJSON } from 'mastodon/api_types/suggestions';
|
||||
import { Avatar } from 'mastodon/components/avatar';
|
||||
import { Badge, VerifiedBadge } from 'mastodon/components/badge';
|
||||
import { DisplayName } from 'mastodon/components/display_name';
|
||||
import { FollowButton } from 'mastodon/components/follow_button';
|
||||
import { Icon } from 'mastodon/components/icon';
|
||||
import { IconButton } from 'mastodon/components/icon_button';
|
||||
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
||||
import { VerifiedBadge } from 'mastodon/components/verified_badge';
|
||||
import { domain } from 'mastodon/initial_state';
|
||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
||||
|
||||
@ -110,13 +110,12 @@ const Source: React.FC<{ id: ApiSuggestionSourceJSON }> = ({ id }) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
<Badge
|
||||
className='inline-follow-suggestions__body__scrollable__card__text-stack__source'
|
||||
title={hint}
|
||||
>
|
||||
<Icon id='' icon={InfoIcon} />
|
||||
<span>{label}</span>
|
||||
</div>
|
||||
label={label}
|
||||
icon={<InfoIcon />}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@ import {
|
||||
apiRemoveAccountFromList,
|
||||
} from 'mastodon/api/lists';
|
||||
import { Avatar } from 'mastodon/components/avatar';
|
||||
import { VerifiedBadge } from 'mastodon/components/badge';
|
||||
import { Button } from 'mastodon/components/button';
|
||||
import { Column } from 'mastodon/components/column';
|
||||
import { ColumnHeader } from 'mastodon/components/column_header';
|
||||
@ -27,7 +28,6 @@ import { FollowersCounter } from 'mastodon/components/counters';
|
||||
import { DisplayName } from 'mastodon/components/display_name';
|
||||
import ScrollableList from 'mastodon/components/scrollable_list';
|
||||
import { ShortNumber } from 'mastodon/components/short_number';
|
||||
import { VerifiedBadge } from 'mastodon/components/verified_badge';
|
||||
import { useSearchAccounts } from 'mastodon/hooks/useSearchAccounts';
|
||||
import { me } from 'mastodon/initial_state';
|
||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Ігнаруецца",
|
||||
"account.muting": "Ігнараванне",
|
||||
"account.mutual": "Вы падпісаныя адно на аднаго",
|
||||
"account.name.copy": "Скапір. ідэнтыфікатар",
|
||||
"account.name.help.domain": "{domain} — сервер, які ўтрымлівае профіль і допісы гэтага карыстальніка.",
|
||||
"account.name.help.domain_self": "{domain} — Ваш сервер, які ўтрымлівае Ваш профіль і допісы.",
|
||||
"account.name.help.footer": "Гэтак жа, як Вы можаце адпраўляць электронныя лісты людзям праз розныя кліенты электроннай пошты, Вы таксама можаце ўзаемадзейнічаць з людзьмі з іншых сервераў Mastodon, а таксама з усімі, хто карыстаецца іншымі сацыяльнымі сеткамі, якія працуюць па тых жа правілах, што і Mastodon (пратакол ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Не ігнараваць @{name}",
|
||||
"account.unmute_notifications_short": "Апавяшчаць",
|
||||
"account.unmute_short": "Не ігнараваць",
|
||||
"account_edit.advanced_settings.bot_hint": "Пакажыце іншым, што гэты ўліковы запіс у асноўным выконвае аўтаматычныя дзеянні і можа не кантралявацца",
|
||||
"account_edit.advanced_settings.bot_label": "Аўтаматызаваны ўліковы запіс",
|
||||
"account_edit.advanced_settings.title": "Дадатковыя налады",
|
||||
"account_edit.bio.add_label": "Апісаць сябе",
|
||||
"account_edit.bio.edit_label": "Змяніць апісанне",
|
||||
"account_edit.bio.placeholder": "Коратка апішыце сябе, каб дапамагчы іншым пазнаць Вас.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Ваш лічбавы дом, дзе захоўваюцца ўсе вашыя допісы. Не падабаецца гэты сервер? Змяніце сервер у любы час з захаваннем сваіх падпісчыкаў.",
|
||||
"domain_pill.your_username": "Ваш унікальны ідэнтыфікатар на гэтым серверы. Можна знайсці карыстальнікаў з аднолькавым іменем карыстальніка на розных серверах.",
|
||||
"dropdown.empty": "Выбраць варыянт",
|
||||
"email_subscriptions.email": "Адрас электроннай пошты",
|
||||
"email_subscriptions.email": "Эл. пошта",
|
||||
"email_subscriptions.form.action": "Падпісацца",
|
||||
"email_subscriptions.form.disclaimer": "Вы можаце адпісацца ў любы момант. Каб даведацца болей, звярніцеся да <a>Палітыкі прыватнасці</a>.",
|
||||
"email_subscriptions.form.lead": "Атрымліваць допісы па электроннай пошце без стварэння ўліковага запісу Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Атрымлівайце допісы ў сваю паштовую скрыню без стварэння ўліковага запісу Mastodon. Пры жаданні зможаце адпісацца ў любы момант. Падрабязней у <a>Палітыцы прыватнасці</a>.",
|
||||
"email_subscriptions.form.title": "Зарэгістравацца на абнаўленні па электроннай пошце ад {name}",
|
||||
"email_subscriptions.submitted.lead": "Праверце сваю паштовую скрыню, каб знайсці там ліст і скончыць рэгістрацыю на абнаўленні па электроннай пошце.",
|
||||
"email_subscriptions.submitted.title": "Яшчэ адзін крок",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Skjult",
|
||||
"account.muting": "Skjuler",
|
||||
"account.mutual": "I følger hinanden",
|
||||
"account.name.copy": "Kopiér handle",
|
||||
"account.name.help.domain": "{domain} er den server, der er vært for brugerens profil og indlæg.",
|
||||
"account.name.help.domain_self": "{domain} er din server, der er vært for din profil og indlæg.",
|
||||
"account.name.help.footer": "Ligesom du kan sende e-mails til personer, der bruger forskellige e-mail-klienter, kan du interagere med personer på andre Mastodon-servere – og med alle på andre sociale apps, der bruger de samme regler som Mastodon (ActivityPub-protokollen).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Vis @{name} igen",
|
||||
"account.unmute_notifications_short": "Vis notifikationer igen",
|
||||
"account.unmute_short": "Vis igen",
|
||||
"account_edit.advanced_settings.bot_hint": "Signalér til andre, at kontoen hovedsageligt udfører automatiserede handlinger og muligvis ikke monitoreres",
|
||||
"account_edit.advanced_settings.bot_label": "Automatiseret konto",
|
||||
"account_edit.advanced_settings.title": "Avancerede indstillinger",
|
||||
"account_edit.bio.add_label": "Tilføj bio",
|
||||
"account_edit.bio.edit_label": "Rediger bio",
|
||||
"account_edit.bio.placeholder": "Tilføj en kort introduktion, så andre kan få et indtryk af, hvem du er.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.",
|
||||
"domain_pill.your_username": "Din unikke identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
|
||||
"dropdown.empty": "Vælg en indstilling",
|
||||
"email_subscriptions.email": "E-mailadresse",
|
||||
"email_subscriptions.email": "E-mail",
|
||||
"email_subscriptions.form.action": "Abonnér",
|
||||
"email_subscriptions.form.disclaimer": "Du kan til enhver tid afmelde dig. For yderligere oplysninger henvises til <a>privatlivspolitikken</a>.",
|
||||
"email_subscriptions.form.lead": "Få indlæg i din indbakke uden at oprette en Mastodon-konto.",
|
||||
"email_subscriptions.form.bottom": "Få indlæg sendt direkte til din indbakke uden at oprette en Mastodon-konto. Du kan til enhver tid afmelde dig. For mere information henvises til <a>privatlivspolitikken</a>.",
|
||||
"email_subscriptions.form.title": "Tilmeld dig e-mailopdateringer fra {name}",
|
||||
"email_subscriptions.submitted.lead": "Kig i din indbakke efter en e-mail, hvor du kan afslutte tilmeldingen til e-mailopdateringer.",
|
||||
"email_subscriptions.submitted.title": "Et trin mere",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Stummgeschaltet",
|
||||
"account.muting": "Stummgeschaltet",
|
||||
"account.mutual": "Ihr folgt einander",
|
||||
"account.name.copy": "Adresse kopieren",
|
||||
"account.name.help.domain": "{domain} ist der Server, auf dem das Profil registriert ist und die Beiträge verwaltet werden.",
|
||||
"account.name.help.domain_self": "{domain} ist der Server, auf dem du registriert bist und deine Beiträge verwaltet werden.",
|
||||
"account.name.help.footer": "So wie du E-Mails an andere trotz unterschiedlicher E-Mail-Provider senden kannst, so kannst du auch mit anderen Profilen auf unterschiedlichen Mastodon-Servern interagieren. Wenn andere soziale Apps die gleichen Kommunikationsregeln (das ActivityPub-Protokoll) wie Mastodon verwenden, dann funktioniert die Kommunikation auch dort.",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Stummschaltung von @{name} aufheben",
|
||||
"account.unmute_notifications_short": "Stummschaltung der Benachrichtigungen aufheben",
|
||||
"account.unmute_short": "Stummschaltung aufheben",
|
||||
"account_edit.advanced_settings.bot_hint": "Signalisiert, dass dieses Konto hauptsächlich automatisierte Aktionen durchführt und möglicherweise nicht persönlich betreut wird",
|
||||
"account_edit.advanced_settings.bot_label": "Automatisiertes Konto",
|
||||
"account_edit.advanced_settings.title": "Erweiterte Einstellungen",
|
||||
"account_edit.bio.add_label": "Biografie hinzufügen",
|
||||
"account_edit.bio.edit_label": "Biografie bearbeiten",
|
||||
"account_edit.bio.placeholder": "Gib anderen einen Einblick über dich, damit sie wissen, wer du bist.",
|
||||
@ -579,8 +583,7 @@
|
||||
"dropdown.empty": "Option auswählen",
|
||||
"email_subscriptions.email": "E-Mail-Adresse",
|
||||
"email_subscriptions.form.action": "Abonnieren",
|
||||
"email_subscriptions.form.disclaimer": "Du kannst die Benachrichtigungen jederzeit abbestellen. In der <a>Datenschutzerklärung</a> erfährst du mehr dazu.",
|
||||
"email_subscriptions.form.lead": "Lass dir Beiträge in dein Postfach senden, ohne ein Mastodon-Konto zu erstellen.",
|
||||
"email_subscriptions.form.bottom": "Lass dir Beiträge in dein Postfach senden, ohne ein Mastodon-Konto zu erstellen. Du kannst die E-Mails jederzeit abbestellen. Weitere Details findest du in der <a>Datenschutzerklärung</a>.",
|
||||
"email_subscriptions.form.title": "Erhalte eine E-Mail bei Neuigkeiten von {name}",
|
||||
"email_subscriptions.submitted.lead": "Überprüfe dein Postfach, um die Benachrichtigungen per E-Mail zu aktivieren.",
|
||||
"email_subscriptions.submitted.title": "Ein weiterer Schritt",
|
||||
|
||||
@ -74,7 +74,7 @@
|
||||
"account.languages": "Αλλαγή εγγεγραμμένων γλωσσών",
|
||||
"account.last_active": "Τελευταία ενεργός",
|
||||
"account.link_verified_on": "Η ιδιοκτησία αυτού του συνδέσμου ελέγχθηκε στις {date}",
|
||||
"account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού έχει ρυθμιστεί σε κλειδωμένη. Ο ιδιοκτήτης αξιολογεί χειροκίνητα ποιος μπορεί να τον ακολουθήσει.",
|
||||
"account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού έχει ρυθμιστεί σε κλειδωμένη. Ο ιδιοκτήτης ελέγχει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.",
|
||||
"account.media": "Πολυμέσα",
|
||||
"account.mention": "Επισήμανση @{name}",
|
||||
"account.menu.add_to_list": "Προσθήκη στη λίστα…",
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Σε σίγαση",
|
||||
"account.muting": "Σίγαση",
|
||||
"account.mutual": "Ακολουθείτε ο ένας τον άλλο",
|
||||
"account.name.copy": "Αντιγραφή πλήρους ονόματος χρήστη",
|
||||
"account.name.help.domain": "Το {domain} είναι ο διακομιστής που φιλοξενεί το προφίλ και τις αναρτήσεις του χρήστη.",
|
||||
"account.name.help.domain_self": "Το {domain} είναι ο διακομιστής σας που φιλοξενεί το προφίλ και τις αναρτήσεις σας.",
|
||||
"account.name.help.footer": "Ακριβώς όπως μπορείτε να στείλετε μηνύματα ηλεκτρονικού ταχυδρομείου σε άτομα χρησιμοποιώντας διαφορετικούς παρόχους email, μπορείτε να αλληλεπιδράσετε με άτομα σε άλλους διακομιστές Mastodon – και με οποιονδήποτε σε άλλες κοινωνικές εφαρμογές που τροφοδοτούνται από το ίδιο σύνολο κανόνων όπως χρησιμοποιεί το Mastodon (το πρωτόκολλο ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Άρση σίγασης @{name}",
|
||||
"account.unmute_notifications_short": "Σίγαση ειδοποιήσεων",
|
||||
"account.unmute_short": "Κατάργηση σίγασης",
|
||||
"account_edit.advanced_settings.bot_hint": "Υποδεικνύει σε άλλους χρήστες ότι ο λογαριασμός αυτός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ίσως να μην παρακολουθείται",
|
||||
"account_edit.advanced_settings.bot_label": "Αυτοματοποιημένος λογαριασμός",
|
||||
"account_edit.advanced_settings.title": "Προχωρημένες ρυθμίσεις",
|
||||
"account_edit.bio.add_label": "Προσθήκη βιογραφικού",
|
||||
"account_edit.bio.edit_label": "Επεξεργασία βιογραφικού",
|
||||
"account_edit.bio.placeholder": "Προσθέστε μια σύντομη εισαγωγή για να βοηθήσετε άλλους να σας αναγνωρίσουν.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Το ψηφιακό σου σπίτι, όπου ζουν όλες σου οι αναρτήσεις. Δε σ' αρέσει αυτός; Μετακινήσου σε διακομιστές ανά πάσα στιγμή και πάρε και τους ακόλουθούς σου μαζί.",
|
||||
"domain_pill.your_username": "Το μοναδικό σου αναγνωριστικό σε τούτο τον διακομιστή. Είναι πιθανό να βρεις χρήστες με το ίδιο όνομα χρήστη σε διαφορετικούς διακομιστές.",
|
||||
"dropdown.empty": "Διαλέξτε μια επιλογή",
|
||||
"email_subscriptions.email": "Διεύθυνση email",
|
||||
"email_subscriptions.email": "Email",
|
||||
"email_subscriptions.form.action": "Εγγραφή",
|
||||
"email_subscriptions.form.disclaimer": "Μπορείτε να απεγγραφείτε οποιαδήποτε στιγμή. Για περισσότερες πληροφορίες, ανατρέξτε στην <a>Πολιτική Απορρήτου</a>.",
|
||||
"email_subscriptions.form.lead": "Λάβετε αναρτήσεις στα εισερχόμενά σας χωρίς να δημιουργήσετε λογαριασμό Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Λάβετε αναρτήσεις στα εισερχόμενά σας χωρίς να χρειαστεί να δημιουργήσετε λογαριασμό Mastodon. Κάντε απεγγραφή οποιαδήποτε στιγμή. Για περισσότερες πληροφορίες, ανατρέξτε στην <a>Πολιτική Απορρήτου</a>.",
|
||||
"email_subscriptions.form.title": "Εγγραφείτε για ενημερώσεις μέσω email από {name}",
|
||||
"email_subscriptions.submitted.lead": "Ελέγξτε τα εισερχόμενά σας για να ολοκληρωθεί η εγγραφή για ενημερώσεις μέσω email.",
|
||||
"email_subscriptions.submitted.title": "Ένα βήμα ακόμα",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Silenciado",
|
||||
"account.muting": "Silenciada",
|
||||
"account.mutual": "Se siguen mutuamente",
|
||||
"account.name.copy": "Copiar alias",
|
||||
"account.name.help.domain": "«{domain}» es el servidor que hospeda el perfil y los mensajes del usuario.",
|
||||
"account.name.help.domain_self": "«{domain}» es tu servidor que hospeda tu perfil y tus mensajes.",
|
||||
"account.name.help.footer": "Así como podés enviar correos electrónicos a personas usando diferentes clientes de email, del mismo modo podés interactuar con cuentas en otros servidores de Mastodon; y con cuentas en otras aplicaciones sociales que funcionen bajo las mismas normas que Mastodon (esto es, el protocolo ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Dejar de silenciar a @{name}",
|
||||
"account.unmute_notifications_short": "Dejar de silenciar notificaciones",
|
||||
"account.unmute_short": "Dejar de silenciar",
|
||||
"account_edit.advanced_settings.bot_hint": "Señala a otras cuentas que esta cuenta principalmente realiza acciones automatizadas y podría no estar monitoreada",
|
||||
"account_edit.advanced_settings.bot_label": "Cuenta automatizada",
|
||||
"account_edit.advanced_settings.title": "Configuración avanzada",
|
||||
"account_edit.bio.add_label": "Agregar biografía",
|
||||
"account_edit.bio.edit_label": "Editar biografía",
|
||||
"account_edit.bio.placeholder": "Agregá una breve introducción para ayudar a otras personas a identificarte.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Tu hogar digital, donde residen todos tus mensajes. ¿No te gusta este sitio? Mudate a otro servidor en cualquier momento y llevate a tus seguidores.",
|
||||
"domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar cuentas con el mismo nombre de usuario en diferentes servidores.",
|
||||
"dropdown.empty": "Seleccioná una opción",
|
||||
"email_subscriptions.email": "Dirección de correo electrónico",
|
||||
"email_subscriptions.email": "Correo electrónico",
|
||||
"email_subscriptions.form.action": "Suscribite",
|
||||
"email_subscriptions.form.disclaimer": "Podés desuscribirte en cualquier momento. Para más información, consultá la <a>Política de privacidad</a>.",
|
||||
"email_subscriptions.form.lead": "Obtené mensajes en tu bandeja de entrada sin crear una cuenta de Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Obtené publicaciones en tu bandeja de entrada sin crear una cuenta de Mastodon. Desuscribite en cualquier momento. Para más información, consultá la <a>Política de privacidad</a>.",
|
||||
"email_subscriptions.form.title": "Suscribite para recibir actualizaciones por correo electrónico de {name}",
|
||||
"email_subscriptions.submitted.lead": "Revisá tu bandeja de entrada para confirmar tu suscripción, así podés recibir actualizaciones por correo electrónico.",
|
||||
"email_subscriptions.submitted.title": "Un paso más",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Silenciado",
|
||||
"account.muting": "Silenciando",
|
||||
"account.mutual": "Se siguen el uno al otro",
|
||||
"account.name.copy": "Copiar identificador",
|
||||
"account.name.help.domain": "{domain} es el servidor que aloja el perfil y las publicaciones del usuario.",
|
||||
"account.name.help.domain_self": "{domain} es el servidor que aloja tu perfil y tus publicaciones.",
|
||||
"account.name.help.footer": "Al igual que puedes enviar correos electrónicos a personas que utilizan diferentes clientes de correo electrónico, puedes interactuar con personas en otros servidores Mastodon, y con cualquier persona en otras aplicaciones sociales que funcionen con el mismo conjunto de reglas que utiliza Mastodon (el protocolo ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Dejar de silenciar a @{name}",
|
||||
"account.unmute_notifications_short": "Dejar de silenciar notificaciones",
|
||||
"account.unmute_short": "Dejar de silenciar",
|
||||
"account_edit.advanced_settings.bot_hint": "Indica a los demás que la cuenta realiza principalmente acciones automatizadas y que es posible que no esté supervisada",
|
||||
"account_edit.advanced_settings.bot_label": "Cuenta automatizada",
|
||||
"account_edit.advanced_settings.title": "Configuración avanzada",
|
||||
"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.",
|
||||
@ -436,7 +440,7 @@
|
||||
"column_header.moveLeft_settings": "Mover columna a la izquierda",
|
||||
"column_header.moveRight_settings": "Mover columna a la derecha",
|
||||
"column_header.pin": "Fijar",
|
||||
"column_header.show_settings": "Mostrar ajustes",
|
||||
"column_header.show_settings": "Mostrar configuración",
|
||||
"column_header.unpin": "Dejar de fijar",
|
||||
"column_search.cancel": "Cancelar",
|
||||
"combobox.close_results": "Cerrar resultados",
|
||||
@ -549,7 +553,7 @@
|
||||
"directory.local": "Sólo de {domain}",
|
||||
"directory.new_arrivals": "Recién llegados",
|
||||
"directory.recently_active": "Recientemente activo",
|
||||
"disabled_account_banner.account_settings": "Ajustes de la cuenta",
|
||||
"disabled_account_banner.account_settings": "Configuración de la cuenta",
|
||||
"disabled_account_banner.text": "Tu cuenta {disabledAccount} está actualmente deshabilitada.",
|
||||
"dismissable_banner.community_timeline": "Estas son las publicaciones públicas más recientes de las personas cuyas cuentas están alojadas en {domain}.",
|
||||
"dismissable_banner.dismiss": "Descartar",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Tu hogar digital, donde residen todas tus publicaciones. ¿No te gusta este sitio? Muévete a otro servidor en cualquier momento y llévate a tus seguidores.",
|
||||
"domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar usuarios con el mismo nombre de usuario en diferentes servidores.",
|
||||
"dropdown.empty": "Elige una opción",
|
||||
"email_subscriptions.email": "Dirección de correo electrónico",
|
||||
"email_subscriptions.email": "Correo electrónico",
|
||||
"email_subscriptions.form.action": "Suscribirse",
|
||||
"email_subscriptions.form.disclaimer": "Puedes darte de baja en cualquier momento. Para obtener más información, consulta la <a>Política de privacidad</a>.",
|
||||
"email_subscriptions.form.lead": "Recibe publicaciones en tu bandeja de entrada sin necesidad de crear una cuenta de Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Recibe publicaciones en tu bandeja de entrada sin necesidad de crear una cuenta de Mastodon. Puedes darte de baja en cualquier momento. Para obtener más información, consulta la <a>Política de privacidad</a>.",
|
||||
"email_subscriptions.form.title": "Suscríbete para recibir actualizaciones por correo electrónico de {name}",
|
||||
"email_subscriptions.submitted.lead": "Revisa tu bandeja de entrada para encontrar el correo electrónico que te permitirá completar tu suscripción a las actualizaciones por correo electrónico.",
|
||||
"email_subscriptions.submitted.title": "Un paso más",
|
||||
@ -660,8 +663,8 @@
|
||||
"filter_modal.added.expired_explanation": "Esta categoría de filtro ha caducado; deberás cambiar la fecha de caducidad para que se aplique.",
|
||||
"filter_modal.added.expired_title": "¡Filtro expirado!",
|
||||
"filter_modal.added.review_and_configure": "Para revisar y configurar esta categoría de filtros, vaya a {settings_link}.",
|
||||
"filter_modal.added.review_and_configure_title": "Ajustes de filtro",
|
||||
"filter_modal.added.settings_link": "página de ajustes",
|
||||
"filter_modal.added.review_and_configure_title": "Configuración de filtros",
|
||||
"filter_modal.added.settings_link": "página de configuración",
|
||||
"filter_modal.added.short_explanation": "Esta publicación ha sido añadida a la siguiente categoría de filtros: {title}.",
|
||||
"filter_modal.added.title": "¡Filtro añadido!",
|
||||
"filter_modal.select_filter.context_mismatch": "no se aplica a este contexto",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Silenciado",
|
||||
"account.muting": "Silenciando",
|
||||
"account.mutual": "Os seguís mutuamente",
|
||||
"account.name.copy": "Copiar alias",
|
||||
"account.name.help.domain": "{domain} es el servidor que alberga el perfil y las publicaciones del usuario.",
|
||||
"account.name.help.domain_self": "{domain} es tu servidor que aloja tu perfil y publicaciones.",
|
||||
"account.name.help.footer": "Al igual que puedes enviar correos electrónicos a personas usando diferentes clientes de correo electrónico, puedes interactuar con personas en otros servidores de Mastodon – y con personas en otras aplicaciones sociales que hablen el mismo idioma que Mastodon (el protocolo ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Dejar de silenciar a @{name}",
|
||||
"account.unmute_notifications_short": "Dejar de silenciar notificaciones",
|
||||
"account.unmute_short": "Dejar de silenciar",
|
||||
"account_edit.advanced_settings.bot_hint": "Señalar a los demás que la cuenta realiza principalmente acciones automáticas y podría no estar monitorizada",
|
||||
"account_edit.advanced_settings.bot_label": "Cuenta automatizada",
|
||||
"account_edit.advanced_settings.title": "Ajustes avanzados",
|
||||
"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.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Tu hogar digital, donde residen todas tus publicaciones. ¿No te gusta este sitio? Muévete a otro servidor en cualquier momento y llévate a tus seguidores.",
|
||||
"domain_pill.your_username": "Tu identificador único en este servidor. Es posible encontrar usuarios con el mismo nombre de usuario en diferentes servidores.",
|
||||
"dropdown.empty": "Selecciona una opción",
|
||||
"email_subscriptions.email": "Dirección de correo electrónico",
|
||||
"email_subscriptions.email": "Correo electrónico",
|
||||
"email_subscriptions.form.action": "Suscribirse",
|
||||
"email_subscriptions.form.disclaimer": "Puedes darte de baja en cualquier momento. Para obtener más información, consulta la <a>Política de Privacidad</a>.",
|
||||
"email_subscriptions.form.lead": "Obtén mensajes en tu bandeja de entrada sin crear una cuenta de Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Recibe publicaciones en tu bandeja de entrada sin crear una cuenta de Mastodon. Puedes darte de baja en cualquier momento. Para obtener más información, consulta la <a>Política de Privacidad</a>.",
|
||||
"email_subscriptions.form.title": "Suscríbete para recibir actualizaciones por correo electrónico de {name}",
|
||||
"email_subscriptions.submitted.lead": "Revisa tu bandeja de entrada para terminar de suscribirte y recibir actualizaciones por correo electrónico.",
|
||||
"email_subscriptions.submitted.title": "Un paso más",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Summutatud",
|
||||
"account.muting": "Summutatud konto",
|
||||
"account.mutual": "Te jälgite teineteist",
|
||||
"account.name.copy": "Kopeeri kasutajatunnus",
|
||||
"account.name.help.domain": "{domain} on server, kus antud konto koos profiiliga asub ning kust postitused saavad alguse.",
|
||||
"account.name.help.domain_self": "{domain} on server, kus sinu konto koos profiiliga asub ning kust sinu postitused saavad alguse.",
|
||||
"account.name.help.footer": "Nii nagu võid saata teiste e-posti serverite kasutajatele e-kirju, saad ka suhelda teiste Mastodoni serverite kasutajatega - ja tegelikult ka muude sotsiaalvõrkude kasutajatega, kus on kasutusel sama lahendus, nagu Mastodon pruugib (ActivityPubi protokoll).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Lõpeta {name} kasutaja summutamine",
|
||||
"account.unmute_notifications_short": "Lõpeta teavituste 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_label": "Automatiseeritud konto",
|
||||
"account_edit.advanced_settings.title": "Täpsemad seaded",
|
||||
"account_edit.bio.add_label": "Lisa elulugu",
|
||||
"account_edit.bio.edit_label": "Muuda elulugu",
|
||||
"account_edit.bio.placeholder": "Lisa lühike tutvustus, et aidata teistel sinust pilti luua.",
|
||||
@ -158,9 +162,9 @@
|
||||
"account_edit.display_name.edit_label": "Muuda kuvatavat nime",
|
||||
"account_edit.display_name.placeholder": "Kuvatav nimi määrab, kuidas sinu nimi on näha sinu profiilis ja ajajoontel.",
|
||||
"account_edit.display_name.title": "Kuvatav nimi",
|
||||
"account_edit.featured_hashtags.edit_label": "Lisa silte",
|
||||
"account_edit.featured_hashtags.edit_label": "Lisa teemaviiteid",
|
||||
"account_edit.featured_hashtags.placeholder": "Aita teistel leida su lemmikteemasid ja neile kiiresti juurde pääseda.",
|
||||
"account_edit.featured_hashtags.title": "Esiletõstetud sildid",
|
||||
"account_edit.featured_hashtags.title": "Esiletõstetud teemaviited",
|
||||
"account_edit.field_actions.delete": "Kustuta väli",
|
||||
"account_edit.field_actions.edit": "Muuda välja",
|
||||
"account_edit.field_delete_modal.confirm": "Kas oled kindel, et soovid selle kohandatud välja kustutada? Seda toimingut ei saa tagasi võtta.",
|
||||
@ -206,9 +210,42 @@
|
||||
"account_edit.profile_tab.button_label": "Kohanda",
|
||||
"account_edit.profile_tab.hint.description": "Need seaded määravad, mida kasutajad näevad {server} ametlikes rakendustes, kuid ei pruugi kehtida teiste serverite kasutajate ja kolmandate osapoolte rakenduste puhul.",
|
||||
"account_edit.profile_tab.hint.title": "Näitamine siiski erinev",
|
||||
"account_edit_tags.max_tags_reached": "Oled jõudnud esiletõstetud siltide maksimumarvuni.",
|
||||
"account_edit_tags.search_placeholder": "Sisesta silt…",
|
||||
"account_edit.profile_tab.show_featured.description": "\"Esile tõstetud\" on valikuline taab, kus saad näidata teisi kontosid.",
|
||||
"account_edit.profile_tab.show_featured.title": "Näita esiletõstetute taabi",
|
||||
"account_edit.profile_tab.show_media.description": "\"Meedia\" on valikuline taab, mis näitab sinu piltide või videotega postitusi.",
|
||||
"account_edit.profile_tab.show_media.title": "Näita meedia taabi",
|
||||
"account_edit.profile_tab.show_media_replies.description": "Sisse lülitatuna näitab meedia taab mõlemat, nii sinu postitusi kui su vastuseid teiste postitustele.",
|
||||
"account_edit.profile_tab.show_media_replies.title": "Kaasa meedia taabile ka vastused",
|
||||
"account_edit.profile_tab.subtitle": "Kohanda oma profiili vahekaarte ja nende sisu.",
|
||||
"account_edit.profile_tab.title": "Profiili taabide seaded",
|
||||
"account_edit.save": "Salvesta",
|
||||
"account_edit.upload_modal.back": "Tagasi",
|
||||
"account_edit.upload_modal.done": "Valmis",
|
||||
"account_edit.upload_modal.next": "Edasi",
|
||||
"account_edit.upload_modal.step_crop.zoom": "Suum",
|
||||
"account_edit.upload_modal.step_upload.button": "Sirvi faile",
|
||||
"account_edit.upload_modal.step_upload.dragging": "Üleslaadimiseks kukuta",
|
||||
"account_edit.upload_modal.step_upload.header": "Vali pilt",
|
||||
"account_edit.upload_modal.step_upload.hint": "WEBP-, PNG-, GIF- või JPG-vormingus, maksimaalselt {limit} MB.{br}Pilt skaleeritakse mõõtmeteni {width}x{height} pikselit.",
|
||||
"account_edit.upload_modal.title_add.avatar": "Lisa profiilifoto",
|
||||
"account_edit.upload_modal.title_add.header": "Lisa kaanefoto",
|
||||
"account_edit.upload_modal.title_replace.avatar": "Asenda profiilifoto",
|
||||
"account_edit.upload_modal.title_replace.header": "Asenda kaanefoto",
|
||||
"account_edit.verified_modal.details": "Tõsta oma Mastodoni profiili usaldusväärsust, kinnitades lingid isiklikele veebisaitidele. See toimib järgmiselt:",
|
||||
"account_edit.verified_modal.invisible_link.details": "Lisa link oma päisesse. Oluline on atribuut rel=\"me\", mis takistab identiteedivargust kasutajate loodud sisuga veebisaitidel. Lehe päises võib kasutada isegi silti link {tag} asemel, kuid HTML peab olema kättesaadav ka ilma JavaScripti käivitamiseta.",
|
||||
"account_edit.verified_modal.invisible_link.summary": "Kuidas ma muudan lingi nähtamatuks?",
|
||||
"account_edit.verified_modal.step1.header": "Kopeeri allpool olev HTML-kood ja kleebi oma veebisaidi päisesse",
|
||||
"account_edit.verified_modal.step2.details": "Kui oled oma veebisaidi kohandatud väljana juba lisanud, pead kinnitamise käivitamiseks selle kustutama ja uuesti lisama.",
|
||||
"account_edit.verified_modal.step2.header": "Lisa oma veebileht kohandatud väljana",
|
||||
"account_edit.verified_modal.title": "Kuidas lisada kinnitatud link",
|
||||
"account_edit_tags.add_tag": "Lisa #{tagName}",
|
||||
"account_edit_tags.column_title": "Muuda silte",
|
||||
"account_edit_tags.help_text": "Esiletõstetud teemaviited aitavad kasutajatel sinu profiili leida ja sellega suhestuda. Need kuvatakse filtritena sinu profiili lehe tegevuste vaates.",
|
||||
"account_edit_tags.max_tags_reached": "Oled jõudnud esiletõstetud teemaviidete maksimumarvuni.",
|
||||
"account_edit_tags.search_placeholder": "Sisesta teemaviide…",
|
||||
"account_edit_tags.suggestions": "Soovitused:",
|
||||
"account_edit_tags.tag_status_count": "{count, plural, one {# postitus} other {# postitust}}",
|
||||
"account_list.total": "{total, plural, one {# konto} other {# kontot}}",
|
||||
"account_note.placeholder": "Klõpsa märke lisamiseks",
|
||||
"admin.dashboard.daily_retention": "Kasutajate päevane allesjäämine peale registreerumist",
|
||||
"admin.dashboard.monthly_retention": "Kasutajate kuine allesjäämine peale registreerumist",
|
||||
@ -306,11 +343,18 @@
|
||||
"callout.dismiss": "Loobu",
|
||||
"carousel.current": "<sr>Slaid</sr> {current, number} / {max, number}",
|
||||
"carousel.slide": "Slaid {current, number} / {max, number}",
|
||||
"character_counter.recommended": "{currentLength}/{maxLength} soovitatud märke",
|
||||
"character_counter.required": "{currentLength}/{maxLength} märki",
|
||||
"closed_registrations.other_server_instructions": "Kuna Mastodon on detsentraliseeritud, võib konto teha teise serverisse ja sellegipoolest siinse kontoga suhelda.",
|
||||
"closed_registrations_modal.description": "Praegu ei ole võimalik teha {domain} peale kontot, aga pea meeles, et sul ei pea olema just {domain} konto, et Mastodoni kasutada.",
|
||||
"closed_registrations_modal.find_another_server": "Leia mõni muu server",
|
||||
"closed_registrations_modal.preamble": "Mastodon on hajutatud võrk, mis tähendab, et konto võid luua ükskõik kuhu, kuid ikkagi saad jälgida ja suhelda igaühega selles serveris. Võid isegi oma serveri püsti panna!",
|
||||
"closed_registrations_modal.title": "Mastodoni registreerumine",
|
||||
"collection.share_modal.share_link_label": "Kutse jagamise link",
|
||||
"collection.share_modal.share_via_post": "Postita Mastodonis",
|
||||
"collection.share_modal.share_via_system": "Jaga kohas…",
|
||||
"collection.share_modal.title": "Jaga kogumikku",
|
||||
"collection.share_modal.title_new": "Jaga oma ut kogumikku!",
|
||||
"collections.account_count": "{count, plural, one {# kasutajakonto} other {# kasutajakontot}}",
|
||||
"collections.collection_description": "Kirjeldus",
|
||||
"collections.collection_name": "Nimi",
|
||||
@ -516,7 +560,7 @@
|
||||
"emoji_button.search_results": "Otsitulemused",
|
||||
"emoji_button.symbols": "Sümbolid",
|
||||
"emoji_button.travel": "Reisimine & kohad",
|
||||
"empty_column.account_featured.other": "{acct} pole veel midagi esile tõstnud. Kas sa teadsid, et oma profiilis saad esile tõsta enamkasutatavaid teemaviiteid või sõbra kasutajakontot?",
|
||||
"empty_column.account_featured.other": "{acct} pole veel midagi esile tõstnud. Kas teadsid, et oma profiilis saad esile tõsta rohkem kasutatud teemaviiteid või sõbra kasutajakontot?",
|
||||
"empty_column.account_hides_collections": "See kasutaja otsustas mitte teha seda infot saadavaks",
|
||||
"empty_column.account_suspended": "Konto kustutatud",
|
||||
"empty_column.account_timeline": "Siin postitusi ei ole!",
|
||||
@ -556,6 +600,8 @@
|
||||
"featured_carousel.header": "{count, plural, one {Esiletõstetud postitus} other {Esiletõstetud postitust}}",
|
||||
"featured_carousel.slide": "Postitus {current, number} / {max, number}",
|
||||
"featured_tags.more_items": "+{count}",
|
||||
"featured_tags.suggestions": "Postitasid hiljuti {items} kohta. Kas lisada need esiletõstetud teemaviideteks?",
|
||||
"featured_tags.suggestions.added": "Halda mistahes ajal oma esiletõstetud teemaviiteid kohas <link>Muuda profiili > Esiletõstetud teemaviited</link>.",
|
||||
"filter_modal.added.context_mismatch_explanation": "See filtrikategooria ei rakendu kontekstis, kuidas postituseni jõudsid. Kui tahad postitust ka selles kontekstis filtreerida, pead muutma filtrit.",
|
||||
"filter_modal.added.context_mismatch_title": "Konteksti mittesobivus!",
|
||||
"filter_modal.added.expired_explanation": "Selle filtri kategooria on aegunud. pead muutma aegumiskuupäeva, kui tahad, et filter kehtiks.",
|
||||
@ -620,7 +666,7 @@
|
||||
"hashtag.column_header.tag_mode.any": "või teemaviide {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "ilma teemaviiteta {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "Soovitusi ei leitud",
|
||||
"hashtag.column_settings.select.placeholder": "Sisesta sildid…",
|
||||
"hashtag.column_settings.select.placeholder": "Sisesta teemaviited…",
|
||||
"hashtag.column_settings.tag_mode.all": "Kõik need",
|
||||
"hashtag.column_settings.tag_mode.any": "Mõni neist",
|
||||
"hashtag.column_settings.tag_mode.none": "Mitte ükski neist",
|
||||
@ -920,7 +966,7 @@
|
||||
"onboarding.profile.display_name": "Näidatav nimi",
|
||||
"onboarding.profile.display_name_hint": "Su täisnimi või naljanimi…",
|
||||
"onboarding.profile.note": "Elulugu",
|
||||
"onboarding.profile.note_hint": "Saad @mainida teisi kasutajaid või lisada #teemaviidet…",
|
||||
"onboarding.profile.note_hint": "Saad @mainida teisi kasutajaid või lisada #teemaviiteid…",
|
||||
"onboarding.profile.title": "Profiili seadistamine",
|
||||
"onboarding.profile.upload_avatar": "Laadi üles profiilipilt",
|
||||
"onboarding.profile.upload_header": "Laadi üles profiili päis",
|
||||
@ -1048,7 +1094,7 @@
|
||||
"search_popout.user": "kasutaja",
|
||||
"search_results.accounts": "Profiilid",
|
||||
"search_results.all": "Kõik",
|
||||
"search_results.hashtags": "Sildid",
|
||||
"search_results.hashtags": "Teemaviited",
|
||||
"search_results.no_results": "Tulemusi pole.",
|
||||
"search_results.no_search_yet": "Proovi otsida postitusi, profiile või teemaviiteid.",
|
||||
"search_results.see_all": "Vaata kõiki",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Mykistetty",
|
||||
"account.muting": "Mykistetty",
|
||||
"account.mutual": "Seuraatte toisianne",
|
||||
"account.name.copy": "Kopioi käyttäjätunnus",
|
||||
"account.name.help.domain": "{domain} on palvelin, jolla käyttäjän profiili ja julkaisut sijaitsevat.",
|
||||
"account.name.help.domain_self": "{domain} on palvelin, jolla profiilisi ja julkaisusi sijaitsevat.",
|
||||
"account.name.help.footer": "Aivan kuten voit lähettää sähköpostia eri sähköpostiohjelmilla, voit olla yhteydessä muihin Mastodon-palvelimiin – ja kehen tahansa, joka käyttää sosiaalisen median sovelluksia, jotka toimivat samoilla säännöillä kuin Mastodon (hyödyntävät ActivityPub-protokollaa).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Kumoa käyttäjän @{name} mykistys",
|
||||
"account.unmute_notifications_short": "Kumoa ilmoitusten mykistys",
|
||||
"account.unmute_short": "Kumoa mykistys",
|
||||
"account_edit.advanced_settings.bot_hint": "Ilmaise muille, että tili suorittaa enimmäkseen automaattisia toimia eikä sitä välttämättä valvota",
|
||||
"account_edit.advanced_settings.bot_label": "Bottitili",
|
||||
"account_edit.advanced_settings.title": "Edistyneet asetukset",
|
||||
"account_edit.bio.add_label": "Lisää elämäkerta",
|
||||
"account_edit.bio.edit_label": "Muokkaa elämäkertaa",
|
||||
"account_edit.bio.placeholder": "Lisää lyhyt esittely, joka auttaa muita tunnistamaan sinut.",
|
||||
@ -579,8 +583,7 @@
|
||||
"dropdown.empty": "Valitse vaihtoehto",
|
||||
"email_subscriptions.email": "Sähköpostiosoite",
|
||||
"email_subscriptions.form.action": "Tilaa",
|
||||
"email_subscriptions.form.disclaimer": "Voit peruuttaa tilauksen milloin tahansa. Jos haluat lisätietoja, katso <a>tietosuojakäytäntö</a>.",
|
||||
"email_subscriptions.form.lead": "Hanki julkaisut sähköpostilaatikkoosi luomatta Mastodon-tiliä.",
|
||||
"email_subscriptions.form.bottom": "Saa julkaisut Saapuneet-kansioosi luomatta Mastodon-tiliä. Peruuta tilaus milloin tahansa. Jos haluat lisätietoja, katso <a>tietosuojakäytäntö</a>.",
|
||||
"email_subscriptions.form.title": "Tilaa sähköpostipäivitykset käyttäjältä {name}",
|
||||
"email_subscriptions.submitted.lead": "Viimeistele sähköpostipäivitysten tilaus tarkistamalla Saapuneet-kansiosi.",
|
||||
"email_subscriptions.submitted.title": "Vielä yksi vaihe",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Masqué·e",
|
||||
"account.muting": "Masqué",
|
||||
"account.mutual": "Vous vous suivez mutuellement",
|
||||
"account.name.copy": "Copier l’identifiant",
|
||||
"account.name.help.domain": "{domain} est le serveur qui héberge le profil et les messages du compte.",
|
||||
"account.name.help.domain_self": "{domain} est le serveur qui héberge votre profil et vos messages.",
|
||||
"account.name.help.footer": "Tout comme vous pouvez envoyer des courriels à des personnes utilisant différents logiciels de messagerie, vous pouvez interagir avec des personnes sur d'autres serveurs Mastodon — et avec n'importe qui sur d'autres applications sociales propulsées par le même ensemble de règles que Mastodon utilise (le protocole ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Ne plus masquer @{name}",
|
||||
"account.unmute_notifications_short": "Ne plus masquer les notifications",
|
||||
"account.unmute_short": "Ne plus masquer",
|
||||
"account_edit.advanced_settings.bot_hint": "Indique que le compte effectue principalement des actions automatisées et pourrait ne pas être surveillé",
|
||||
"account_edit.advanced_settings.bot_label": "Compte automatisé",
|
||||
"account_edit.advanced_settings.title": "Paramètres avancés",
|
||||
"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.",
|
||||
@ -579,8 +583,7 @@
|
||||
"dropdown.empty": "Sélectionner une option",
|
||||
"email_subscriptions.email": "Adresse de courriel",
|
||||
"email_subscriptions.form.action": "S’abonner",
|
||||
"email_subscriptions.form.disclaimer": "Vous pouvez vous désabonner à tout moment. Pour plus d'informations, référez-vous à la <a>politique de confidentialité</a>.",
|
||||
"email_subscriptions.form.lead": "Recevez les messages dans votre boîte de réception sans créer de compte Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Recevez les messages dans votre boîte de réception sans créer de compte Mastodon. Désabonnez-vous quand vous voulez. Pour plus d’information, se référer à la <a>politique de confidentialité</a>.",
|
||||
"email_subscriptions.form.title": "Abonnez-vous pour recevoir par courriel les notifications de {name}",
|
||||
"email_subscriptions.submitted.lead": "Vérifiez votre boîte de réception pour finaliser de votre inscription aux notifications par courriel.",
|
||||
"email_subscriptions.submitted.title": "Une dernière chose",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Masqué·e",
|
||||
"account.muting": "Masqué",
|
||||
"account.mutual": "Vous vous suivez mutuellement",
|
||||
"account.name.copy": "Copier l’identifiant",
|
||||
"account.name.help.domain": "{domain} est le serveur qui héberge le profil et les messages du compte.",
|
||||
"account.name.help.domain_self": "{domain} est le serveur qui héberge votre profil et vos messages.",
|
||||
"account.name.help.footer": "Tout comme vous pouvez envoyer des courriels à des personnes utilisant différents logiciels de messagerie, vous pouvez interagir avec des personnes sur d'autres serveurs Mastodon — et avec n'importe qui sur d'autres applications sociales propulsées par le même ensemble de règles que Mastodon utilise (le protocole ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Ne plus masquer @{name}",
|
||||
"account.unmute_notifications_short": "Réactiver les notifications",
|
||||
"account.unmute_short": "Ne plus masquer",
|
||||
"account_edit.advanced_settings.bot_hint": "Indique que le compte effectue principalement des actions automatisées et pourrait ne pas être surveillé",
|
||||
"account_edit.advanced_settings.bot_label": "Compte automatisé",
|
||||
"account_edit.advanced_settings.title": "Paramètres avancés",
|
||||
"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.",
|
||||
@ -579,8 +583,7 @@
|
||||
"dropdown.empty": "Sélectionner une option",
|
||||
"email_subscriptions.email": "Adresse de courriel",
|
||||
"email_subscriptions.form.action": "S’abonner",
|
||||
"email_subscriptions.form.disclaimer": "Vous pouvez vous désabonner à tout moment. Pour plus d'informations, référez-vous à la <a>politique de confidentialité</a>.",
|
||||
"email_subscriptions.form.lead": "Recevez les messages dans votre boîte de réception sans créer de compte Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Recevez les messages dans votre boîte de réception sans créer de compte Mastodon. Désabonnez-vous quand vous voulez. Pour plus d’information, se référer à la <a>politique de confidentialité</a>.",
|
||||
"email_subscriptions.form.title": "Abonnez-vous pour recevoir par courriel les notifications de {name}",
|
||||
"email_subscriptions.submitted.lead": "Vérifiez votre boîte de réception pour finaliser de votre inscription aux notifications par courriel.",
|
||||
"email_subscriptions.submitted.title": "Une dernière chose",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Balbhaithe",
|
||||
"account.muting": "Ag balbhaigh",
|
||||
"account.mutual": "Leanann sibh a chéile",
|
||||
"account.name.copy": "Láimhseáil chóipeála",
|
||||
"account.name.help.domain": "Is é {domain} an freastalaí a óstálann próifíl agus poist an úsáideora.",
|
||||
"account.name.help.domain_self": "Is é {domain} an freastalaí a óstálann do phróifíl agus do phoist.",
|
||||
"account.name.help.footer": "Díreach mar is féidir leat ríomhphoist a sheoladh chuig daoine ag baint úsáide as cliaint ríomhphoist éagsúla, is féidir leat idirghníomhú le daoine ar fhreastalaithe Mastodon eile – agus le duine ar bith ar aipeanna sóisialta eile atá faoi thiomáint ag an tsraith rialacha chéanna a úsáideann Mastodon (an prótacal ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Díbhalbhaigh @{name}",
|
||||
"account.unmute_notifications_short": "Díbhalbhaigh fógraí",
|
||||
"account.unmute_short": "Díbhalbhaigh",
|
||||
"account_edit.advanced_settings.bot_hint": "Tabhair comhartha do dhaoine eile go ndéanann an cuntas gníomhartha uathoibrithe den chuid is mó agus nach bhféadfadh sé go ndéantar monatóireacht air",
|
||||
"account_edit.advanced_settings.bot_label": "Cuntas uathoibrithe",
|
||||
"account_edit.advanced_settings.title": "Socruithe ardleibhéil",
|
||||
"account_edit.bio.add_label": "Cuir beathaisnéis leis",
|
||||
"account_edit.bio.edit_label": "Cuir beathaisnéis in eagar",
|
||||
"account_edit.bio.placeholder": "Cuir réamhrá gearr leis chun cabhrú le daoine eile tú a aithint.",
|
||||
@ -577,10 +581,7 @@
|
||||
"domain_pill.your_server": "Do theach digiteach, áit a bhfuil do phoist go léir ina gcónaí. Nach maith leat an ceann seo? Aistrigh freastalaithe am ar bith agus tabhair leat do leantóirí freisin.",
|
||||
"domain_pill.your_username": "D'aitheantóir uathúil ar an bhfreastalaí seo. Is féidir teacht ar úsáideoirí leis an ainm úsáideora céanna ar fhreastalaithe éagsúla.",
|
||||
"dropdown.empty": "Roghnaigh rogha",
|
||||
"email_subscriptions.email": "Seoladh ríomhphoist",
|
||||
"email_subscriptions.form.action": "Liostáil",
|
||||
"email_subscriptions.form.disclaimer": "Is féidir leat díliostáil ag am ar bith. Le haghaidh tuilleadh eolais, féach ar an <a>Polasaí Príobháideachais</a>.",
|
||||
"email_subscriptions.form.lead": "Faigh poist i do bhosca isteach gan cuntas Mastodon a chruthú.",
|
||||
"email_subscriptions.form.title": "Cláraigh le haghaidh nuashonruithe ríomhphoist ó {name}",
|
||||
"email_subscriptions.submitted.lead": "Seiceáil do bhosca isteach le haghaidh ríomhphoist chun clárú le haghaidh nuashonruithe ríomhphoist a chríochnú.",
|
||||
"email_subscriptions.submitted.title": "Céim amháin eile",
|
||||
|
||||
@ -72,6 +72,7 @@
|
||||
"account.in_memoriam": "Mar chuimhneachan.",
|
||||
"account.joined_short": "Air ballrachd fhaighinn",
|
||||
"account.languages": "Atharraich fo-sgrìobhadh nan cànan",
|
||||
"account.last_active": "Gnìomhach an turas mu dheireadh",
|
||||
"account.link_verified_on": "Chaidh dearbhadh cò leis a tha an ceangal seo {date}",
|
||||
"account.locked_info": "Tha prìobhaideachd ghlaiste aig a’ chunntais seo. Nì an sealbhadair lèirmheas a làimh air cò dh’fhaodas a leantainn.",
|
||||
"account.media": "Meadhanan",
|
||||
@ -101,6 +102,7 @@
|
||||
"account.muted": "’Ga mhùchadh",
|
||||
"account.muting": "’Ga mhùchadh",
|
||||
"account.mutual": "A’ leantainn càch a chèile",
|
||||
"account.name.copy": "Dèan lethbhreac dhen aithnichear",
|
||||
"account.name.help.domain": "Is {domain} am frithealaiche a tha ag òstadh pròifil ’s postaichean a’ chleachdaiche.",
|
||||
"account.name.help.domain_self": "Is {domain} am frithealaiche agad-sa a tha ag òstadh pròifil ’s postaichean agad-sa.",
|
||||
"account.name.help.footer": "Air an aon dòigh ’s a chuireas tu puist-d gu daoine le cliantan puist-d eadar-dhealaichte, ’s urrainn dhut conaltradh le daoine air frithealaichean Mastodon eile – agus le duine sam bith air aplacaidean sòisealta eile a chleachdas na h-aon riaghailtean ’s a chleachdas Mastodon (sin pròtacal ActivityPub).",
|
||||
@ -137,6 +139,9 @@
|
||||
"account.unmute": "Dì-mhùch @{name}",
|
||||
"account.unmute_notifications_short": "Dì-mhùch na brathan",
|
||||
"account.unmute_short": "Dì-mhùch",
|
||||
"account_edit.advanced_settings.bot_hint": "Comharraich do chàch gu bheil an cunntas seo ri gnìomhan fèin-obrachail gu h-àraidh is dh’fhaoidte nach doir duine sam bith sùil air idir",
|
||||
"account_edit.advanced_settings.bot_label": "Cunntas fèin-obrachail",
|
||||
"account_edit.advanced_settings.title": "Roghainnean adhartach",
|
||||
"account_edit.bio.add_label": "Cuir ris roinn mu mo dhèidhinn",
|
||||
"account_edit.bio.edit_label": "Deasaich an roinn mu mo dhèidhinn",
|
||||
"account_edit.bio.placeholder": "Cuir thu fhèin an aithne càich gu goirid.",
|
||||
@ -174,7 +179,7 @@
|
||||
"account_edit.field_edit_modal.name_hint": "Can “Làrach-lìn phearsanta”",
|
||||
"account_edit.field_edit_modal.name_label": "Leubail",
|
||||
"account_edit.field_edit_modal.url_warning": "Airson ceangal a chur ris, gabh a-staigh {protocol} aig a thoiseach.",
|
||||
"account_edit.field_edit_modal.value_hint": "Can “https://example.me”",
|
||||
"account_edit.field_edit_modal.value_hint": "Can “https://example.com”",
|
||||
"account_edit.field_edit_modal.value_label": "Luach",
|
||||
"account_edit.field_reorder_modal.drag_cancel": "Chaidh sgur dhen t-slaodadh. Chaidh an raon “{item}” a leigeil às.",
|
||||
"account_edit.field_reorder_modal.drag_end": "Chaidh an raon “{item}” a leigeil às.",
|
||||
@ -231,7 +236,7 @@
|
||||
"account_edit.verified_modal.invisible_link.summary": "Ciamar a dh’fhalaicheas mi an ceangal?",
|
||||
"account_edit.verified_modal.step1.header": "Dèan lethbhreac dhen chòd HTML gu h-ìosal is cuir e ri bann-cinn na làraich-lìn agad",
|
||||
"account_edit.verified_modal.step2.details": "Ma chuir thu an làrach-lìn agad mar raon ghnàthaichte ris cheana, feumaidh tu a sguabadh às ’s a chur ris a-rithist airson an dearbhadh a chur gu dol.",
|
||||
"account_edit.verified_modal.step2.header": "Cuir an làrach-lìn agad ris na raon gnàthaichte",
|
||||
"account_edit.verified_modal.step2.header": "Cuir an làrach-lìn agad ris ’na raon gnàthaichte",
|
||||
"account_edit.verified_modal.title": "Mar a chuireas tu ceangal dearbhte ris",
|
||||
"account_edit_tags.add_tag": "Cuir #{tagName} ris",
|
||||
"account_edit_tags.column_title": "Deasaich na tagaichean",
|
||||
@ -373,10 +378,13 @@
|
||||
"collections.delete_collection": "Sguab an cruinneachadh às",
|
||||
"collections.description_length_hint": "Crìoch de 100 caractar",
|
||||
"collections.detail.accounts_heading": "Cunntasan",
|
||||
"collections.detail.author_added_you_on_date": "Chuir {author} ris thu {date}",
|
||||
"collections.detail.loading": "A’ luchdadh a’ chruinneachaidh…",
|
||||
"collections.detail.revoke_inclusion": "Thoir air falbh mi",
|
||||
"collections.detail.sensitive_content": "Susbaint fhrionasach",
|
||||
"collections.detail.sensitive_note": "Tha cunntasan is susbaint sa chruinneachadh seo a dh’fhaodadh a bhith frionasach do chuid.",
|
||||
"collections.detail.share": "Co-roinn an cruinneachadh seo",
|
||||
"collections.detail.you_are_in_this_collection": "Thathar do bhrosnachadh sa chruinneachadh seo",
|
||||
"collections.edit_details": "Deasaich am fiosrachadh",
|
||||
"collections.error_loading_collections": "Thachair mearachd nuair a dh’fheuch sinn ris a’ chruinneachaidhean agad a luchdadh.",
|
||||
"collections.hints.accounts_counter": "{count} / {max} cunntas(an)",
|
||||
@ -532,6 +540,7 @@
|
||||
"content_warning.hide": "Falaich am post",
|
||||
"content_warning.show": "Seall e co-dhiù",
|
||||
"content_warning.show_more": "Seall barrachd dheth",
|
||||
"content_warning.show_short": "Seall",
|
||||
"conversation.delete": "Sguab às an còmhradh",
|
||||
"conversation.mark_as_read": "Cuir comharra gun deach a leughadh",
|
||||
"conversation.open": "Seall an còmhradh",
|
||||
@ -572,6 +581,13 @@
|
||||
"domain_pill.your_server": "Do dhachaigh dhigiteach far a bheil na postaichean uile agad a’ fuireach. Nach toigh leat an tè seo? Dèan imrich gu frithealaiche eile uair sam bith is thoir an luchd-leantainn agad leat cuideachd.",
|
||||
"domain_pill.your_username": "Seo an t-aithnichear àraidh agad air an fhrithealaiche seo. Dh’fhaoidte gu bheil luchd-cleachdaidh air a bheil an t-aon ainm air frithealaichean eile.",
|
||||
"dropdown.empty": "Tagh roghainn",
|
||||
"email_subscriptions.email": "Post-d",
|
||||
"email_subscriptions.form.action": "Fo-sgrìobh",
|
||||
"email_subscriptions.form.bottom": "Faigh postaichean sa bhogsa a-steach agad às aonais cunntais Mhastodon. Cuir crìoch air an fho-sgrìobhadh uair sam bith. Airson barrachd fiosrachaidh, faic am <a>poileasaidh prìobhaideachd</a>.",
|
||||
"email_subscriptions.form.title": "Clàraich airson naidheachdan {name} fhaighinn air a’ phost-d",
|
||||
"email_subscriptions.submitted.lead": "Thoir sùil a bheil post-d sa a’ bhogsa a-steach agad airson an clàradh airson naidheachdan puist-d a choileanadh.",
|
||||
"email_subscriptions.submitted.title": "Aon cheum eile",
|
||||
"email_subscriptions.validation.email.invalid": "Seòladh puist-d mì-dhligheach",
|
||||
"embed.instructions": "Leabaich am post seo san làrach-lìn agad is tu a’ dèanamh lethbhreac dhen chòd gu h-ìosal.",
|
||||
"embed.preview": "Seo an coltas a bhios air:",
|
||||
"emoji_button.activity": "Gnìomhachd",
|
||||
@ -590,6 +606,12 @@
|
||||
"emoji_button.symbols": "Samhlaidhean",
|
||||
"emoji_button.travel": "Siubhal ⁊ àitichean",
|
||||
"empty_column.account_featured.other": "Chan eil {acct} a’ brosnachadh dad fhathast. An robh fios agad gur urrainn dhut na tagaichean hais a chleachdas tu as trice agus fiù ’s cunntasan do charaidean a bhrosnachadh air a’ phròifil agad?",
|
||||
"empty_column.account_featured_other.no_collections_desc": "Cha do chruthaich {acct} cruinneachadh sam bith fhathast.",
|
||||
"empty_column.account_featured_other.title": "Chan eil dad ri fhaicinn an-seo",
|
||||
"empty_column.account_featured_self.no_collections": "Chan eil cruinneachadh ann fhathast",
|
||||
"empty_column.account_featured_self.no_collections_button": "Cruthaich cruinneachadh",
|
||||
"empty_column.account_featured_unknown.no_collections_desc": "Cha do chruthaich an cunntas seo cruinneachadh sam bith fhathast.",
|
||||
"empty_column.account_featured_unknown.other": "Chan eil an cunntas seo a’ brosnachadh dad fhathast.",
|
||||
"empty_column.account_hides_collections": "Chuir an cleachdaiche seo roimhe nach eil am fiosrachadh seo ri fhaighinn",
|
||||
"empty_column.account_suspended": "Chaidh an cunntas a chur à rèim",
|
||||
"empty_column.account_timeline": "Chan eil post an-seo!",
|
||||
@ -948,7 +970,7 @@
|
||||
"notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath",
|
||||
"notifications.column_settings.follow": "Luchd-leantainn ùr:",
|
||||
"notifications.column_settings.follow_request": "Iarrtasan leantainn ùra:",
|
||||
"notifications.column_settings.group": "Buidheann",
|
||||
"notifications.column_settings.group": "Buidhnich",
|
||||
"notifications.column_settings.mention": "Iomraidhean:",
|
||||
"notifications.column_settings.poll": "Toraidhean cunntais-bheachd:",
|
||||
"notifications.column_settings.push": "Brathan putaidh",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Acalada",
|
||||
"account.muting": "Silenciamento",
|
||||
"account.mutual": "Seguimento mútuo",
|
||||
"account.name.copy": "Copiar identificador",
|
||||
"account.name.help.domain": "{domain} é o servidor que aloxa o perfil e as publicacións da usuaria.",
|
||||
"account.name.help.domain_self": "{domain} é o servidor que aloxa o teu perfil e publicacións.",
|
||||
"account.name.help.footer": "Ao igual que envías correos electrónicos a persoas que usan diferentes provedores, podes interactuar con persoas en outros servidores Mastodon ― e con calquera outra que use aplicacións que sigan o mesmo sistema que usa Mastodon (o protocolo ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Deixar de silenciar a @{name}",
|
||||
"account.unmute_notifications_short": "Reactivar notificacións",
|
||||
"account.unmute_short": "Non silenciar",
|
||||
"account_edit.advanced_settings.bot_hint": "Advirte ás usuarias de que esta conta realiza principalmente accións automatizadas e podería non estar monitorizada",
|
||||
"account_edit.advanced_settings.bot_label": "Conta automatizada",
|
||||
"account_edit.advanced_settings.title": "Axustes avanzados",
|
||||
"account_edit.bio.add_label": "Engadir biografía",
|
||||
"account_edit.bio.edit_label": "Editar biografía",
|
||||
"account_edit.bio.placeholder": "Escribe unha breve presentación para que te coñezan mellor.",
|
||||
@ -577,10 +581,8 @@
|
||||
"domain_pill.your_server": "O teu fogar dixital, onde están as túas publicacións. Non é do teu agrado? Podes cambiar de servidor cando queiras levando as túas seguidoras contigo.",
|
||||
"domain_pill.your_username": "O teu identificador único neste servidor. É posible que atopes usuarias co mesmo nome de usuaria en outros servidores.",
|
||||
"dropdown.empty": "Escolle unha opción",
|
||||
"email_subscriptions.email": "Enderezos de correo",
|
||||
"email_subscriptions.email": "Correo electrónico",
|
||||
"email_subscriptions.form.action": "Subscribirse",
|
||||
"email_subscriptions.form.disclaimer": "Pódeste dar de baixa cando queiras. Para máis información le a <a>Directiva de Privacidade</a>.",
|
||||
"email_subscriptions.form.lead": "Recibe as publicacións na caixa de correo sen precisar unha conta de Mastodon.",
|
||||
"email_subscriptions.form.title": "Subscríbete para recibir actualizacións por correo de {name}",
|
||||
"email_subscriptions.submitted.lead": "Comproba a túa caixa de correo para completar a subscrición ás actualizacións por correo.",
|
||||
"email_subscriptions.submitted.title": "Un último paso",
|
||||
|
||||
@ -577,10 +577,7 @@
|
||||
"domain_pill.your_server": "הבית המקוון שלך, היכן ששוכנות כל הודעותיך. לא מוצא חן בעיניך? ניתן לעבור שרתים בכל עת וגם לשמור על העוקבים.",
|
||||
"domain_pill.your_username": "המזהה הייחודי שלך על שרת זה. ניתן למצוא משתמשים עם שם משתמש זהה על שרתים שונים.",
|
||||
"dropdown.empty": "בחירת אפשרות",
|
||||
"email_subscriptions.email": "כתובת דוא\"ל",
|
||||
"email_subscriptions.form.action": "הרשמה",
|
||||
"email_subscriptions.form.disclaimer": "ניתן לבטל את ההרשמה בכל עת. למידע נוסף, הציצו ב<a>מדיניות הפרטיות</a>.",
|
||||
"email_subscriptions.form.lead": "לקבל הודעות בדואל בלי ליצור חשבון מסטודון.",
|
||||
"email_subscriptions.form.title": "הרשמה לקבלת עידכוני דואל מאת {name}",
|
||||
"email_subscriptions.submitted.lead": "יש לחפש בתיבת הדואל הודעה לסיום ההרשמה לעידכונים בדואל.",
|
||||
"email_subscriptions.submitted.title": "עוד שלב אחד אחרון",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Némítva",
|
||||
"account.muting": "Némítás",
|
||||
"account.mutual": "Követitek egymást",
|
||||
"account.name.copy": "Fióknév másolása",
|
||||
"account.name.help.domain": "A(z) {domain} a kiszolgáló, amely a felhasználó profilját és bejegyzéseit szolgálja ki.",
|
||||
"account.name.help.domain_self": "A(z) {domain} a kiszolgáló, amely a profilodat és bejegyzéseidet szolgálja ki.",
|
||||
"account.name.help.footer": "Ahogy több különböző szolgáltatónál lévő embernek lehet e-mailt küldeni, úgy más Mastodon-kiszolgálókon lévő emberrekel is kapcsolatba lehet lépni – és bárki mással is, akik ugyanazokat a szabályokat (az ActivityPub-protokollt) használó közösségimédia-alkalmazásokat használnak, mint a Mastodon.",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "@{name} némításának feloldása",
|
||||
"account.unmute_notifications_short": "Értesítések némításának feloldása",
|
||||
"account.unmute_short": "Némitás feloldása",
|
||||
"account_edit.advanced_settings.bot_hint": "Jelzés másoknak, hogy ez a fiók automatikus műveleteket végez és valószínűleg nem figyeljük",
|
||||
"account_edit.advanced_settings.bot_label": "Automatizált fiók",
|
||||
"account_edit.advanced_settings.title": "Speciális beállítások",
|
||||
"account_edit.bio.add_label": "Bemutatkozás hozzáadása",
|
||||
"account_edit.bio.edit_label": "Bemutatkozás szerkesztése",
|
||||
"account_edit.bio.placeholder": "Adj meg egy rövid bemutatkozást, hogy mások könnyebben megtaláljanak.",
|
||||
@ -579,8 +583,7 @@
|
||||
"dropdown.empty": "Válassz egy lehetőséget",
|
||||
"email_subscriptions.email": "E-mail-cím",
|
||||
"email_subscriptions.form.action": "Feliratkozás",
|
||||
"email_subscriptions.form.disclaimer": "Bármikor leiratkozhatsz. További információkért lásd az <a>Adatvédelmi szabályzatot</a>.",
|
||||
"email_subscriptions.form.lead": "Kapj bejegyzéseket a postaládádba, Mastodon-fiók létrehozása nélkül.",
|
||||
"email_subscriptions.form.bottom": "Kapj bejegyzéseket a postaládádba anélkül, hogy Mastodon-fiókot hoznál létre. Bármikor leiratkozhatsz. További információkért nézd meg az <a>Adatvédelmi irányelveket</a>.",
|
||||
"email_subscriptions.form.title": "Regisztrálj {name} e-mailben küldött híreiért",
|
||||
"email_subscriptions.submitted.lead": "Ellenőrizd a postaládádat az e-mailes hírek regisztrációs folyamatának befejezéséhez.",
|
||||
"email_subscriptions.submitted.title": "Csak még egy lépés",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Þaggaður",
|
||||
"account.muting": "Þöggun",
|
||||
"account.mutual": "Þið fylgist með hvor öðrum",
|
||||
"account.name.copy": "Afrita kennislóð",
|
||||
"account.name.help.domain": "{domain} er netþjónninn sem hýsir upplýsingasnið um notandann og færslurnar hans.",
|
||||
"account.name.help.domain_self": "{domain} er netþjónninn þinn sem hýsir upplýsingasniðið þitt og færslurnar þínar.",
|
||||
"account.name.help.footer": "Rétt eins og að þú getur sent tölvupóst á fólk í gegnum mismunandi þjónustur og forrit, þá getur þú átt í samskiptum við fólk á öðrum Mastodon-netþjónum – og reyndar við hverja þá sem eru á öðrum þeim samfélagsmiðlum sem nota sömu samskiptareglur og Mastodon notar (sem er ActivityPub-samskiptamátinn).",
|
||||
@ -138,6 +139,9 @@
|
||||
"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.advanced_settings.bot_hint": "Merki til annarra að þessi aðgangur sé aðallega til að framkvæma sjálfvirkar aðgerðir og gæti verið án þess að hann sé vaktaður reglulega",
|
||||
"account_edit.advanced_settings.bot_label": "Sjálfvirkur aðgangur",
|
||||
"account_edit.advanced_settings.title": "Ítarlegar stillingar",
|
||||
"account_edit.bio.add_label": "Bættu við æviágripi",
|
||||
"account_edit.bio.edit_label": "Breyta æviágripi",
|
||||
"account_edit.bio.placeholder": "Settu inn stutta kynningu á þér svo aðrir eigi betur með að auðkenna þig.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Stafrænt heimili þitt, þar sem allar færslur þínar eru hýstar. Kanntu ekki við þennan netþjón? Þú getur flutt þig á milli netþjóna hvenær sem er og tekið með þér alla fylgjendurna þína.",
|
||||
"domain_pill.your_username": "Sértækt auðkenni þitt á þessum netþjóni. Það er mögulegt að finna notendur með sama notandanafn á mismunandi netþjónum.",
|
||||
"dropdown.empty": "Veldu valkost",
|
||||
"email_subscriptions.email": "Tölvupóstfang",
|
||||
"email_subscriptions.email": "Tölvupóstur",
|
||||
"email_subscriptions.form.action": "Gerast áskrifandi",
|
||||
"email_subscriptions.form.disclaimer": "Þú getur hætt í áskrift hvenær sem er. Til að sjá nánari upplýsingar geturðu skoðað <a>Meðferð persónuupplýsinga</a>.",
|
||||
"email_subscriptions.form.lead": "Fáðu færslur í pósthólfið þitt án þess að skrá þig með Mastodon-aðgang.",
|
||||
"email_subscriptions.form.bottom": "Fáðu færslur í tölvupósti án þess að útbúa Mastodon-aðgang. Segðu upp áskrift hvenær sem er. Nánari upplýsingar má finna í <a>Meðferð persónuupplýsinga</a>.",
|
||||
"email_subscriptions.form.title": "Skráðu þig í áskrift í tölvupósti að færslum frá {name}",
|
||||
"email_subscriptions.submitted.lead": "Athugaðu hvort þér hafi borist tölvupóstur til að ljúka áskriftarferlinu.",
|
||||
"email_subscriptions.submitted.title": "Eitt skref í viðbót",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Mutato",
|
||||
"account.muting": "Account silenziato",
|
||||
"account.mutual": "Vi seguite a vicenda",
|
||||
"account.name.copy": "Copia il nome univoco",
|
||||
"account.name.help.domain": "{domain} è il server che ospita il profilo e i post dell'utente.",
|
||||
"account.name.help.domain_self": "{domain} è il tuo server che ospita il tuo profilo e i post.",
|
||||
"account.name.help.footer": "Proprio come puoi inviare email a persone che usano diversi client di posta elettronica, così puoi interagire con le persone su altri server Mastodon — e con chiunque utilizzi altre app social basate sulle stesse regole che Mastodon usa (il protocollo ActivityPub).",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Riattiva @{name}",
|
||||
"account.unmute_notifications_short": "Riattiva notifiche",
|
||||
"account.unmute_short": "Attiva audio",
|
||||
"account_edit.advanced_settings.bot_hint": "Segnala ad altri che l'account esegue principalmente azioni automatizzate e potrebbe non essere monitorato",
|
||||
"account_edit.advanced_settings.bot_label": "Account automatizzato",
|
||||
"account_edit.advanced_settings.title": "Impostazioni avanzate",
|
||||
"account_edit.bio.add_label": "Aggiungi biografia",
|
||||
"account_edit.bio.edit_label": "Modifica la biografia",
|
||||
"account_edit.bio.placeholder": "Aggiungi una breve introduzione per aiutare gli altri a identificarti.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "La tua casa digitale, dove vivono tutti i tuoi post. Non ti piace questa? Cambia server in qualsiasi momento e porta con te anche i tuoi follower.",
|
||||
"domain_pill.your_username": "Il tuo identificatore univoco su questo server. È possibile trovare utenti con lo stesso nome utente su server diversi.",
|
||||
"dropdown.empty": "Seleziona un'opzione",
|
||||
"email_subscriptions.email": "Indirizzo email",
|
||||
"email_subscriptions.email": "Email",
|
||||
"email_subscriptions.form.action": "Iscriviti",
|
||||
"email_subscriptions.form.disclaimer": "Puoi annullare l'iscrizione in qualsiasi momento. Per ulteriori informazioni, consulta l'<a>Informativa sulla privacy</a>.",
|
||||
"email_subscriptions.form.lead": "Ricevi i post nella tua casella di posta elettronica senza creare un account Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Ricevi i post nella tua casella di posta elettronica senza creare un account Mastodon. Puoi disiscriverti in qualsiasi momento. Per maggiori informazioni, consulta l'<a>Informativa sulla privacy</a>.",
|
||||
"email_subscriptions.form.title": "Iscriviti per ricevere aggiornamenti via email da {name}",
|
||||
"email_subscriptions.submitted.lead": "Controlla la tua casella di posta elettronica per completare l'iscrizione agli aggiornamenti via email.",
|
||||
"email_subscriptions.submitted.title": "Ancora un passaggio",
|
||||
@ -1071,7 +1074,7 @@
|
||||
"relative_time.days": "{number}g",
|
||||
"relative_time.full.days": "{number, plural, one {# giorno} other {# giorni}} fa",
|
||||
"relative_time.full.hours": "{number, plural, one {# ora} other {# ore}} fa",
|
||||
"relative_time.full.just_now": "adesso",
|
||||
"relative_time.full.just_now": "proprio ora",
|
||||
"relative_time.full.minutes": "{number, plural, one {# minuto} other {# minuti}} fa",
|
||||
"relative_time.full.seconds": "{number, plural, one {# secondo} other {# secondi}} fa",
|
||||
"relative_time.hours": "{number}h",
|
||||
@ -1281,11 +1284,11 @@
|
||||
"terms_of_service.effective_as_of": "In vigore a partire dal giorno {date}",
|
||||
"terms_of_service.title": "Termini di Servizio",
|
||||
"terms_of_service.upcoming_changes_on": "Prossime modifiche nel giorno {date}",
|
||||
"time_remaining.days": "{number, plural, one {# giorno} other {# giorni}} left",
|
||||
"time_remaining.hours": "{number, plural, one {# ora} other {# ore}} left",
|
||||
"time_remaining.minutes": "{number, plural, one {# minuto} other {# minuti}} left",
|
||||
"time_remaining.days": "{number, plural, one {# giorno rimanente} other {# giorni rimanenti}}",
|
||||
"time_remaining.hours": "{number, plural, one {# ora rimanente} other {# ore rimanenti}}",
|
||||
"time_remaining.minutes": "{number, plural, one {# minuto rimanente} other {# minuti rimanenti}}",
|
||||
"time_remaining.moments": "Restano pochi istanti",
|
||||
"time_remaining.seconds": "{number, plural, one {# secondo} other {# secondi}} left",
|
||||
"time_remaining.seconds": "{number, plural, one {# secondo rimanente} other {# secondi rimanenti}}",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{count} persona} other {{count} persone}} {days, plural, one {nell'ultimo giorno} other {negli ultimi {days} giorni}}",
|
||||
"trends.trending_now": "Ora in tendenza",
|
||||
"ui.beforeunload": "La tua bozza andrà persa, se abbandoni Mastodon.",
|
||||
|
||||
@ -577,10 +577,7 @@
|
||||
"domain_pill.your_server": "Lí數位ê厝,內底有lí所有ê PO文。無kah意?Ē當轉kàu別ê服侍器,koh保有跟tuè lí êl âng。.",
|
||||
"domain_pill.your_username": "Lí 佇tsit ê服侍器獨一ê稱呼。佇無kâng ê服侍器有可能tshuē著kāng名ê用者。",
|
||||
"dropdown.empty": "揀選項",
|
||||
"email_subscriptions.email": "電子phue地址",
|
||||
"email_subscriptions.form.action": "訂",
|
||||
"email_subscriptions.form.disclaimer": "Lí不管時lóng會使取消訂。其他ê資訊請參考<a>隱私權政策</a>。",
|
||||
"email_subscriptions.form.lead": "無開 Mastodon ê口座,mā佇電子phue ê收件箱收著PO文。",
|
||||
"email_subscriptions.form.title": "訂 {name} ê電子phue更新",
|
||||
"email_subscriptions.submitted.lead": "請檢查lí ê收件箱來完成訂電子批ê更新。",
|
||||
"email_subscriptions.submitted.title": "上尾步",
|
||||
|
||||
@ -574,10 +574,7 @@
|
||||
"domain_pill.your_server": "Jouw digitale thuis, waar al jouw berichten zich bevinden. Is deze server toch niet naar jouw wens? Dan kun je op elk moment naar een andere server verhuizen en ook jouw volgers overbrengen.",
|
||||
"domain_pill.your_username": "Jouw unieke identificatie-adres op deze server. Het is mogelijk dat er gebruikers met dezelfde gebruikersnaam op verschillende servers te vinden zijn.",
|
||||
"dropdown.empty": "Selecteer een optie",
|
||||
"email_subscriptions.email": "E-mailadres",
|
||||
"email_subscriptions.form.action": "Abonneren",
|
||||
"email_subscriptions.form.disclaimer": "Je kunt je op elk gewenst moment afmelden. Raadpleeg het <a>Privacybeleid</a> voor meer informatie.",
|
||||
"email_subscriptions.form.lead": "Krijg berichten in je inbox zonder een Mastodonaccount aan te hoeven maken.",
|
||||
"email_subscriptions.form.title": "Op e-mailupdates van {name} abonneren",
|
||||
"email_subscriptions.submitted.lead": "Kijk in je inbox voor een e-mail waarmee je het abbonement op de e-mailupdates kunt bevestigen.",
|
||||
"email_subscriptions.submitted.title": "Nog één stap",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Målbunden",
|
||||
"account.muting": "Dempa",
|
||||
"account.mutual": "De fylgjer kvarandre",
|
||||
"account.name.copy": "Kopier brukaradressa",
|
||||
"account.name.help.domain": "{domain} er tenaren som lagrar brukarprofilen og innlegga.",
|
||||
"account.name.help.domain_self": "{domain} er tenaren som lagrar brukarprofilen og innlegga dine.",
|
||||
"account.name.help.footer": "På same måten som du kan senda epost til folk med ulike epostprogram og -kontoar, kan du kommunisera med folk på andre Mastodon-tenarar, og med folk på andre sosiale nettverk som samhandlar på same måte som Mastodon. Det er ActivityPub-protokollen.",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "Opphev demping av @{name}",
|
||||
"account.unmute_notifications_short": "Opphev demping av varslingar",
|
||||
"account.unmute_short": "Opphev demping",
|
||||
"account_edit.advanced_settings.bot_hint": "Varsla andre om at denne kontoen for det meste er automatisert og truleg ikkje blir sjekka jamnleg",
|
||||
"account_edit.advanced_settings.bot_label": "Automatisert konto",
|
||||
"account_edit.advanced_settings.title": "Avanserte innstillingar",
|
||||
"account_edit.bio.add_label": "Skriv om deg sjølv",
|
||||
"account_edit.bio.edit_label": "Rediger bio",
|
||||
"account_edit.bio.placeholder": "Skriv ei kort innleiing slik at andre kan sjå kven du er.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Din digitale heim, der alle innlegga dine bur. Liker du ikkje dette? Byt til ein ny tenar når som helst og ta med fylgjarane dine òg.",
|
||||
"domain_pill.your_username": "Din unike identifikator på denne tenaren. Det er mogleg å finne brukarar med same brukarnamn på forskjellige tenarar.",
|
||||
"dropdown.empty": "Vel eit alternativ",
|
||||
"email_subscriptions.email": "Epostadresse",
|
||||
"email_subscriptions.email": "Epost",
|
||||
"email_subscriptions.form.action": "Abonner",
|
||||
"email_subscriptions.form.disclaimer": "Du kan melda deg av når som helst. Sjå <a>personvernretningslinene</a> for meir informasjon.",
|
||||
"email_subscriptions.form.lead": "Få innlegg i innboksen din utan å laga ein Mastodon-konto.",
|
||||
"email_subscriptions.form.bottom": "Få innlegg i innboksen din utan å laga ein Mastodon-konto. Meld deg av når du vil. Sjå <a>personvernsida</a> for meir info.",
|
||||
"email_subscriptions.form.title": "Meld deg på epostoppdateringar frå {name}",
|
||||
"email_subscriptions.submitted.lead": "Sjekk innboksen din for ein epost om korleis du fullfører abonnementet på epostoppdateringar.",
|
||||
"email_subscriptions.submitted.title": "Eitt steg til",
|
||||
|
||||
@ -536,10 +536,7 @@
|
||||
"domain_pill.your_server": "Ваш цифровой дом, где находятся все ваши посты. Если вам не нравится этот сервер, вы можете в любое время перенести свою учётную запись на другой сервер, не теряя подписчиков.",
|
||||
"domain_pill.your_username": "Ваш уникальный идентификатор на этом сервере. На разных серверах могут встречаться люди с тем же именем пользователя.",
|
||||
"dropdown.empty": "Выберите вариант",
|
||||
"email_subscriptions.email": "Адрес электронной почты",
|
||||
"email_subscriptions.form.action": "Подписаться",
|
||||
"email_subscriptions.form.disclaimer": "Вы можете отписаться в любое время. Больше информации в <a>Политике конфиденциальности</a>.",
|
||||
"email_subscriptions.form.lead": "Получайте новые посты по электронной почты — для этого не нужно регистрироваться в Mastodon.",
|
||||
"email_subscriptions.form.title": "Оформите email-подписку на этого пользователя",
|
||||
"email_subscriptions.submitted.title": "Ещё один шаг",
|
||||
"email_subscriptions.validation.email.blocked": "Почтовый сервис заблокирован",
|
||||
|
||||
@ -138,6 +138,9 @@
|
||||
"account.unmute": "Ktheji zërin @{name}",
|
||||
"account.unmute_notifications_short": "Shfaqi njoftimet",
|
||||
"account.unmute_short": "Çheshtoje",
|
||||
"account_edit.advanced_settings.bot_hint": "Sinjalizojuni të tjerëve se llogari kryesisht kryen veprime të automatizuara dhe mund të mos vëzhgohet",
|
||||
"account_edit.advanced_settings.bot_label": "Llogari e automatizuar",
|
||||
"account_edit.advanced_settings.title": "Rregullime të mëtejshme",
|
||||
"account_edit.bio.add_label": "Shtoni jetëshkrim",
|
||||
"account_edit.bio.edit_label": "Përpunoni jetëshkrim",
|
||||
"account_edit.bio.placeholder": "Shtoni një hyrje të shkurtër për të ndihmuar të tjerët t’ju identifikojnë.",
|
||||
@ -573,10 +576,9 @@
|
||||
"domain_pill.your_server": "Shtëpia juaj dixhitale, kur gjenden krejt postimet tuaja. S’ju pëlqen kjo këtu? Shpërngulni shërbyes kur të doni dhe sillni edhe ndjekësit tuaj.",
|
||||
"domain_pill.your_username": "Identifikuesi juja unik në këtë shërbyes. Është e mundur të gjenden përdorues me të njëjtin emër përdoruesi në shërbyes të ndryshëm.",
|
||||
"dropdown.empty": "Përzgjidhni një mundësi",
|
||||
"email_subscriptions.email": "Adresë email",
|
||||
"email_subscriptions.email": "Email",
|
||||
"email_subscriptions.form.action": "Pajtohuni",
|
||||
"email_subscriptions.form.disclaimer": "S’mund të shpajtoheni, në çfarëdo kohe. Për më tepër informacion, shihni te <a>Rregulla Privatësie</a>.",
|
||||
"email_subscriptions.form.lead": "Merrni postime në email-in tuaj, pa krijuar një llogari Mastodon.",
|
||||
"email_subscriptions.form.bottom": "Merrni postime në email-in tuaj, pa krijuar një llogari Mastodon. Shpajtohuni në çfarëdo kohe. Për më tepër informacion, shihni te <a>Rregulla Privatësie</a>.",
|
||||
"email_subscriptions.form.title": "Regjistrohuni për përditësime me email nga {name}",
|
||||
"email_subscriptions.submitted.lead": "Shihni te mesazhet tuaj të marrë për një email, që të përfundoni regjistrimin për përditësime me email.",
|
||||
"email_subscriptions.submitted.title": "Edhe një hap",
|
||||
|
||||
@ -72,6 +72,7 @@
|
||||
"account.in_memoriam": "Till minne av.",
|
||||
"account.joined_short": "Gick med",
|
||||
"account.languages": "Ändra vilka språk du helst vill se i ditt flöde",
|
||||
"account.last_active": "Senast aktiv",
|
||||
"account.link_verified_on": "Ägarskap för denna länk kontrollerades den {date}",
|
||||
"account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa det.",
|
||||
"account.media": "Media",
|
||||
@ -104,7 +105,14 @@
|
||||
"account.name.help.domain": "{domain} är servern som är värd för användarens profil och inlägg.",
|
||||
"account.name.help.domain_self": "{domain} är din server som är värd för användarens profil och inlägg.",
|
||||
"account.name.help.footer": "Precis som du kan skicka e-post till personer med olika e-postklienter, du kan interagera med personer på andra Mastodon-servrar – och med vem som helst på andra sociala appar som drivs av samma uppsättning regler som Mastodon använder (ActivityPub-protokollet).",
|
||||
"account.name.help.header": "Ett handtag är som en e-postadress",
|
||||
"account.name.help.username": "{username} är kontots användarnamn på deras server. Någon på en annan server kan ha samma användarnamn.",
|
||||
"account.name.help.username_self": "{username} är ditt användarnamn på denna server. Någon på en annan server kan ha samma användarnamn.",
|
||||
"account.name_info": "Vad betyder detta?",
|
||||
"account.no_bio": "Ingen beskrivning angiven.",
|
||||
"account.node_modal.callout": "Personlig anteckningar är endast synliga för dig.",
|
||||
"account.node_modal.edit_title": "Redigera en personlig anteckning",
|
||||
"account.node_modal.error_unknown": "Kunde inte spara anteckningen",
|
||||
"account.node_modal.field_label": "Personlig anteckning",
|
||||
"account.node_modal.save": "Spara",
|
||||
"account.node_modal.title": "Lägg till en personlig anteckning",
|
||||
@ -130,33 +138,47 @@
|
||||
"account.unmute": "Sluta tysta @{name}",
|
||||
"account.unmute_notifications_short": "Aktivera aviseringsljud",
|
||||
"account.unmute_short": "Avtysta",
|
||||
"account_edit.advanced_settings.title": "Avancerade inställningar",
|
||||
"account_edit.bio.add_label": "Lägg till biografi",
|
||||
"account_edit.bio.edit_label": "Redigera 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",
|
||||
"account_edit.bio_modal.edit_title": "Redigera biografi",
|
||||
"account_edit.column_button": "Klar",
|
||||
"account_edit.column_title": "Redigera profil",
|
||||
"account_edit.custom_fields.add_label": "Lägg till fält",
|
||||
"account_edit.custom_fields.edit_label": "Redigera fält",
|
||||
"account_edit.custom_fields.placeholder": "Lägg till dina pronomen, externa länkar eller något annat du vill dela.",
|
||||
"account_edit.custom_fields.reorder_button": "Ändra ordning för fält",
|
||||
"account_edit.custom_fields.tip_content": "Du kan enkelt lägga till trovärdighet till ditt Mastodon-konto genom att verifiera länkar till alla webbplatser du äger.",
|
||||
"account_edit.custom_fields.tip_title": "Tips: Lägga till verifierade länkar",
|
||||
"account_edit.custom_fields.title": "Tilläggsfält",
|
||||
"account_edit.custom_fields.verified_hint": "Hur lägger jag till en verifierad länk?",
|
||||
"account_edit.display_name.add_label": "Lägg till visningsnamn",
|
||||
"account_edit.display_name.edit_label": "Redigera visningsnamn",
|
||||
"account_edit.display_name.placeholder": "Visningsnamnet är hur ditt namn ser ut på din profil och i tidslinjer.",
|
||||
"account_edit.display_name.title": "Visningsnamn",
|
||||
"account_edit.featured_hashtags.edit_label": "Lägg till hashtaggar",
|
||||
"account_edit.featured_hashtags.placeholder": "Hjälp andra att identifiera, och få snabb tillgång till, dina favoritämnen.",
|
||||
"account_edit.featured_hashtags.title": "Utvalda hashtaggar",
|
||||
"account_edit.field_actions.delete": "Radera fält",
|
||||
"account_edit.field_actions.edit": "Redigera fält",
|
||||
"account_edit.field_delete_modal.confirm": "Är du säker på att du vill ta bort detta tilläggsfält? Denna åtgärd kan inte ångras.",
|
||||
"account_edit.field_delete_modal.delete_button": "Radera",
|
||||
"account_edit.field_delete_modal.title": "Radera tilläggsfält?",
|
||||
"account_edit.field_edit_modal.add_title": "Lägg till tilläggsfält",
|
||||
"account_edit.field_edit_modal.discard_confirm": "Ta bort",
|
||||
"account_edit.field_edit_modal.discard_message": "Du har osparade ändringar. Är du säker på att du vill ta bort dem?",
|
||||
"account_edit.field_edit_modal.edit_title": "Redigera tilläggsfält",
|
||||
"account_edit.field_edit_modal.length_warning": "Rekommenderad teckengräns överskrids. Mobilanvändare kanske inte ser ditt fält i sin helhet.",
|
||||
"account_edit.field_edit_modal.name_hint": "T.ex. “Personlig webbplats”",
|
||||
"account_edit.field_edit_modal.name_label": "Etikett",
|
||||
"account_edit.field_edit_modal.url_warning": "För att lägga till en länk, vänligen inkludera {protocol} i början.",
|
||||
"account_edit.field_edit_modal.value_hint": "T.ex. \"https://example.me”",
|
||||
"account_edit.field_edit_modal.value_label": "Värde",
|
||||
"account_edit.field_reorder_modal.drag_cancel": "Flytten avbröts. Fältet \"{item}\" släpptes.",
|
||||
"account_edit.image_alt_modal.add_title": "Lägg till alternativ text",
|
||||
"account_edit.image_edit.add_button": "Lägg till bild",
|
||||
"account_edit.image_edit.alt_add_button": "Lägg till alternativtext",
|
||||
"account_edit.image_edit.alt_edit_button": "Redigera alternativtext",
|
||||
@ -440,9 +462,7 @@
|
||||
"domain_pill.your_server": "Ditt digitala hem, där alla dina inlägg bor. Gillar du inte just denna? Byt server när som helst och ta med dina anhängare också.",
|
||||
"domain_pill.your_username": "Din unika identifierare på denna server. Det är möjligt att hitta användare med samma användarnamn på olika servrar.",
|
||||
"dropdown.empty": "Välj ett alternativ",
|
||||
"email_subscriptions.email": "E-postadress",
|
||||
"email_subscriptions.form.action": "Prenumerera",
|
||||
"email_subscriptions.form.lead": "Få inlägg i din inkorg utan att skapa ett Mastodon-konto.",
|
||||
"email_subscriptions.submitted.title": "Ett steg kvar",
|
||||
"email_subscriptions.validation.email.blocked": "Blockerad e-postleverantör",
|
||||
"email_subscriptions.validation.email.invalid": "Ogiltig epostadress",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "Susturuldu",
|
||||
"account.muting": "Sessize alınıyor",
|
||||
"account.mutual": "Birbirinizi takip ediyorsunuz",
|
||||
"account.name.copy": "İsmi Kopyala",
|
||||
"account.name.help.domain": "{domain} kullanıcının profilini ve gönderilerini barındıran sunucudur.",
|
||||
"account.name.help.domain_self": "{domain} profilinizi ve gönderilerinizi barındıran sunucunuzdur.",
|
||||
"account.name.help.footer": "Farklı e-posta istemcileri kullanan kişilere e-posta gönderebileceğiniz gibi, diğer Mastodon sunucularındaki kişilerle ve Mastodon'un kullandığı kurallarla (ActivityPub protokolü) çalışan diğer sosyal uygulamalardaki herkesle etkileşim kurabilirsiniz.",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "@{name} adlı kişinin sesini aç",
|
||||
"account.unmute_notifications_short": "Bildirimlerin sesini aç",
|
||||
"account.unmute_short": "Susturmayı kaldır",
|
||||
"account_edit.advanced_settings.bot_hint": "Bu hesap temelde otomatik eylemler gerçekleştirir ve izlenmeyebiliri diğerlerine bildir",
|
||||
"account_edit.advanced_settings.bot_label": "Otomatik hesap",
|
||||
"account_edit.advanced_settings.title": "Gelişmiş ayarlar",
|
||||
"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.",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "Dijital anasayfanız, tüm gönderilerinizin yaşadığı yerdir. Bunu beğenmediniz mi? İstediğiniz zaman sunucularınızı değiştirin ve takipçilerinizi de getirin.",
|
||||
"domain_pill.your_username": "Bu sunucudaki tekil tanımlayıcınız. Farklı sunucularda aynı kullanıcı adına sahip kullanıcıları bulmak mümkündür.",
|
||||
"dropdown.empty": "Bir seçenek seçin",
|
||||
"email_subscriptions.email": "E-posta adresi",
|
||||
"email_subscriptions.email": "E-posta",
|
||||
"email_subscriptions.form.action": "Abone ol",
|
||||
"email_subscriptions.form.disclaimer": "İstediğiniz zaman abonelikten çıkabilirsiniz. Daha fazla bilgi için <a>Gizlilik Politikası</a> sayfasına bakabilirsiniz.",
|
||||
"email_subscriptions.form.lead": "Gönderiler gelen kutunuza Mastodon hesabı oluşturmadan gelsin.",
|
||||
"email_subscriptions.form.bottom": "Gönderiler Mastodon hesabı oluşturmadan e-posta kutunuza gelsin. İstediğiniz zaman aboneliğinizi iptal edebilirsiniz. Daha fazla bilgi için <a>Gizlilik Politikası</a>'na bakın.",
|
||||
"email_subscriptions.form.title": "{name} kişisinin e-posta güncellemelerine kaydolun",
|
||||
"email_subscriptions.submitted.lead": "E-posta güncellemelerine kaydolma işlemini tamamlamak için gelen kutunuzu kontrol edin.",
|
||||
"email_subscriptions.submitted.title": "Bir adım daha",
|
||||
|
||||
@ -577,10 +577,7 @@
|
||||
"domain_pill.your_server": "Nơi lưu trữ tút của bạn. Không thích ở đây? Chuyển sang máy chủ khác và giữ nguyên người theo dõi của bạn.",
|
||||
"domain_pill.your_username": "Chỉ riêng bạn trên máy chủ này. Những máy chủ khác có thể cũng có tên người dùng giống vậy.",
|
||||
"dropdown.empty": "Chọn một lựa chọn",
|
||||
"email_subscriptions.email": "Địa chỉ email",
|
||||
"email_subscriptions.form.action": "Đăng ký",
|
||||
"email_subscriptions.form.disclaimer": "Bạn có thể hủy đăng ký bất cứ lúc nào. Để biết thêm thông tin, vui lòng tham khảo <a>Chính sách bảo mật</a>.",
|
||||
"email_subscriptions.form.lead": "Nhận tút trực tiếp vào hộp thư đến mà không cần tạo tài khoản Mastodon.",
|
||||
"email_subscriptions.form.title": "Đăng ký nhận cập nhật qua email từ {name}",
|
||||
"email_subscriptions.submitted.lead": "Kiểm tra hộp thư đến của bạn để tìm email hoàn tất đăng ký nhận thông báo qua email.",
|
||||
"email_subscriptions.submitted.title": "Một bước nữa",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "已隐藏",
|
||||
"account.muting": "正在静音",
|
||||
"account.mutual": "你们互相关注",
|
||||
"account.name.copy": "复制用户名",
|
||||
"account.name.help.domain": "{domain} 是托管该用户个人资料及嘟文的服务器。",
|
||||
"account.name.help.domain_self": "{domain} 是托管你的个人资料及嘟文的服务器。",
|
||||
"account.name.help.footer": "就像你可以用不同的电子邮件客户端向其他人发送同样的电子邮件一般,你也可以和其他 Mastodon 服务器上的用户互动,甚至还能和与 Mastodon 采用相同规则(即 ActivityPub 协议)的其他社交软件上的任何人互动。",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "不再隐藏 @{name}",
|
||||
"account.unmute_notifications_short": "恢复通知",
|
||||
"account.unmute_short": "取消隐藏",
|
||||
"account_edit.advanced_settings.bot_hint": "来自这个账号的绝大多数操作都是自动进行的,并且可能无人监控",
|
||||
"account_edit.advanced_settings.bot_label": "机器人账号",
|
||||
"account_edit.advanced_settings.title": "高级设置",
|
||||
"account_edit.bio.add_label": "添加个人简介",
|
||||
"account_edit.bio.edit_label": "编辑个人简介",
|
||||
"account_edit.bio.placeholder": "添加一段简短介绍,帮助其他人认识你。",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "你的数字家园,你的全部嘟文都在此存储。不喜欢这里吗?你可以随时迁移到其它服务器,并带上你的关注者。",
|
||||
"domain_pill.your_username": "你在此服务器上的唯一标识。不同服务器上可能存在相同用户名的用户。",
|
||||
"dropdown.empty": "选项",
|
||||
"email_subscriptions.email": "电子邮件地址",
|
||||
"email_subscriptions.email": "电子邮件",
|
||||
"email_subscriptions.form.action": "订阅",
|
||||
"email_subscriptions.form.disclaimer": "你可以随时退订。更多信息参见<a>隐私政策</a>。",
|
||||
"email_subscriptions.form.lead": "无需注册 Mastodon 账号,在收件箱中获取嘟文。",
|
||||
"email_subscriptions.form.bottom": "无需注册 Mastodon 账号,在收件箱中获取嘟文。如果想退订了你可以随时退订。更多信息参见<a>隐私政策</a>。",
|
||||
"email_subscriptions.form.title": "订阅 {name} 的电子邮件推送",
|
||||
"email_subscriptions.submitted.lead": "请检查你的收件箱来完成邮件订阅注册。",
|
||||
"email_subscriptions.submitted.title": "最后一步",
|
||||
|
||||
@ -102,6 +102,7 @@
|
||||
"account.muted": "已靜音",
|
||||
"account.muting": "靜音",
|
||||
"account.mutual": "跟隨彼此",
|
||||
"account.name.copy": "複製帳號",
|
||||
"account.name.help.domain": "{domain} 為託管此使用者個人檔案與嘟文之伺服器。",
|
||||
"account.name.help.domain_self": "{domain} 為託管您個人檔案與嘟文之伺服器。",
|
||||
"account.name.help.footer": "就像是您的以不同 email 程式寄信給他人一樣,您能與其他 Mastodon 伺服器中的人們互動,並且能和使用與 Mastodon 一樣規則 (ActivityPub 協定) 的其他社群軟體上任何人互動。",
|
||||
@ -138,6 +139,9 @@
|
||||
"account.unmute": "解除靜音 @{name}",
|
||||
"account.unmute_notifications_short": "解除靜音推播通知",
|
||||
"account.unmute_short": "解除靜音",
|
||||
"account_edit.advanced_settings.bot_hint": "告知他人此帳號主要執行自動化操作且可能未受人為監控",
|
||||
"account_edit.advanced_settings.bot_label": "機器人帳號",
|
||||
"account_edit.advanced_settings.title": "進階設定",
|
||||
"account_edit.bio.add_label": "新增個人簡介",
|
||||
"account_edit.bio.edit_label": "編輯個人簡介",
|
||||
"account_edit.bio.placeholder": "加入一段簡短介紹以幫助其他人識別您。",
|
||||
@ -577,10 +581,9 @@
|
||||
"domain_pill.your_server": "您數位世界的家,您所有的嘟文都在這裡。不喜歡這台伺服器嗎?您能隨時搬家至其他伺服器並且仍保有您的跟隨者。",
|
||||
"domain_pill.your_username": "您於您的伺服器中獨一無二的識別。於不同的伺服器上可能找到具有相同帳號的使用者。",
|
||||
"dropdown.empty": "請選擇一個選項",
|
||||
"email_subscriptions.email": "電子郵件地址",
|
||||
"email_subscriptions.email": "電子郵件",
|
||||
"email_subscriptions.form.action": "訂閱",
|
||||
"email_subscriptions.form.disclaimer": "您可以任何時候取消訂閱。欲了解更多資訊,請參考<a>隱私權政策</a>。",
|
||||
"email_subscriptions.form.lead": "於不建立 Mastodon 帳號的情況下,將透過電子郵件取得嘟文。",
|
||||
"email_subscriptions.form.bottom": "於不建立 Mastodon 帳號的情況下,將透過電子郵件取得嘟文。您可以任何時候取消訂閱。欲了解更多資訊,請參考<a>隱私權政策</a>。",
|
||||
"email_subscriptions.form.title": "訂閱 {name} 之電子郵件通訊",
|
||||
"email_subscriptions.submitted.lead": "請檢查您的收件夾以完成訂閱電子郵件通訊。",
|
||||
"email_subscriptions.submitted.title": "最後一步",
|
||||
|
||||
@ -10,6 +10,8 @@ import type {
|
||||
} from 'mastodon/api_types/notifications';
|
||||
import type { ApiReportJSON } from 'mastodon/api_types/reports';
|
||||
|
||||
import type { ApiCollectionJSON } from '../api_types/collections';
|
||||
|
||||
// Maximum number of avatars displayed in a notification group
|
||||
// This corresponds to the max length of `group.sampleAccountIds`
|
||||
export const NOTIFICATIONS_GROUP_MAX_AVATARS = 8;
|
||||
@ -87,6 +89,15 @@ export interface NotificationGroupAdminReport extends BaseNotification<'admin.re
|
||||
report: Report;
|
||||
}
|
||||
|
||||
type Collection = ApiCollectionJSON;
|
||||
export interface NotificationGroupAddedToCollection extends BaseNotification<'added_to_collection'> {
|
||||
collection: Collection;
|
||||
}
|
||||
|
||||
export interface NotificationGroupCollectionUpdate extends BaseNotification<'collection_update'> {
|
||||
collection: Collection;
|
||||
}
|
||||
|
||||
export type NotificationGroup =
|
||||
| NotificationGroupFavourite
|
||||
| NotificationGroupReblog
|
||||
@ -102,7 +113,9 @@ export type NotificationGroup =
|
||||
| NotificationGroupSeveredRelationships
|
||||
| NotificationGroupAdminSignUp
|
||||
| NotificationGroupAdminReport
|
||||
| NotificationGroupAnnualReport;
|
||||
| NotificationGroupAnnualReport
|
||||
| NotificationGroupAddedToCollection
|
||||
| NotificationGroupCollectionUpdate;
|
||||
|
||||
function createReportFromJSON(reportJSON: ApiReportJSON): Report {
|
||||
const { target_account, ...report } = reportJSON;
|
||||
@ -249,6 +262,13 @@ export function createNotificationGroupFromNotificationJSON(
|
||||
notification.moderation_warning,
|
||||
),
|
||||
};
|
||||
case 'added_to_collection':
|
||||
case 'collection_update':
|
||||
return {
|
||||
...group,
|
||||
type: notification.type,
|
||||
collection: notification.collection,
|
||||
};
|
||||
default:
|
||||
return {
|
||||
...group,
|
||||
|
||||
@ -32,7 +32,6 @@ async function loadEmojiPolyfills() {
|
||||
// Loads Vite's module preload polyfill for older browsers, but not in a Worker context.
|
||||
function loadVitePreloadPolyfill() {
|
||||
if (typeof document === 'undefined') return;
|
||||
// @ts-expect-error -- This is a virtual module provided by Vite.
|
||||
// eslint-disable-next-line import/extensions
|
||||
return import('vite/modulepreload-polyfill');
|
||||
}
|
||||
|
||||
@ -8688,20 +8688,6 @@ noscript {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__familiar-followers {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-block: 16px;
|
||||
color: var(--color-text-secondary);
|
||||
|
||||
a:any-link {
|
||||
font-weight: 500;
|
||||
text-decoration: none;
|
||||
color: var(--color-text-primary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.account__contents {
|
||||
@ -8711,6 +8697,7 @@ noscript {
|
||||
.account__details {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
column-gap: 1em;
|
||||
}
|
||||
|
||||
@ -10679,11 +10666,6 @@ noscript {
|
||||
}
|
||||
|
||||
&__source {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
max-width: 100%;
|
||||
color: var(--color-text-tertiary);
|
||||
gap: 4px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
cursor: help;
|
||||
@ -10692,11 +10674,6 @@ noscript {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -10722,11 +10699,6 @@ noscript {
|
||||
}
|
||||
}
|
||||
|
||||
.verified-badge {
|
||||
font-size: 14px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
|
||||
@ -26,6 +26,7 @@ class ActivityPub::Activity::FeatureRequest < ActivityPub::Activity
|
||||
collection_item_attributes(:accepted)
|
||||
)
|
||||
|
||||
notify_local_user!(collection_item)
|
||||
queue_delivery!(collection_item, ActivityPub::AcceptFeatureRequestSerializer)
|
||||
end
|
||||
|
||||
@ -52,6 +53,10 @@ class ActivityPub::Activity::FeatureRequest < ActivityPub::Activity
|
||||
{ account: @featured_account, activity_uri: @json['id'], state: }
|
||||
end
|
||||
|
||||
def notify_local_user!(collection_item)
|
||||
LocalNotificationWorker.perform_async(collection_item.account_id, collection_item.id, collection_item.class.name, 'added_to_collection')
|
||||
end
|
||||
|
||||
def queue_delivery!(collection_item, serializer)
|
||||
json = JSON.generate(serialize_payload(collection_item, serializer))
|
||||
ActivityPub::DeliveryWorker.perform_async(json, @featured_account.id, @account.inbox_url)
|
||||
|
||||
@ -47,6 +47,10 @@ class CollectionItem < ApplicationRecord
|
||||
update!(state: :revoked)
|
||||
end
|
||||
|
||||
def with_local_account?
|
||||
account&.local?
|
||||
end
|
||||
|
||||
def local_item_with_remote_account?
|
||||
local? && account&.remote?
|
||||
end
|
||||
|
||||
@ -33,7 +33,7 @@ class Notification < ApplicationRecord
|
||||
'Quote' => :quote,
|
||||
}.freeze
|
||||
|
||||
# Please update app/javascript/api_types/notification.ts if you change this
|
||||
# Please update app/javascript/mastodon/api_types/notifications.ts if you change this
|
||||
PROPERTIES = {
|
||||
mention: {
|
||||
filterable: true,
|
||||
@ -80,6 +80,12 @@ class Notification < ApplicationRecord
|
||||
quoted_update: {
|
||||
filterable: false,
|
||||
}.freeze,
|
||||
added_to_collection: {
|
||||
filterable: true,
|
||||
}.freeze,
|
||||
collection_update: {
|
||||
filterable: false,
|
||||
},
|
||||
}.freeze
|
||||
|
||||
TYPES = PROPERTIES.keys.freeze
|
||||
@ -112,6 +118,8 @@ class Notification < ApplicationRecord
|
||||
belongs_to :account_warning, inverse_of: false
|
||||
belongs_to :generated_annual_report, inverse_of: false
|
||||
belongs_to :quote, inverse_of: :notification
|
||||
belongs_to :collection_item, inverse_of: false # TODO: have an inverse?
|
||||
belongs_to :collection, inverse_of: false # TODO: have an inverse?
|
||||
end
|
||||
|
||||
validates :type, inclusion: { in: TYPES }
|
||||
@ -139,6 +147,15 @@ class Notification < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def target_collection
|
||||
case type
|
||||
when :added_to_collection
|
||||
collection_item&.collection
|
||||
when :collection_update
|
||||
collection
|
||||
end
|
||||
end
|
||||
|
||||
class << self
|
||||
def browserable(types: [], exclude_types: [], from_account_id: nil, include_filtered: false)
|
||||
requested_types = if types.empty?
|
||||
@ -208,8 +225,10 @@ class Notification < ApplicationRecord
|
||||
case activity_type
|
||||
when 'Status'
|
||||
self.from_account_id = type == :quoted_update ? activity&.quote&.quoted_account_id : activity&.account_id
|
||||
when 'Follow', 'Favourite', 'FollowRequest', 'Poll', 'Report', 'Quote'
|
||||
when 'Follow', 'Favourite', 'FollowRequest', 'Poll', 'Report', 'Quote', 'Collection'
|
||||
self.from_account_id = activity&.account_id
|
||||
when 'CollectionItem'
|
||||
self.from_account_id = activity&.collection&.account_id
|
||||
when 'Mention'
|
||||
self.from_account_id = activity&.status&.account_id
|
||||
when 'Account'
|
||||
|
||||
@ -48,6 +48,7 @@ class NotificationGroup < ActiveModelSerializers::Model
|
||||
|
||||
delegate :type,
|
||||
:target_status,
|
||||
:target_collection,
|
||||
:report,
|
||||
:account_relationship_severance_event,
|
||||
:account_warning,
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Search < ActiveModelSerializers::Model
|
||||
attributes :accounts, :statuses, :hashtags
|
||||
attributes :accounts, :statuses, :hashtags, :collections
|
||||
end
|
||||
|
||||
@ -14,9 +14,8 @@ class StatusPolicy < ApplicationPolicy
|
||||
end
|
||||
end
|
||||
|
||||
# This is about requesting a quote post, not validating it
|
||||
def quote?
|
||||
show? && record.quote_policy_for_account(current_account) != :denied
|
||||
show? && !blocking_author? && record.quote_policy_for_account(current_account) != :denied
|
||||
end
|
||||
|
||||
def reblog?
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class REST::NotificationGroupSerializer < ActiveModel::Serializer
|
||||
# Please update app/javascript/api_types/notification.ts when making changes to the attributes
|
||||
# Please update app/javascript/mastodon/api_types/notifications.ts when making changes to the attributes
|
||||
attributes :group_key, :notifications_count, :type, :most_recent_notification_id
|
||||
|
||||
attribute :page_min_id, if: :paginated?
|
||||
@ -14,6 +14,7 @@ class REST::NotificationGroupSerializer < ActiveModel::Serializer
|
||||
belongs_to :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer
|
||||
belongs_to :account_warning, key: :moderation_warning, if: :moderation_warning_event?, serializer: REST::AccountWarningSerializer
|
||||
belongs_to :generated_annual_report, key: :annual_report, if: :annual_report_event?, serializer: REST::AnnualReportEventSerializer
|
||||
belongs_to :target_collection, key: :collection, if: :collection_type?, serializer: REST::CollectionSerializer
|
||||
|
||||
def sample_account_ids
|
||||
object.sample_accounts.pluck(:id).map(&:to_s)
|
||||
@ -27,6 +28,10 @@ class REST::NotificationGroupSerializer < ActiveModel::Serializer
|
||||
[:favourite, :reblog, :status, :mention, :poll, :update, :quote, :quoted_update].include?(object.type)
|
||||
end
|
||||
|
||||
def collection_type?
|
||||
[:added_to_collection, :collection_update].include?(object.type)
|
||||
end
|
||||
|
||||
def report_type?
|
||||
object.type == :'admin.report'
|
||||
end
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class REST::NotificationSerializer < ActiveModel::Serializer
|
||||
# Please update app/javascript/api_types/notification.ts when making changes to the attributes
|
||||
# Please update app/javascript/mastodon/api_types/notifications.ts when making changes to the attributes
|
||||
attributes :id, :type, :created_at, :group_key
|
||||
|
||||
attribute :filtered, if: :filtered?
|
||||
@ -11,6 +11,7 @@ class REST::NotificationSerializer < ActiveModel::Serializer
|
||||
belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer
|
||||
belongs_to :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer
|
||||
belongs_to :account_warning, key: :moderation_warning, if: :moderation_warning_event?, serializer: REST::AccountWarningSerializer
|
||||
belongs_to :target_collection, key: :collection, if: :collection_type?, serializer: REST::CollectionSerializer
|
||||
|
||||
def id
|
||||
object.id.to_s
|
||||
@ -24,6 +25,10 @@ class REST::NotificationSerializer < ActiveModel::Serializer
|
||||
[:favourite, :reblog, :status, :mention, :poll, :update, :quoted_update, :quote].include?(object.type)
|
||||
end
|
||||
|
||||
def collection_type?
|
||||
[:added_to_collection, :collection_update].include?(object.type)
|
||||
end
|
||||
|
||||
def report_type?
|
||||
object.type == :'admin.report'
|
||||
end
|
||||
|
||||
@ -4,4 +4,5 @@ class REST::SearchSerializer < ActiveModel::Serializer
|
||||
has_many :accounts, serializer: REST::AccountSerializer
|
||||
has_many :statuses, serializer: REST::StatusSerializer
|
||||
has_many :hashtags, serializer: REST::TagSerializer
|
||||
has_many :collections, serializer: REST::CollectionSerializer
|
||||
end
|
||||
|
||||
@ -3,8 +3,12 @@
|
||||
class ActivityPub::FetchRemoteFeaturedCollectionService < BaseService
|
||||
include JsonLdHelper
|
||||
|
||||
def call(uri, request_id: nil, on_behalf_of: nil)
|
||||
json = fetch_resource(uri, true, on_behalf_of)
|
||||
def call(uri, request_id: nil, prefetched_body: nil, on_behalf_of: nil)
|
||||
json = if prefetched_body.nil?
|
||||
fetch_resource(uri, true, on_behalf_of)
|
||||
else
|
||||
body_to_json(prefetched_body, compare_id: uri)
|
||||
end
|
||||
|
||||
return unless supported_context?(json)
|
||||
return unless json['type'] == 'FeaturedCollection'
|
||||
|
||||
@ -25,6 +25,7 @@ class ActivityPub::ProcessFeaturedCollectionService
|
||||
end
|
||||
|
||||
process_items!
|
||||
notify_about_update!
|
||||
|
||||
@collection
|
||||
end
|
||||
@ -32,6 +33,10 @@ class ActivityPub::ProcessFeaturedCollectionService
|
||||
|
||||
private
|
||||
|
||||
def notify_about_update!
|
||||
NotifyOfCollectionUpdateService.new.call(@collection)
|
||||
end
|
||||
|
||||
def truncated_summary
|
||||
text = @json['summaryMap']&.values&.first || @json['summary'] || ''
|
||||
text[0, Collection::DESCRIPTION_LENGTH_HARD_LIMIT]
|
||||
|
||||
@ -11,6 +11,7 @@ class AddAccountToCollectionService
|
||||
|
||||
@collection_item = create_collection_item
|
||||
|
||||
notify_local_user if @account.local?
|
||||
distribute_add_activity if @account.local?
|
||||
distribute_feature_request_activity if @account.remote?
|
||||
|
||||
@ -24,6 +25,10 @@ class AddAccountToCollectionService
|
||||
@collection.collection_items.create!(account: @account, state:)
|
||||
end
|
||||
|
||||
def notify_local_user
|
||||
LocalNotificationWorker.perform_async(@account.id, @collection_item.id, @collection_item.class.name, 'added_to_collection')
|
||||
end
|
||||
|
||||
def distribute_add_activity
|
||||
ActivityPub::AccountRawDistributionWorker.perform_async(add_activity_json, @collection.account_id)
|
||||
end
|
||||
|
||||
@ -9,6 +9,7 @@ class CreateCollectionService
|
||||
|
||||
@collection.save!
|
||||
|
||||
notify_local_users
|
||||
distribute_add_activity
|
||||
distribute_feature_request_activities
|
||||
|
||||
@ -39,6 +40,12 @@ class CreateCollectionService
|
||||
end
|
||||
end
|
||||
|
||||
def notify_local_users
|
||||
@collection.collection_items.select(&:with_local_account?).each do |collection_item|
|
||||
LocalNotificationWorker.perform_async(@account.id, collection_item.id, collection_item.class.name, 'added_to_collection')
|
||||
end
|
||||
end
|
||||
|
||||
def activity_json
|
||||
ActiveModelSerializers::SerializableResource.new(@collection, serializer: ActivityPub::AddFeaturedCollectionSerializer, adapter: ActivityPub::Adapter).to_json
|
||||
end
|
||||
|
||||
@ -63,7 +63,7 @@ class FetchResourceService < BaseService
|
||||
end
|
||||
|
||||
def expected_type?(json)
|
||||
equals_or_includes_any?(json['type'], ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES)
|
||||
equals_or_includes_any?(json['type'], ActivityPub::Activity::Create::SUPPORTED_TYPES + ActivityPub::Activity::Create::CONVERTED_TYPES + %w(FeaturedCollection))
|
||||
end
|
||||
|
||||
def process_html(response)
|
||||
|
||||
21
app/services/notify_of_collection_update_service.rb
Normal file
21
app/services/notify_of_collection_update_service.rb
Normal file
@ -0,0 +1,21 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class NotifyOfCollectionUpdateService
|
||||
def call(collection)
|
||||
return unless significantly_changed?(collection)
|
||||
|
||||
collection.collection_items.includes(:account).references(:account).merge(Account.local).accepted.find_each do |collection_item|
|
||||
LocalNotificationWorker.perform_async(collection_item.account_id, collection.id, collection.class.name, 'collection_update')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def significantly_changed?(collection)
|
||||
# If the collection is brand new, we don't need to look at its members
|
||||
return false if collection.previously_new_record?
|
||||
|
||||
# Only notify of change to description or name
|
||||
%i(description description_html name).any? { |attr| collection.attribute_previously_changed?(attr) }
|
||||
end
|
||||
end
|
||||
@ -14,6 +14,8 @@ class NotifyService < BaseService
|
||||
moderation_warning
|
||||
severed_relationships
|
||||
annual_report
|
||||
added_to_collection
|
||||
collection_update
|
||||
).freeze
|
||||
|
||||
class BaseCondition
|
||||
@ -21,15 +23,6 @@ class NotifyService < BaseService
|
||||
|
||||
NEW_FOLLOWER_THRESHOLD = 3.days.freeze
|
||||
|
||||
NON_FILTERABLE_TYPES = %i(
|
||||
admin.sign_up
|
||||
admin.report
|
||||
poll
|
||||
update
|
||||
account_warning
|
||||
annual_report
|
||||
).freeze
|
||||
|
||||
def initialize(notification, **options)
|
||||
@recipient = notification.account
|
||||
@sender = notification.from_account
|
||||
|
||||
@ -28,6 +28,10 @@ class ResolveURLService < BaseService
|
||||
status = FetchRemoteStatusService.new.call(resource_url, prefetched_body: body)
|
||||
authorize_with @on_behalf_of, status, :show? unless status.nil?
|
||||
status
|
||||
elsif type == 'FeaturedCollection' && Mastodon::Feature.collections_enabled?
|
||||
collection = ActivityPub::FetchRemoteFeaturedCollectionService.new.call(resource_url, prefetched_body: body)
|
||||
authorize_with @on_behalf_of, collection, :show? unless collection.nil?
|
||||
collection
|
||||
end
|
||||
end
|
||||
|
||||
@ -111,9 +115,21 @@ class ResolveURLService < BaseService
|
||||
|
||||
Account.find_remote(username, domain)
|
||||
end
|
||||
when 'collections'
|
||||
return unless recognized_params[:action] == 'show'
|
||||
|
||||
check_collection(Collection.find_by(id: recognized_params[:id]))
|
||||
end
|
||||
end
|
||||
|
||||
def check_collection(collection)
|
||||
return if collection.nil?
|
||||
|
||||
authorize_with @on_behalf_of, collection, :show?
|
||||
rescue Mastodon::NotPermittedError
|
||||
nil
|
||||
end
|
||||
|
||||
def check_local_status(status)
|
||||
return if status.nil?
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ class SearchService < BaseService
|
||||
end
|
||||
|
||||
def default_results
|
||||
{ accounts: [], hashtags: [], statuses: [] }
|
||||
{ accounts: [], hashtags: [], statuses: [], collections: [] }
|
||||
end
|
||||
|
||||
def url_query?
|
||||
|
||||
@ -7,6 +7,7 @@ class UpdateCollectionService
|
||||
@collection = collection
|
||||
@collection.update!(params)
|
||||
|
||||
notify_about_update
|
||||
distribute_update_activity
|
||||
end
|
||||
|
||||
@ -18,6 +19,10 @@ class UpdateCollectionService
|
||||
ActivityPub::AccountRawDistributionWorker.perform_async(activity_json, @collection.account.id)
|
||||
end
|
||||
|
||||
def notify_about_update
|
||||
NotifyOfCollectionUpdateService.new.call(@collection)
|
||||
end
|
||||
|
||||
def activity_json
|
||||
ActiveModelSerializers::SerializableResource.new(@collection, serializer: ActivityPub::UpdateFeaturedCollectionSerializer, adapter: ActivityPub::Adapter).to_json
|
||||
end
|
||||
|
||||
@ -5,19 +5,4 @@
|
||||
%h1= t('settings.profile')
|
||||
= render partial: 'settings/shared/profile_navigation'
|
||||
|
||||
= simple_form_for @featured_tag, url: settings_featured_tags_path do |f|
|
||||
= render 'shared/error_messages', object: @featured_tag
|
||||
|
||||
%p.lead= t('featured_tags.hint_html')
|
||||
|
||||
.fields-group
|
||||
= f.input :name,
|
||||
hint: featured_tags_hint(@recently_used_tags),
|
||||
wrapper: :with_block_label
|
||||
|
||||
.actions
|
||||
= f.button :button, t('featured_tags.add_new'), type: :submit
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
= render collection: @featured_tags, partial: 'settings/featured_tags/featured_tag'
|
||||
= render partial: 'settings/shared/profile_new_notice'
|
||||
|
||||
@ -5,76 +5,4 @@
|
||||
%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
|
||||
|
||||
%p.lead= t('edit_profile.hint_html')
|
||||
|
||||
%h2= t('edit_profile.basic_information')
|
||||
|
||||
.fields-row
|
||||
.fields-row__column.fields-row__column-6
|
||||
.fields-group
|
||||
= f.input :display_name, wrapper: :with_block_label, input_html: { maxlength: Account::DISPLAY_NAME_LENGTH_LIMIT, data: { default: @account.username } }
|
||||
|
||||
.fields-group
|
||||
= f.input :note, wrapper: :with_block_label, input_html: { maxlength: Account::NOTE_LENGTH_LIMIT }
|
||||
|
||||
.fields-row__column.fields-group.fields-row__column-6
|
||||
.input.with_block_label
|
||||
%label= t('simple_form.labels.defaults.fields')
|
||||
%span.hint= t('simple_form.hints.account.fields')
|
||||
|
||||
= f.simple_fields_for :fields do |fields_f|
|
||||
.row
|
||||
= fields_f.input :name, placeholder: t('simple_form.labels.account.fields.name'), input_html: { maxlength: Account::Field::MAX_CHARACTERS_LOCAL }
|
||||
= fields_f.input :value, placeholder: t('simple_form.labels.account.fields.value'), input_html: { maxlength: Account::Field::MAX_CHARACTERS_LOCAL }
|
||||
|
||||
.fields-row
|
||||
.fields-row__column.fields-row__column-6
|
||||
.fields-group
|
||||
= f.input :avatar,
|
||||
hint: t('simple_form.hints.defaults.avatar', dimensions: Account::Avatar::AVATAR_GEOMETRY, size: number_to_human_size(Account::Avatar::AVATAR_LIMIT)),
|
||||
input_html: { accept: Account::Avatar::AVATAR_IMAGE_MIME_TYPES },
|
||||
wrapper: :with_block_label
|
||||
|
||||
.fields-row__column.fields-row__column-6
|
||||
.fields-group
|
||||
= image_tag @account.avatar.url, class: 'fields-group__thumbnail', id: 'account_avatar-preview'
|
||||
- if @account.avatar.present?
|
||||
= link_to settings_profile_picture_path('avatar'), data: { method: :delete }, class: 'link-button link-button--destructive' do
|
||||
= material_symbol 'delete'
|
||||
= t('generic.delete')
|
||||
|
||||
.fields-row
|
||||
.fields-row__column.fields-row__column-6
|
||||
.fields-group
|
||||
= f.input :header,
|
||||
hint: t('simple_form.hints.defaults.header', dimensions: Account::Header::HEADER_GEOMETRY, size: number_to_human_size(Account::Header::HEADER_LIMIT)),
|
||||
input_html: { accept: Account::Header::HEADER_IMAGE_MIME_TYPES },
|
||||
wrapper: :with_block_label
|
||||
|
||||
.fields-row__column.fields-row__column-6
|
||||
.fields-group
|
||||
= image_tag @account.header.url, class: 'fields-group__thumbnail', id: 'account_header-preview'
|
||||
- if @account.header.present?
|
||||
= link_to settings_profile_picture_path('header'), data: { method: :delete }, class: 'link-button link-button--destructive' do
|
||||
= material_symbol 'delete'
|
||||
= t('generic.delete')
|
||||
|
||||
%h2= t('edit_profile.other')
|
||||
|
||||
.fields-group
|
||||
= f.input :bot, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.bot')
|
||||
|
||||
.actions
|
||||
= f.button :button, t('generic.save_changes'), type: :submit
|
||||
= render partial: 'settings/shared/profile_new_notice'
|
||||
|
||||
7
app/views/settings/shared/_profile_new_notice.html.haml
Normal file
7
app/views/settings/shared/_profile_new_notice.html.haml
Normal file
@ -0,0 +1,7 @@
|
||||
%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'
|
||||
@ -5,6 +5,8 @@
|
||||
%h1= t('settings.profile')
|
||||
= render partial: 'settings/shared/profile_navigation'
|
||||
|
||||
= render partial: 'settings/shared/profile_new_notice'
|
||||
|
||||
.simple_form.form-section
|
||||
%h2.heading-medium= t('verification.website_verification')
|
||||
|
||||
|
||||
@ -10,10 +10,8 @@ class LocalNotificationWorker
|
||||
# For most notification types, only one notification should exist, and the older one is
|
||||
# preferred. For updates, such as when a status is edited, the new notification
|
||||
# should replace the previous ones.
|
||||
if type == 'update'
|
||||
Notification.where(account: receiver, activity: activity, type: 'update').in_batches.delete_all
|
||||
elsif type == 'quoted_update'
|
||||
Notification.where(account: receiver, activity: activity, type: 'quoted_update').in_batches.delete_all
|
||||
if %w(update quoted_update collection_update).include?(type)
|
||||
Notification.where(account: receiver, activity: activity, type: type).in_batches.delete_all
|
||||
elsif Notification.where(account: receiver, activity: activity, type: type).any?
|
||||
return
|
||||
end
|
||||
|
||||
@ -1038,9 +1038,6 @@ an:
|
||||
lists: Listas
|
||||
mutes: Tiens en silencio
|
||||
storage: Almagazenamiento
|
||||
featured_tags:
|
||||
add_new: Anyadir nuevo
|
||||
hint_html: "<strong>Qué son las etiquetas destacadas?</strong> S'amuestran de forma prominent en o tuyo perfil publico y permiten a los usuarios navegar per las tuyas publicacions publicas especificament baixo ixas etiquetas. Son una gran ferramienta pa fer un seguimiento de treballos creativos u prochectos a largo plazo."
|
||||
filters:
|
||||
contexts:
|
||||
account: Perfils
|
||||
|
||||
@ -1448,8 +1448,6 @@ ar:
|
||||
your_appeal_pending: لقد قمت بتقديم طعن
|
||||
your_appeal_rejected: تم رفض طعنك
|
||||
edit_profile:
|
||||
basic_information: معلومات أساسية
|
||||
hint_html: "<strong>قم بتخصيص ما سيراه الناس في ملفك الشخصي العام وبجوار منشوراتك.</strong> من المرجح أن يتابعك أشخاص آخرون ويتفاعلون معك إن كان لديك صفحة شخصية مملوء وصورة."
|
||||
other: أخرى
|
||||
emoji_styles:
|
||||
auto: تلقائي
|
||||
@ -1489,10 +1487,8 @@ ar:
|
||||
mutes: قُمتَ بكتم
|
||||
storage: ذاكرة التخزين
|
||||
featured_tags:
|
||||
add_new: أضف واحدًا جديدا
|
||||
errors:
|
||||
limit: لقد قمت بالفعل بعرض الحد الأقصى من عدد الوسوم
|
||||
hint_html: "<strong>ما هي الوسوم الرائجة؟</strong> يتم عرضها بشكل بارز على ملفك الشخصي العام وتسمح للناس بتصفح منشوراتك العامة على وجه التحديد تحت تلك الوسوم. وهي أداة رائعة لتتبع الأعمال الإبداعية أو المشاريع الطويلة الأجل."
|
||||
filters:
|
||||
contexts:
|
||||
account: الملفات التعريفية
|
||||
|
||||
@ -524,7 +524,6 @@ ast:
|
||||
your_appeal_pending: Unviesti una apellación
|
||||
your_appeal_rejected: Refugóse la to apellación
|
||||
edit_profile:
|
||||
basic_information: Información básica
|
||||
other: Otres preferencies
|
||||
errors:
|
||||
'400': La solicitú qu'unviesti nun yera válida o yera incorreuta.
|
||||
@ -554,8 +553,6 @@ ast:
|
||||
domain_blocks: Dominios bloquiaos
|
||||
lists: Llistes
|
||||
storage: Almacenamientu multimedia
|
||||
featured_tags:
|
||||
add_new: Amestar
|
||||
filters:
|
||||
contexts:
|
||||
account: Perfiles
|
||||
|
||||
@ -170,9 +170,6 @@ az:
|
||||
confirm_password: Kimliyinizi doğrulamaq üçün hazırkı parolunuzu daxil edin
|
||||
proceed: Hesabı sil
|
||||
success_msg: Hesabınız uğurla silindi
|
||||
edit_profile:
|
||||
basic_information: Təməl məlumatlar
|
||||
hint_html: "<strong>İnsanların hər kəsə açıq profilinizdə və göndərişlərinizin yanında nə göstərmək istədiyinizi özəlləşdirin.</strong> Doldurulmuş bir profilə və bir profil şəklinə sahib olduğunuz zaman digər şəxslərin sizi izləmə və sizinlə əlaqə qurma ehtimalı yüksəkdir."
|
||||
exports:
|
||||
archive_takeout:
|
||||
hint_html: "<strong>Göndərişlərinizin və yüklədiyiniz medianın</strong> bir arxivini tələb edə bilərsiniz. Xaricə köçürülmüş verilər, istənilən uyumlu yazılım tərəfindən oxuna bilən ActivityPub formatında olacaq. Hər 7 gündə bir dəfə arxiv tələb edə bilərsiniz."
|
||||
|
||||
@ -1460,8 +1460,6 @@ be:
|
||||
your_appeal_pending: Вы адправілі апеляцыю
|
||||
your_appeal_rejected: Ваша абскарджанне было адхілена
|
||||
edit_profile:
|
||||
basic_information: Асноўная інфармацыя
|
||||
hint_html: "<strong>Наладзьце тое, што людзі будуць бачыць у вашым профілі і побач з вашымі паведамленнямі.</strong> Іншыя людзі з большай верагоднасцю будуць сачыць і ўзаемадзейнічаць з вамі, калі ў вас ёсць запоўнены профіль і фота профілю."
|
||||
other: Іншае
|
||||
redesign_body: Рэдагаванне профілю цяпер даступнае наўпрост са старонкі профілю.
|
||||
redesign_button: Перайсці туды
|
||||
@ -1538,10 +1536,8 @@ be:
|
||||
mutes: Уліковыя запісы, якія вы ігнаруеце
|
||||
storage: Медыясховішча
|
||||
featured_tags:
|
||||
add_new: Дадаць новы
|
||||
errors:
|
||||
limit: Вы ўжо дадалі максімальную колькасць хэштэгаў
|
||||
hint_html: "<strong>Што такое выбраныя хэштэгі?</strong> Яны паказваюцца на бачным месцы вашага профілю і дазваляюць людзям праглядаць вашыя публічныя пасты з гэтымі хэштэгамі. З іхняй дапамогай вельмі зручна сачыць за творчымі ці даўгатэрміновымі праектамі."
|
||||
filters:
|
||||
contexts:
|
||||
account: Профілі
|
||||
|
||||
@ -1361,8 +1361,6 @@ bg:
|
||||
your_appeal_pending: Подадохте обжалване
|
||||
your_appeal_rejected: Вашето обжалване е отхвърлено
|
||||
edit_profile:
|
||||
basic_information: Основна информация
|
||||
hint_html: "<strong>Персонализирайте какво хората виждат в обществения ви профил и до публикациите ви.</strong> Другите хора са по-склонни да ви последват и да взаимодействат с вас, когато имате попълнен профил и снимка на профила."
|
||||
other: Друго
|
||||
emoji_styles:
|
||||
auto: Автоматично
|
||||
@ -1402,10 +1400,8 @@ bg:
|
||||
mutes: Заглушавания
|
||||
storage: Съхранение на мултимедия
|
||||
featured_tags:
|
||||
add_new: Добавяне на нов
|
||||
errors:
|
||||
limit: Вече достигнахте максималния брой хаштагове
|
||||
hint_html: "<strong>Изтъкнете най-важните си хаштагове на профила?</strong> Чудесен инструмент за организиране на вашите творби и дългосрочни проекти, изтъкнатите хаштагове са отчетливо видими на вашия профил и позволяват лесен достъп до вашите собствени публикации."
|
||||
filters:
|
||||
contexts:
|
||||
account: Профили
|
||||
|
||||
@ -584,7 +584,6 @@ br:
|
||||
none: Diwall
|
||||
suspend: Astaliñ ar gont
|
||||
edit_profile:
|
||||
basic_information: Titouroù diavaez
|
||||
other: All
|
||||
emoji_styles:
|
||||
auto: Emgefreek
|
||||
@ -598,8 +597,6 @@ br:
|
||||
bookmarks: Sinedoù
|
||||
csv: CSV
|
||||
lists: Listennoù
|
||||
featured_tags:
|
||||
add_new: Ouzhpennañ unan nevez
|
||||
filters:
|
||||
contexts:
|
||||
account: Profiloù
|
||||
|
||||
@ -1376,8 +1376,6 @@ ca:
|
||||
your_appeal_pending: Has enviat una apel·lació
|
||||
your_appeal_rejected: La teva apel·lació ha estat rebutjada
|
||||
edit_profile:
|
||||
basic_information: Informació bàsica
|
||||
hint_html: "<strong>Personalitza el que la gent veu en el teu perfil públic i a prop dels teus tuts..</strong> És més probable que altres persones et segueixin i interaccionin amb tu quan tens emplenat el teu perfil i amb la teva imatge."
|
||||
other: Altres
|
||||
emoji_styles:
|
||||
auto: Automàtic
|
||||
@ -1417,10 +1415,8 @@ ca:
|
||||
mutes: Persones silenciades
|
||||
storage: Emmagatzematge
|
||||
featured_tags:
|
||||
add_new: Afegeix-ne una de nova
|
||||
errors:
|
||||
limit: Ja has mostrat la quantitat màxima d'etiquetes
|
||||
hint_html: "<strong>Què son les etiquetes destacades?</strong> Es mostren de manera destacada en el teu perfil públic i permeten a les persones navegar per els teus tuts gràcies a aquestes etiquetes. Són una gran eina per fer un seguiment de treballs creatius o de projectes a llarg termini."
|
||||
filters:
|
||||
contexts:
|
||||
account: Perfils
|
||||
|
||||
@ -670,9 +670,6 @@ ckb:
|
||||
lists: لیستەکان
|
||||
mutes: هەژمارە بێدەنگ کراوە
|
||||
storage: هەمارگەی میدیا
|
||||
featured_tags:
|
||||
add_new: زیادکردنی نوێ
|
||||
hint_html: "<strong> هاشتاگی تایبەت چییە؟</strong> بە شێوەیەکی دیار نیشان دەدرێت لەسەر پرۆفایلی گشتی و ڕێگە بە خەڵک دەدات بۆ گەڕان لە نووسراوە گشتیەکانت بە تایبەتی لەژێر ئەو هاشتاگە. ئامرازێکی زۆر باشن بۆ پاراستنی کاری داهێنەرانە یان پڕۆژەی درێژخایەنی ئێوە."
|
||||
filters:
|
||||
contexts:
|
||||
account: پرۆفایلەکان
|
||||
|
||||
@ -629,9 +629,6 @@ co:
|
||||
lists: Liste
|
||||
mutes: Piattate
|
||||
storage: I vostri media
|
||||
featured_tags:
|
||||
add_new: Aghjunghje
|
||||
hint_html: "<strong>Quale sò i hashtag in mostra?</strong> Sò messi in vista nant'à u vostru prufile pubblicu è permettenu à a ghjente di vede i vostri statuti ch'annu stu hashtag. Sò una bona manere di mustrà e vostre opere creative o i prughjetti à longu termine."
|
||||
filters:
|
||||
contexts:
|
||||
account: Prufili
|
||||
|
||||
@ -1449,8 +1449,6 @@ cs:
|
||||
your_appeal_pending: Podali jste odvolání
|
||||
your_appeal_rejected: Vaše odvolání bylo zamítnuto
|
||||
edit_profile:
|
||||
basic_information: Základní informace
|
||||
hint_html: "<strong>Nastavte si, co lidé uvidí na vašem veřejném profilu a vedle vašich příspěvků.</strong> Ostatní lidé vás budou spíše sledovat a komunikovat s vámi, když budete mít vyplněný profil a profilový obrázek."
|
||||
other: Další
|
||||
emoji_styles:
|
||||
auto: Auto
|
||||
@ -1490,10 +1488,8 @@ cs:
|
||||
mutes: Skrýváte
|
||||
storage: Úložiště médií
|
||||
featured_tags:
|
||||
add_new: Přidat nový
|
||||
errors:
|
||||
limit: Již jste zvýraznili maximální počet hashtagů
|
||||
hint_html: "<strong>Co jsou zvýrazněné hashtagy?</strong> Zobrazují se prominentně na vašem veřejném profilu a dovolují lidem prohlížet si vaše veřejné příspěvky konkrétně pod těmi hashtagy. Je to skvělý nástroj pro sledování kreativních děl nebo dlouhodobých projektů."
|
||||
filters:
|
||||
contexts:
|
||||
account: Profily
|
||||
|
||||
@ -1497,8 +1497,6 @@ cy:
|
||||
your_appeal_pending: Rydych wedi cyflwyno apêl
|
||||
your_appeal_rejected: Mae eich apêl wedi'i gwrthod
|
||||
edit_profile:
|
||||
basic_information: Gwybodaeth Sylfaenol
|
||||
hint_html: "<strong>Addaswch yr hyn y mae pobl yn ei weld ar eich proffil cyhoeddus ac wrth ymyl eich postiadau.</strong> Mae pobl eraill yn fwy tebygol o'ch dilyn yn ôl a rhyngweithio â chi pan fydd gennych broffil wedi'i lenwi a llun proffil."
|
||||
other: Arall
|
||||
emoji_styles:
|
||||
auto: Awto
|
||||
@ -1538,10 +1536,8 @@ cy:
|
||||
mutes: Rydych chi'n anwybyddu
|
||||
storage: Storfa cyfryngau
|
||||
featured_tags:
|
||||
add_new: Ychwanegu
|
||||
errors:
|
||||
limit: Rydych chi eisoes wedi cynnwys y nifer mwyaf o hashnodau
|
||||
hint_html: "<strong>Beth yw hashnodau dan sylw?</strong> Maen nhw'n cael eu dangos yn amlwg ar eich proffil cyhoeddus ac yn caniatáu i bobl bori'ch postiadau cyhoeddus yn benodol o dan yr hashnodau hynny. Maen nhw'n arf gwych ar gyfer cadw golwg ar weithiau creadigol neu brojectau tymor hir."
|
||||
filters:
|
||||
contexts:
|
||||
account: Proffilau
|
||||
|
||||
@ -1418,8 +1418,6 @@ da:
|
||||
your_appeal_pending: Du har indgivet en appel
|
||||
your_appeal_rejected: Din appel er afvist
|
||||
edit_profile:
|
||||
basic_information: Oplysninger
|
||||
hint_html: "<strong>Tilpas, hvad folk ser på din offentlige profil og ved siden af dine indlæg.</strong> Andre personer er mere tilbøjelige til at følge dig tilbage og interagere med dig, når du har en udfyldt profil og et profilbillede."
|
||||
other: Andre
|
||||
redesign_body: Profilredigering kan nu tilgås direkte fra profilsiden.
|
||||
redesign_button: Gå dertil
|
||||
@ -1494,10 +1492,8 @@ da:
|
||||
mutes: Du skjuler
|
||||
storage: Medielagerplads
|
||||
featured_tags:
|
||||
add_new: Tilføj nyt
|
||||
errors:
|
||||
limit: Det maksimale antal hashtags er allerede fremhævet
|
||||
hint_html: "<strong>Hvad er fremhævede hashtags?</strong> De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse hashtags. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter."
|
||||
filters:
|
||||
contexts:
|
||||
account: Profiler
|
||||
|
||||
@ -1417,8 +1417,6 @@ de:
|
||||
your_appeal_pending: Du hast Einspruch erhoben
|
||||
your_appeal_rejected: Dein Einspruch wurde abgelehnt
|
||||
edit_profile:
|
||||
basic_information: Allgemeine Informationen
|
||||
hint_html: "<strong>Bestimme, was andere auf deinem öffentlichen Profil und neben deinen Beiträgen sehen können.</strong> Wenn du ein Profilbild festlegst und dein Profil vervollständigst, werden andere eher mit dir interagieren und dir folgen."
|
||||
other: Andere
|
||||
redesign_body: Dein Profil kannst du jetzt direkt auf deiner Profilseite bearbeiten.
|
||||
redesign_button: Loslegen
|
||||
@ -1484,10 +1482,8 @@ de:
|
||||
mutes: Stummgeschaltete Profile
|
||||
storage: Medienspeicher
|
||||
featured_tags:
|
||||
add_new: Neuen hinzufügen
|
||||
errors:
|
||||
limit: Du hast bereits die maximale Anzahl an Hashtags erreicht
|
||||
hint_html: "<strong>Präsentiere deine wichtigsten Hashtags auf deinem Profil.</strong> Vorgestellte Hashtags verschaffen einen Überblick über deine kreativen Werke und langfristigen Projekte. Sie werden gut sichtbar auf deinem Profil angezeigt und ermöglichen einen schnellen Zugriff auf deine eigenen Beiträge."
|
||||
filters:
|
||||
contexts:
|
||||
account: Profile
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user