Merge commit 'b2aa476abbe82e2b49d84c9fb8ef654f95391fd3' into glitch-soc/merge-upstream

This commit is contained in:
Claire 2026-05-07 18:26:17 +02:00
commit 99f0a03dec
115 changed files with 1483 additions and 699 deletions

View File

@ -16,7 +16,7 @@ runs:
# The following is needed because we can not use `cache: true` for `setup-node`, as it does not support Corepack yet and mess up with the cache location if ran after Node is installed # The following is needed because we can not use `cache: true` for `setup-node`, as it does not support Corepack yet and mess up with the cache location if ran after Node is installed
- name: Enable corepack - name: Enable corepack
shell: bash shell: bash
run: corepack enable run: npm i -g corepack
- name: Get yarn cache directory path - name: Get yarn cache directory path
id: yarn-cache-dir-path id: yarn-cache-dir-path

View File

@ -342,7 +342,7 @@ COPY --from=node /usr/local/lib /usr/local/lib
RUN \ RUN \
# Configure Corepack # Configure Corepack
rm /usr/local/bin/yarn*; \ rm /usr/local/bin/yarn*; \
corepack enable; \ npm i -g corepack; \
corepack prepare --activate; corepack prepare --activate;
# hadolint ignore=DL3008 # hadolint ignore=DL3008

View File

@ -58,6 +58,7 @@ gem 'httplog', '~> 1.8.0', require: false
gem 'i18n' gem 'i18n'
gem 'idn-ruby', require: 'idn' gem 'idn-ruby', require: 'idn'
gem 'inline_svg' gem 'inline_svg'
gem 'ipaddr', '~> 1.2'
gem 'irb', '~> 1.8' gem 'irb', '~> 1.8'
gem 'kaminari', '~> 1.2' gem 'kaminari', '~> 1.2'
gem 'link_header', '~> 0.0' gem 'link_header', '~> 0.0'

View File

@ -343,6 +343,7 @@ GEM
activesupport (>= 3.0) activesupport (>= 3.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
io-console (0.8.2) io-console (0.8.2)
ipaddr (1.2.9)
irb (1.18.0) irb (1.18.0)
pp (>= 0.6.0) pp (>= 0.6.0)
prism (>= 1.3.0) prism (>= 1.3.0)
@ -992,6 +993,7 @@ DEPENDENCIES
i18n-tasks (~> 1.0) i18n-tasks (~> 1.0)
idn-ruby idn-ruby
inline_svg inline_svg
ipaddr (~> 1.2)
irb (~> 1.8) irb (~> 1.8)
jd-paperclip-azure (~> 3.0) jd-paperclip-azure (~> 3.0)
json json

2
Vagrantfile vendored
View File

@ -115,7 +115,7 @@ gem install bundler foreman
bundle install bundle install
# Install node modules # Install node modules
sudo corepack enable sudo npm i -g corepack
corepack prepare corepack prepare
yarn install yarn install

View File

@ -0,0 +1,10 @@
# frozen_string_literal: true
class Redirect::CollectionsController < Redirect::BaseController
private
def set_resource
@resource = Collection.find(params[:id])
not_found if @resource.local? || @resource&.account&.suspended?
end
end

View File

@ -49,9 +49,9 @@ module ContextHelper
}, },
quote_authorizations: { quote_authorizations: {
'gts' => 'https://gotosocial.org/ns#', 'gts' => 'https://gotosocial.org/ns#',
'quoteAuthorization' => { '@id' => 'https://w3id.org/fep/044f#quoteAuthorization', '@type' => '@id' }, 'QuoteAuthorization' => 'https://w3id.org/fep/044f#QuoteAuthorization',
'interactingObject' => { '@id' => 'gts:interactingObject' }, 'interactingObject' => { '@id' => 'gts:interactingObject', '@type' => '@id' },
'interactionTarget' => { '@id' => 'gts:interactionTarget' }, 'interactionTarget' => { '@id' => 'gts:interactionTarget', '@type' => '@id' },
}, },
}.freeze }.freeze

View File

@ -3,8 +3,6 @@ import type { FC } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import classNames from 'classnames';
import { followAccount } from '@/mastodon/actions/accounts'; import { followAccount } from '@/mastodon/actions/accounts';
import { useAccount } from '@/mastodon/hooks/useAccount'; import { useAccount } from '@/mastodon/hooks/useAccount';
import { getAccountHidden } from '@/mastodon/selectors/accounts'; import { getAccountHidden } from '@/mastodon/selectors/accounts';
@ -18,6 +16,7 @@ import { FollowButton } from '../follow_button';
import { IconButton } from '../icon_button'; import { IconButton } from '../icon_button';
import { AccountMenu } from './menu'; import { AccountMenu } from './menu';
import classes from './styles.module.scss';
const messages = defineMessages({ const messages = defineMessages({
enableNotifications: { enableNotifications: {
@ -49,7 +48,7 @@ export const AccountButtons: FC<AccountButtonsProps> = ({
const me = useAppSelector((state) => state.meta.get('me') as string); const me = useAppSelector((state) => state.meta.get('me') as string);
return ( return (
<div className={classNames('account__header__buttons', className)}> <div className={className}>
{!hidden && ( {!hidden && (
<AccountButtonsOther accountId={accountId} noShare={noShare} /> <AccountButtonsOther accountId={accountId} noShare={noShare} />
)} )}
@ -94,7 +93,7 @@ const AccountButtonsOther: FC<
{!isMovedAndUnfollowedAccount && ( {!isMovedAndUnfollowedAccount && (
<FollowButton <FollowButton
accountId={accountId} accountId={accountId}
className='account__header__follow-button' className={classes.followButton}
labelLength='long' labelLength='long'
/> />
)} )}

View File

@ -108,11 +108,9 @@ const FieldCard: FC<{
}> = ({ htmlHandlers, field }) => { }> = ({ htmlHandlers, field }) => {
const intl = useIntl(); const intl = useIntl();
const { const {
name,
name_emojified, name_emojified,
nameHasEmojis, nameHasEmojis,
value_emojified, value_emojified,
value_plain,
valueHasEmojis, valueHasEmojis,
verified_at, verified_at,
} = field; } = field;
@ -138,8 +136,7 @@ const FieldCard: FC<{
)} )}
label={ label={
<FieldHTML <FieldHTML
text={name} text={name_emojified}
textEmojified={name_emojified}
textHasCustomEmoji={nameHasEmojis} textHasCustomEmoji={nameHasEmojis}
className='translate' className='translate'
isOverflowing={isLabelOverflowing} isOverflowing={isLabelOverflowing}
@ -149,8 +146,7 @@ const FieldCard: FC<{
} }
value={ value={
<FieldHTML <FieldHTML
text={value_plain} text={value_emojified}
textEmojified={value_emojified}
textHasCustomEmoji={valueHasEmojis} textHasCustomEmoji={valueHasEmojis}
isOverflowing={isValueOverflowing} isOverflowing={isValueOverflowing}
onOverflowClick={handleOverflowClick} onOverflowClick={handleOverflowClick}
@ -175,7 +171,6 @@ const FieldCard: FC<{
type FieldHTMLProps = { type FieldHTMLProps = {
text: string; text: string;
textEmojified: string;
textHasCustomEmoji: boolean; textHasCustomEmoji: boolean;
isOverflowing?: boolean; isOverflowing?: boolean;
onOverflowClick?: () => void; onOverflowClick?: () => void;
@ -183,9 +178,7 @@ type FieldHTMLProps = {
const FieldHTML: FC<FieldHTMLProps> = ({ const FieldHTML: FC<FieldHTMLProps> = ({
className, className,
extraEmojis,
text, text,
textEmojified,
textHasCustomEmoji, textHasCustomEmoji,
isOverflowing, isOverflowing,
onOverflowClick, onOverflowClick,
@ -198,7 +191,7 @@ const FieldHTML: FC<FieldHTMLProps> = ({
const html = ( const html = (
<EmojiHTML <EmojiHTML
as='span' as='span'
htmlString={textEmojified} htmlString={text}
className={className} className={className}
onElement={handleElement} onElement={handleElement}
data-contents data-contents

View File

@ -1,7 +1,8 @@
import { useCallback } from 'react'; import { useCallback } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { Helmet } from 'react-helmet';
import { Helmet } from '@unhead/react/helmet';
import { openModal } from '@/mastodon/actions/modal'; import { openModal } from '@/mastodon/actions/modal';
import FollowRequestNoteContainer from '@/mastodon/features/account/containers/follow_request_note_container'; import FollowRequestNoteContainer from '@/mastodon/features/account/containers/follow_request_note_container';
@ -96,22 +97,20 @@ export const AccountHeader: React.FC<{
const isMe = me && account.id === me; const isMe = me && account.id === me;
return ( return (
<div className='account-timeline__header'> <div>
{!hidden && account.memorial && <MemorialNote />} {!hidden && account.memorial && <MemorialNote />}
{!hidden && account.moved && ( {!hidden && account.moved && (
<MovedNote accountId={account.id} targetAccountId={account.moved} /> <MovedNote accountId={account.id} targetAccountId={account.moved} />
)} )}
<AnimateEmojiProvider <AnimateEmojiProvider
className={classNames('account__header', { className={classNames(!!account.moved && classes.moved)}
inactive: !!account.moved,
})}
> >
{!suspendedOrHidden && !account.moved && relationship?.requested_by && ( {!suspendedOrHidden && !account.moved && relationship?.requested_by && (
<FollowRequestNoteContainer account={account} /> <FollowRequestNoteContainer account={account} />
)} )}
<div className={classNames('account__header__image', classes.header)}> <div className={classes.header}>
{!suspendedOrHidden && ( {!suspendedOrHidden && (
<img <img
src={autoPlayGif ? account.header : account.header_static} src={autoPlayGif ? account.header : account.header_static}
@ -121,21 +120,16 @@ export const AccountHeader: React.FC<{
)} )}
</div> </div>
<div className={classNames('account__header__bar', classes.barWrapper)}> <div className={classes.barWrapper}>
<div <div className={classes.avatarWrapper}>
className={classNames(
'account__header__tabs',
classes.avatarWrapper,
)}
>
<a <a
className='avatar'
href={account.avatar} href={account.avatar}
rel='noopener' rel='noopener'
target='_blank' target='_blank'
onClick={handleOpenAvatar} onClick={handleOpenAvatar}
> >
<Avatar <Avatar
className={classes.avatar}
account={suspendedOrHidden ? undefined : account} account={suspendedOrHidden ? undefined : account}
alt={account.avatar_description} alt={account.avatar_description}
size={80} size={80}
@ -143,12 +137,7 @@ export const AccountHeader: React.FC<{
</a> </a>
</div> </div>
<div <div className={classes.displayNameWrapper}>
className={classNames(
'account__header__tabs__name',
classes.displayNameWrapper,
)}
>
<AccountName accountId={accountId} /> <AccountName accountId={accountId} />
<AccountButtons <AccountButtons
accountId={accountId} accountId={accountId}
@ -168,23 +157,16 @@ export const AccountHeader: React.FC<{
)} )}
{!suspendedOrHidden && ( {!suspendedOrHidden && (
<div className='account__header__extra'> <div className={classes.bioButtonsWrapper}>
<div className='account__header__bio'> {me && account.id !== me && <AccountNote accountId={accountId} />}
{me && account.id !== me && (
<AccountNote accountId={accountId} />
)}
<AccountBio <AccountBio
showDropdown showDropdown
accountId={accountId} accountId={accountId}
className={classNames( className={classes.bio}
'account__header__content',
classes.bio,
)}
/> />
<AccountHeaderFields accountId={accountId} /> <AccountHeaderFields accountId={accountId} />
</div>
{!me && account.email_subscriptions && ( {!me && account.email_subscriptions && (
<AccountSubscriptionForm accountId={accountId} /> <AccountSubscriptionForm accountId={accountId} />

View File

@ -1,26 +1,79 @@
.moved {
opacity: 0.5;
}
// Account header
.header { .header {
height: 120px; height: 120px;
overflow: hidden;
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
border-bottom: 1px solid var(--color-border-primary);
img {
object-fit: cover;
display: block;
width: 100%;
height: 100%;
margin: 0;
}
@container (width >= 500px) { @container (width >= 500px) {
height: 160px; height: 160px;
} }
:global(.inactive) & {
filter: grayscale(100%);
}
} }
// Wraps everything except the header image.
.barWrapper { .barWrapper {
border-bottom: none;
padding-inline: 16px; padding-inline: 16px;
} }
// Avatar
.avatarWrapper { .avatarWrapper {
margin-top: -64px; margin-top: -64px;
padding-top: 0; padding-top: 0;
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 8px;
overflow: hidden;
margin-inline-start: -2px; // aligns the pfp with content below
}
.avatar {
background: var(--color-bg-primary);
border: 1px solid var(--color-border-primary);
border-radius: var(--avatar-border-radius);
.moved & {
filter: grayscale(100%);
}
} }
.displayNameWrapper { .displayNameWrapper {
display: flex; display: flex;
align-items: start; align-items: start;
gap: 16px; gap: 16px;
margin-top: 16px;
margin-bottom: 16px;
h1 {
font-size: 17px;
line-height: 22px;
color: var(--color-text-primary);
font-weight: 600;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
:global(.emojione) {
width: 22px;
height: 22px;
}
} }
.nameWrapper { .nameWrapper {
@ -112,21 +165,6 @@
} }
} }
$button-breakpoint: 420px;
$button-fallback-breakpoint: $button-breakpoint + 55px;
.buttonsDesktop {
@container (width < #{$button-breakpoint}) {
display: none;
}
@supports (not (container-type: inline-size)) {
@media (max-width: #{$button-fallback-breakpoint}) {
display: none;
}
}
}
.handleCopy { .handleCopy {
border: 1px solid var(--color-border-primary); border: 1px solid var(--color-border-primary);
border-radius: 8px; border-radius: 8px;
@ -147,6 +185,45 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
} }
} }
$button-breakpoint: 420px;
$button-fallback-breakpoint: $button-breakpoint + 55px;
.buttonsDesktop,
.buttonsMobile {
display: flex;
align-items: center;
gap: 8px;
:global(.button) {
flex-shrink: 1;
white-space: nowrap;
min-width: 80px;
}
:global(.icon-button) {
border: 1px solid var(--color-border-primary);
border-radius: 4px;
box-sizing: content-box;
padding: 5px;
&:global(.copied) {
border-color: var(--color-text-success);
}
}
}
.buttonsDesktop {
@container (width < #{$button-breakpoint}) {
display: none;
}
@supports (not (container-type: inline-size)) {
@media (max-width: #{$button-fallback-breakpoint}) {
display: none;
}
}
}
.buttonsMobile { .buttonsMobile {
position: sticky; position: sticky;
bottom: var(--mobile-bottom-nav-height); bottom: var(--mobile-bottom-nav-height);
@ -188,6 +265,7 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
.bio { .bio {
font-size: 15px; font-size: 15px;
color: var(--color-text-primary);
} }
.familiarFollowers { .familiarFollowers {
@ -420,3 +498,13 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
background: var(--color-bg-primary); background: var(--color-bg-primary);
} }
} }
// Buttons
.followButton {
flex-grow: 1;
}
.bioButtonsWrapper {
margin-top: 16px;
}

View File

@ -3,7 +3,7 @@ import { PureComponent } from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import StackTrace from 'stacktrace-js'; import StackTrace from 'stacktrace-js';

View File

@ -154,6 +154,7 @@ export const HoverCardAccount = forwardRef<
{(isMutual || isFollower) && ( {(isMutual || isFollower) && (
<> <>
&middot; &middot;
<span>
{isMutual ? ( {isMutual ? (
<FormattedMessage <FormattedMessage
id='account.mutual' id='account.mutual'
@ -165,6 +166,7 @@ export const HoverCardAccount = forwardRef<
defaultMessage='Follows you' defaultMessage='Follows you'
/> />
)} )}
</span>
</> </>
)} )}
</div> </div>

View File

@ -1,6 +1,6 @@
import { PureComponent } from 'react'; import { PureComponent } from 'react';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { Route } from 'react-router-dom'; import { Route } from 'react-router-dom';
import { Provider as ReduxProvider } from 'react-redux'; import { Provider as ReduxProvider } from 'react-redux';

View File

@ -3,7 +3,7 @@ import { PureComponent } from 'react';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux'; import { connect } from 'react-redux';

View File

@ -2,9 +2,10 @@ import type { FC } from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import { Column } from '@/mastodon/components/column'; import { Column } from '@/mastodon/components/column';
import { ColumnHeader } from '@/mastodon/components/column_header'; import { ColumnHeader } from '@/mastodon/components/column_header';
import { LoadingIndicator } from '@/mastodon/components/loading_indicator'; import { LoadingIndicator } from '@/mastodon/components/loading_indicator';

View File

@ -24,6 +24,7 @@ import Column from '@/mastodon/features/ui/components/column';
import { useAccount } from '@/mastodon/hooks/useAccount'; import { useAccount } from '@/mastodon/hooks/useAccount';
import { useAccountId } from '@/mastodon/hooks/useAccountId'; import { useAccountId } from '@/mastodon/hooks/useAccountId';
import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility'; import { useAccountVisibility } from '@/mastodon/hooks/useAccountVisibility';
import { me } from '@/mastodon/initial_state';
import { useAppDispatch, useAppSelector } from '@/mastodon/store'; import { useAppDispatch, useAppSelector } from '@/mastodon/store';
import AddIcon from '@/material-icons/400-24px/add.svg?react'; import AddIcon from '@/material-icons/400-24px/add.svg?react';
@ -173,12 +174,14 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
defaultMessage='Collections' defaultMessage='Collections'
/> />
</h2> </h2>
{accountId === me && (
<SubheadingLink to='/collections/new' icon={AddIcon}> <SubheadingLink to='/collections/new' icon={AddIcon}>
<FormattedMessage <FormattedMessage
id='account.featured.new_collection' id='account.featured.new_collection'
defaultMessage='New collection' defaultMessage='New collection'
/> />
</SubheadingLink> </SubheadingLink>
)}
</Subheading> </Subheading>
{hasCollections ? ( {hasCollections ? (
<ItemList> <ItemList>

View File

@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
import { import {

View File

@ -131,7 +131,7 @@ export const CollectionMenu: React.FC<{
{ {
text: intl.formatMessage(messages.copyLink), text: intl.formatMessage(messages.copyLink),
action: () => { action: () => {
void navigator.clipboard.writeText(getCollectionPath(id)); void navigator.clipboard.writeText(collection.url);
dispatch(showAlert({ message: messages.copyLinkConfirmation })); dispatch(showAlert({ message: messages.copyLinkConfirmation }));
}, },
}, },
@ -196,13 +196,14 @@ export const CollectionMenu: React.FC<{
id, id,
openShareModal, openShareModal,
isOwnCollection, isOwnCollection,
collection.url,
dispatch, dispatch,
openDeleteConfirmation, openDeleteConfirmation,
context, context,
currentAccountInCollection, currentAccountInCollection,
openReportModal, openReportModal,
openBlockModal,
openRevokeConfirmation, openRevokeConfirmation,
openBlockModal,
]); ]);
return ( return (

View File

@ -42,7 +42,7 @@ export const CollectionShareModal: React.FC<{
const isNew = !!location.state?.newCollection; const isNew = !!location.state?.newCollection;
const isOwnCollection = collection.account_id === me; const isOwnCollection = collection.account_id === me;
const collectionLink = `${window.location.origin}/collections/${collection.id}`; const collectionLink = collection.url;
const handleShareOnDevice = useCallback(() => { const handleShareOnDevice = useCallback(() => {
void navigator.share({ void navigator.share({

View File

@ -138,12 +138,16 @@ export const CollectionAccountsList: React.FC<{
const renderAccountItemButton = useCallback( const renderAccountItemButton = useCallback(
({ relationship, accountId }: RenderButtonOptions) => { ({ relationship, accountId }: RenderButtonOptions) => {
if (!me || !relationship) {
// Show follow button when logged out (it will trigger the remote interaction modal)
return <AccountListItemFollowButton accountId={accountId} />;
}
// When viewing your own collection, only show the Follow button // When viewing your own collection, only show the Follow button
// for accounts you're not following anymore. // for accounts you're not following anymore.
const withoutButton = const withoutButton =
!relationship || collectionOwnerId === me &&
(collectionOwnerId === me && (relationship.following || relationship.requested);
(relationship.following || relationship.requested));
if (withoutButton) return null; if (withoutButton) return null;

View File

@ -2,10 +2,11 @@ import { useCallback, useEffect } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import { Helmet } from 'react-helmet';
import { useHistory, useLocation, useParams } from 'react-router'; import { useHistory, useLocation, useParams } from 'react-router';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import HelpIcon from '@/material-icons/400-24px/help.svg?react'; import HelpIcon from '@/material-icons/400-24px/help.svg?react';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import ShareIcon from '@/material-icons/400-24px/share.svg?react'; import ShareIcon from '@/material-icons/400-24px/share.svg?react';

View File

@ -2,7 +2,6 @@ import { useEffect } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import { Helmet } from 'react-helmet';
import { import {
Switch, Switch,
Route, Route,
@ -12,6 +11,8 @@ import {
useLocation, useLocation,
} from 'react-router-dom'; } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import { Callout } from '@/mastodon/components/callout'; import { Callout } from '@/mastodon/components/callout';
import { useCurrentAccountId } from '@/mastodon/hooks/useAccountId'; import { useCurrentAccountId } from '@/mastodon/hooks/useAccountId';
import { initialState } from '@/mastodon/initial_state'; import { initialState } from '@/mastodon/initial_state';

View File

@ -1,8 +1,9 @@
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { Helmet } from 'react-helmet';
import { Route, Switch, useRouteMatch } from 'react-router-dom'; import { Route, Switch, useRouteMatch } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import { TabLink, TabList } from '@/mastodon/components/tab_list'; import { TabLink, TabList } from '@/mastodon/components/tab_list';
import { Column } from 'mastodon/components/column'; import { Column } from 'mastodon/components/column';
import { ColumnHeader } from 'mastodon/components/column_header'; import { ColumnHeader } from 'mastodon/components/column_header';

View File

@ -3,7 +3,7 @@ import { PureComponent } from 'react';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { connect } from 'react-redux'; import { connect } from 'react-redux';

View File

@ -2,11 +2,12 @@ import { useEffect, useCallback } from 'react';
import { useIntl, defineMessages } from 'react-intl'; import { useIntl, defineMessages } from 'react-intl';
import { Helmet } from 'react-helmet';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import type { Map as ImmutableMap, List as ImmutableList } from 'immutable'; import type { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import { Helmet } from '@unhead/react/helmet';
import elephantUIPlane from '@/images/elephant_ui_plane.svg'; import elephantUIPlane from '@/images/elephant_ui_plane.svg';
import EditIcon from '@/material-icons/400-24px/edit_square.svg?react'; import EditIcon from '@/material-icons/400-24px/edit_square.svg?react';
import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react';

View File

@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { useDispatch } from 'react-redux'; import { useDispatch } from 'react-redux';

View File

@ -3,10 +3,10 @@ import { useCallback, useEffect, useRef } from 'react';
import { defineMessages, useIntl } from 'react-intl'; import { defineMessages, useIntl } from 'react-intl';
import { Helmet } from 'react-helmet';
import { List as ImmutableList } from 'immutable'; import { List as ImmutableList } from 'immutable';
import { Helmet } from '@unhead/react/helmet';
import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
import { import {
addColumn, addColumn,

View File

@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback, useState } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react'; import BlockIcon from '@/material-icons/400-24px/block-fill.svg?react';
import { apiGetDomainBlocks } from 'mastodon/api/domain_blocks'; import { apiGetDomainBlocks } from 'mastodon/api/domain_blocks';

View File

@ -2,9 +2,10 @@ import { useCallback, useRef } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet';
import { NavLink, Switch, Route } from 'react-router-dom'; import { NavLink, Switch, Route } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react'; import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react';
import { Column } from 'mastodon/components/column'; import { Column } from 'mastodon/components/column';
import type { ColumnRef } from 'mastodon/components/column'; import type { ColumnRef } from 'mastodon/components/column';

View File

@ -2,7 +2,7 @@ import { useEffect, useRef, useCallback } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns';

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';

View File

@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react';
import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { NavLink } from 'react-router-dom'; import { NavLink } from 'react-router-dom';
import { useIdentity } from '@/mastodon/identity_context'; import { useIdentity } from '@/mastodon/identity_context';

View File

@ -10,11 +10,11 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import CheckIcon from '@/material-icons/400-24px/check.svg?react'; import CheckIcon from '@/material-icons/400-24px/check.svg?react';
import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import CloseIcon from '@/material-icons/400-24px/close.svg?react';
import { AccountBio } from '@/mastodon/components/account_bio';
import { Avatar } from '@/mastodon/components/avatar'; import { Avatar } from '@/mastodon/components/avatar';
import { DisplayName } from '@/mastodon/components/display_name'; import { DisplayName } from '@/mastodon/components/display_name';
import { IconButton } from '@/mastodon/components/icon_button'; import { IconButton } from '@/mastodon/components/icon_button';
import { injectIntl } from '@/mastodon/components/intl'; import { injectIntl } from '@/mastodon/components/intl';
import { EmojiHTML } from '@/mastodon/components/emoji/html';
const messages = defineMessages({ const messages = defineMessages({
authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' }, authorize: { id: 'follow_request.authorize', defaultMessage: 'Authorize' },
@ -41,11 +41,7 @@ class AccountAuthorize extends ImmutablePureComponent {
<DisplayName account={account} /> <DisplayName account={account} />
</Link> </Link>
<EmojiHTML <AccountBio accountId={account.id} />
className='account__header__content translate'
htmlString={account.get('note_emojified')}
extraEmojis={account.get('emojis')}
/>
</div> </div>
<div className='account--panel'> <div className='account--panel'>

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';

View File

@ -2,10 +2,10 @@ import { useEffect, useCallback, useRef } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet';
import { isFulfilled } from '@reduxjs/toolkit'; import { isFulfilled } from '@reduxjs/toolkit';
import { Helmet } from '@unhead/react/helmet';
import TagIcon from '@/material-icons/400-24px/tag.svg?react'; import TagIcon from '@/material-icons/400-24px/tag.svg?react';
import { import {
fetchFollowedHashtags, fetchFollowedHashtags,

View File

@ -28,6 +28,7 @@ interface AccountListProps {
list?: AccountList | null; list?: AccountList | null;
loadMore: () => void; loadMore: () => void;
prependAccountId?: string | null; prependAccountId?: string | null;
withoutFollowsYouBadge?: boolean;
scrollKey: string; scrollKey: string;
} }
@ -40,6 +41,7 @@ export const AccountList: FC<AccountListProps> = ({
list, list,
loadMore, loadMore,
prependAccountId, prependAccountId,
withoutFollowsYouBadge,
scrollKey, scrollKey,
}) => { }) => {
const account = useAccount(accountId); const account = useAccount(accountId);
@ -57,6 +59,7 @@ export const AccountList: FC<AccountListProps> = ({
key={followerId} key={followerId}
accountId={followerId} accountId={followerId}
withBio={false} withBio={false}
badge={withoutFollowsYouBadge ? false : null}
/> />
)) ?? []; )) ?? [];
@ -66,11 +69,12 @@ export const AccountList: FC<AccountListProps> = ({
key={prependAccountId} key={prependAccountId}
accountId={prependAccountId} accountId={prependAccountId}
withBio={false} withBio={false}
badge={withoutFollowsYouBadge ? false : null}
/>, />,
); );
} }
return children; return children;
}, [prependAccountId, list, forceEmptyState]); }, [prependAccountId, list, forceEmptyState, withoutFollowsYouBadge]);
const { multiColumn } = useLayout(); const { multiColumn } = useLayout();

View File

@ -9,6 +9,7 @@ import { expandFollowers, fetchFollowers } from '@/mastodon/actions/accounts';
import { useAccount } from '@/mastodon/hooks/useAccount'; import { useAccount } from '@/mastodon/hooks/useAccount';
import { useAccountId } from '@/mastodon/hooks/useAccountId'; import { useAccountId } from '@/mastodon/hooks/useAccountId';
import { useRelationship } from '@/mastodon/hooks/useRelationship'; import { useRelationship } from '@/mastodon/hooks/useRelationship';
import { me } from '@/mastodon/initial_state';
import { selectUserListWithoutMe } from '@/mastodon/selectors/user_lists'; import { selectUserListWithoutMe } from '@/mastodon/selectors/user_lists';
import { useAppDispatch, useAppSelector } from '@/mastodon/store'; import { useAppDispatch, useAppSelector } from '@/mastodon/store';
@ -85,6 +86,7 @@ const Followers: FC = () => {
list={followerList} list={followerList}
loadMore={loadMore} loadMore={loadMore}
prependAccountId={followerId} prependAccountId={followerId}
withoutFollowsYouBadge={accountId === me}
scrollKey='followers' scrollKey='followers'
/> />
); );

View File

@ -1,6 +1,6 @@
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { Column } from 'mastodon/components/column'; import { Column } from 'mastodon/components/column';

View File

@ -3,7 +3,7 @@ import { PureComponent } from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { connect } from 'react-redux'; import { connect } from 'react-redux';

View File

@ -4,7 +4,7 @@ import { PureComponent } from 'react';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { connect } from 'react-redux'; import { connect } from 'react-redux';

View File

@ -483,11 +483,19 @@ const InteractionModal: React.FC<{
/> />
</h3> </h3>
<p> <p>
{intent === 'follow' ? (
<FormattedMessage
id='interaction_modal.action_follow'
defaultMessage='To follow {name}, you need to sign into your account on whatever Mastodon server you use.'
values={{ name }}
/>
) : (
<FormattedMessage <FormattedMessage
id='interaction_modal.action' id='interaction_modal.action'
defaultMessage="To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use." defaultMessage="To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use."
values={{ name }} values={{ name }}
/> />
)}
</p> </p>
</div> </div>

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';

View File

@ -1,8 +1,9 @@
import { useRef, useEffect, useCallback } from 'react'; import { useRef, useEffect, useCallback } from 'react';
import { Helmet } from 'react-helmet';
import { useParams } from 'react-router-dom'; import { useParams } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react'; import TrendingUpIcon from '@/material-icons/400-24px/trending_up.svg?react';
import { expandLinkTimeline } from 'mastodon/actions/timelines'; import { expandLinkTimeline } from 'mastodon/actions/timelines';
import { Column } from 'mastodon/components/column'; import { Column } from 'mastodon/components/column';

View File

@ -3,7 +3,7 @@ import { PureComponent } from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { Link, withRouter } from 'react-router-dom'; import { Link, withRouter } from 'react-router-dom';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';

View File

@ -2,9 +2,10 @@ import { useEffect, useMemo, useCallback } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import AddIcon from '@/material-icons/400-24px/add.svg?react'; import AddIcon from '@/material-icons/400-24px/add.svg?react';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';

View File

@ -2,9 +2,10 @@ import { useCallback, useState, useEffect } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet';
import { useParams, Link } from 'react-router-dom'; import { useParams, Link } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import SquigglyArrow from '@/svg-icons/squiggly_arrow.svg?react'; import SquigglyArrow from '@/svg-icons/squiggly_arrow.svg?react';
import { fetchRelationships } from 'mastodon/actions/accounts'; import { fetchRelationships } from 'mastodon/actions/accounts';

View File

@ -2,11 +2,12 @@ import { useCallback, useState, useEffect } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet';
import { useParams, useHistory, Link } from 'react-router-dom'; import { useParams, useHistory, Link } from 'react-router-dom';
import { isFulfilled } from '@reduxjs/toolkit'; import { isFulfilled } from '@reduxjs/toolkit';
import { Helmet } from '@unhead/react/helmet';
import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import { fetchList } from 'mastodon/actions/lists'; import { fetchList } from 'mastodon/actions/lists';

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';

View File

@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { useSelector, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';

View File

@ -3,7 +3,7 @@ import { useRef, useCallback, useEffect, useState } from 'react';
import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { useSelector, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';

View File

@ -2,8 +2,7 @@ import { useCallback, useEffect, useMemo, useRef } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { isEqual } from 'lodash'; import { isEqual } from 'lodash';
import { useDebouncedCallback } from 'use-debounce'; import { useDebouncedCallback } from 'use-debounce';

View File

@ -2,9 +2,9 @@ import { useEffect, useState, useCallback, useRef } from 'react';
import { FormattedMessage, useIntl, defineMessages } from 'react-intl'; import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
import { Helmet } from 'react-helmet';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import { useDebouncedCallback } from 'use-debounce'; import { useDebouncedCallback } from 'use-debounce';
import PersonIcon from '@/material-icons/400-24px/person.svg?react'; import PersonIcon from '@/material-icons/400-24px/person.svg?react';

View File

@ -3,9 +3,10 @@ import { useState, useMemo, useCallback, createRef } from 'react';
import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import { Helmet } from 'react-helmet';
import { useHistory } from 'react-router-dom'; import { useHistory } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react'; import AddPhotoAlternateIcon from '@/material-icons/400-24px/add_photo_alternate.svg?react';
import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import EditIcon from '@/material-icons/400-24px/edit.svg?react';
import PersonIcon from '@/material-icons/400-24px/person.svg?react'; import PersonIcon from '@/material-icons/400-24px/person.svg?react';

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import { defineMessages } from 'react-intl'; import { defineMessages } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';

View File

@ -2,7 +2,7 @@ import { useState, useEffect } from 'react';
import { FormattedMessage, useIntl, defineMessages } from 'react-intl'; import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { apiGetPrivacyPolicy } from 'mastodon/api/instance'; import { apiGetPrivacyPolicy } from 'mastodon/api/instance';
import type { ApiPrivacyPolicyJSON } from 'mastodon/api_types/instance'; import type { ApiPrivacyPolicyJSON } from 'mastodon/api_types/instance';

View File

@ -3,7 +3,7 @@ import { PureComponent } from 'react';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { connect } from 'react-redux'; import { connect } from 'react-redux';

View File

@ -2,10 +2,10 @@ import { useCallback, useEffect } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import { Helmet } from 'react-helmet';
import { List as ImmutableList } from 'immutable'; import { List as ImmutableList } from 'immutable';
import { Helmet } from '@unhead/react/helmet';
import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react';
import { fetchQuotes } from 'mastodon/actions/interactions_typed'; import { fetchQuotes } from 'mastodon/actions/interactions_typed';
import { ColumnHeader } from 'mastodon/components/column_header'; import { ColumnHeader } from 'mastodon/components/column_header';

View File

@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import { defineMessages, FormattedMessage } from 'react-intl'; import { defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';

View File

@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef } from 'react';
import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react';
import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react';

View File

@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { defineMessages } from 'react-intl'; import { defineMessages } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { difference } from 'lodash'; import { difference } from 'lodash';

View File

@ -7,9 +7,10 @@ import {
defineMessages, defineMessages,
} from 'react-intl'; } from 'react-intl';
import { Helmet } from 'react-helmet';
import { Link, useParams } from 'react-router-dom'; import { Link, useParams } from 'react-router-dom';
import { Helmet } from '@unhead/react/helmet';
import { apiGetTermsOfService } from 'mastodon/api/instance'; import { apiGetTermsOfService } from 'mastodon/api/instance';
import type { ApiTermsOfServiceJSON } from 'mastodon/api_types/instance'; import type { ApiTermsOfServiceJSON } from 'mastodon/api_types/instance';
import { Column } from 'mastodon/components/column'; import { Column } from 'mastodon/components/column';

View File

@ -4,7 +4,7 @@ import { PureComponent } from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import classNames from 'classnames'; import classNames from 'classnames';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Button } from 'mastodon/components/button'; import { Button } from 'mastodon/components/button';

View File

@ -1,7 +1,7 @@
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { PureComponent } from 'react'; import { PureComponent } from 'react';
import { Helmet } from 'react-helmet'; import { Helmet } from '@unhead/react/helmet';
import Base from 'mastodon/components/modal_root'; import Base from 'mastodon/components/modal_root';
import { AltTextModal } from 'mastodon/features/alt_text_modal'; import { AltTextModal } from 'mastodon/features/alt_text_modal';

View File

@ -25,7 +25,7 @@ class IntersectionObserverWrapper {
this.observerBacklog.forEach(([ id, node, callback ]) => { this.observerBacklog.forEach(([ id, node, callback ]) => {
this.observe(id, node, callback); this.observe(id, node, callback);
}); });
this.observerBacklog = null; this.observerBacklog = [];
} }
observe (id, node, callback) { observe (id, node, callback) {

View File

@ -136,10 +136,10 @@
"account.share": "Κοινοποίηση του προφίλ @{name}", "account.share": "Κοινοποίηση του προφίλ @{name}",
"account.show_reblogs": "Εμφάνιση ενισχύσεων από @{name}", "account.show_reblogs": "Εμφάνιση ενισχύσεων από @{name}",
"account.statuses_counter": "{count, plural, one {{counter} ανάρτηση} other {{counter} αναρτήσεις}}", "account.statuses_counter": "{count, plural, one {{counter} ανάρτηση} other {{counter} αναρτήσεις}}",
"account.timeline.pinned": "Καρφιτσωμένα", "account.timeline.pinned": "Καρφιτσωμένη",
"account.timeline.pinned.view_all": "Προβολή όλων των καρφιτσωμένων αναρτήσεων", "account.timeline.pinned.view_all": "Προβολή όλων των καρφιτσωμένων αναρτήσεων",
"account.unblock": "Άρση αποκλεισμού @{name}", "account.unblock": "Άρση αποκλεισμού @{name}",
"account.unblock_domain": "Άρση αποκλεισμού του τομέα {domain}", "account.unblock_domain": "Άρση αποκλεισμού τομέα {domain}",
"account.unblock_domain_short": "Άρση αποκλ.", "account.unblock_domain_short": "Άρση αποκλ.",
"account.unblock_short": "Άρση αποκλεισμού", "account.unblock_short": "Άρση αποκλεισμού",
"account.unendorse": "Να μην αναδεικνύεται στο προφίλ", "account.unendorse": "Να μην αναδεικνύεται στο προφίλ",
@ -162,7 +162,7 @@
"account_edit.custom_fields.edit_label": "Επεξεργασία πεδίου", "account_edit.custom_fields.edit_label": "Επεξεργασία πεδίου",
"account_edit.custom_fields.placeholder": "Προσθέστε τις αντωνυμίες σας, εξωτερικούς συνδέσμους ή οτιδήποτε άλλο θέλετε να μοιραστείτε.", "account_edit.custom_fields.placeholder": "Προσθέστε τις αντωνυμίες σας, εξωτερικούς συνδέσμους ή οτιδήποτε άλλο θέλετε να μοιραστείτε.",
"account_edit.custom_fields.reorder_button": "Αναδιάταξη πεδίων", "account_edit.custom_fields.reorder_button": "Αναδιάταξη πεδίων",
"account_edit.custom_fields.tip_content": "Μπορείς εύκολα να προσθέσεις αξιοπιστία στον Mastodon λογαριασμό σου επαληθεύοντας συνδέσμους σε οποιεσδήποτε ιστοσελίδες κατέχεις.", "account_edit.custom_fields.tip_content": "Μπορείς εύκολα να προσθέσεις αξιοπιστία στον Mastodon λογαριασμό σου επαληθεύοντας συνδέσμους προς οποιεσδήποτε ιστοσελίδες κατέχεις.",
"account_edit.custom_fields.tip_title": "Συμβουλή: Προσθήκη επαληθευμένων συνδέσμων", "account_edit.custom_fields.tip_title": "Συμβουλή: Προσθήκη επαληθευμένων συνδέσμων",
"account_edit.custom_fields.title": "Προσαρμοσμένα πεδία", "account_edit.custom_fields.title": "Προσαρμοσμένα πεδία",
"account_edit.custom_fields.verified_hint": "Πώς προσθέτω έναν επαληθευμένο σύνδεσμο;", "account_edit.custom_fields.verified_hint": "Πώς προσθέτω έναν επαληθευμένο σύνδεσμο;",
@ -241,7 +241,7 @@
"account_edit.upload_modal.title_add.header": "Προσθήκη εικόνας εξωφύλλου", "account_edit.upload_modal.title_add.header": "Προσθήκη εικόνας εξωφύλλου",
"account_edit.upload_modal.title_replace.avatar": "Αντικατάσταση εικόνας προφίλ", "account_edit.upload_modal.title_replace.avatar": "Αντικατάσταση εικόνας προφίλ",
"account_edit.upload_modal.title_replace.header": "Αντικατάσταση εικόνας εξωφύλλου", "account_edit.upload_modal.title_replace.header": "Αντικατάσταση εικόνας εξωφύλλου",
"account_edit.verified_modal.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σας επαληθεύοντας συνδέσμους σε προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:", "account_edit.verified_modal.details": "Πρόσθεσε αξιοπιστία στο Mastodon προφίλ σου επαληθεύοντας συνδέσμους προς προσωπικές ιστοσελίδες. Ορίστε πως δουλεύει:",
"account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.", "account_edit.verified_modal.invisible_link.details": "Πρόσθεσε τον σύνδεσμο στην κεφαλίδα σου. Το σημαντικό μέρος είναι το rel=\"me\" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμα να χρησιμοποιήσεις μια ετικέτα link στην κεφαλίδα της σελίδας αντί για {tag}, αλλά η HTML πρέπει να είναι προσβάσιμη χωρίς την εκτέλεση JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;", "account_edit.verified_modal.invisible_link.summary": "Πώς κάνω αυτόν τον σύνδεσμο αόρατο;",
"account_edit.verified_modal.step1.header": "Αντίγραψε τον παρακάτω κώδικα HTML και επικόλλησε τον στην κεφαλίδα της ιστοσελίδας σου", "account_edit.verified_modal.step1.header": "Αντίγραψε τον παρακάτω κώδικα HTML και επικόλλησε τον στην κεφαλίδα της ιστοσελίδας σου",
@ -250,7 +250,7 @@
"account_edit.verified_modal.title": "Πώς να προσθέσεις έναν επαληθευμένο σύνδεσμο", "account_edit.verified_modal.title": "Πώς να προσθέσεις έναν επαληθευμένο σύνδεσμο",
"account_edit_tags.add_tag": "Προσθήκη #{tagName}", "account_edit_tags.add_tag": "Προσθήκη #{tagName}",
"account_edit_tags.column_title": "Επεξεργασία Ετικετών", "account_edit_tags.column_title": "Επεξεργασία Ετικετών",
"account_edit_tags.help_text": "Οι αναδεδειγμένες ετικέτες βοηθούν τους χρήστες να ανακαλύψουν και να αλληλεπιδράσουν με το προφίλ σας. Εμφανίζονται ως φίλτρα στην προβολή Δραστηριότητας της σελίδας προφίλ σας.", "account_edit_tags.help_text": "Οι αναδεδειγμένες ετικέτες βοηθούν τους χρήστες να ανακαλύψουν και να αλληλεπιδράσουν με το προφίλ σας. Εμφανίζονται ως φίλτρα στην καρτέλα Δραστηριότητα της σελίδας προφίλ σας.",
"account_edit_tags.max_tags_reached": "Έχετε φτάσει τον μέγιστο αριθμό των προτεινόμενων ετικετών.", "account_edit_tags.max_tags_reached": "Έχετε φτάσει τον μέγιστο αριθμό των προτεινόμενων ετικετών.",
"account_edit_tags.search_placeholder": "Εισάγετε μια ετικέτα…", "account_edit_tags.search_placeholder": "Εισάγετε μια ετικέτα…",
"account_edit_tags.suggestions": "Προτάσεις:", "account_edit_tags.suggestions": "Προτάσεις:",
@ -866,7 +866,7 @@
"lists.done": "Έγινε", "lists.done": "Έγινε",
"lists.edit": "Επεξεργασία λίστας", "lists.edit": "Επεξεργασία λίστας",
"lists.exclusive": "Απόκρυψη μελών από την Αρχική", "lists.exclusive": "Απόκρυψη μελών από την Αρχική",
"lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον από την Αρχική σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.", "lists.exclusive_hint": "Αν κάποιος είναι σε αυτή τη λίστα, απόκρυψέ τον από την Αρχική ροή σου για να αποφύγεις να βλέπεις τις αναρτήσεις του δύο φορές.",
"lists.find_users_to_add": "Εύρεση χρηστών για προσθήκη", "lists.find_users_to_add": "Εύρεση χρηστών για προσθήκη",
"lists.list_members_count": "{count, plural, one {# μέλος} other {# μέλη}}", "lists.list_members_count": "{count, plural, one {# μέλος} other {# μέλη}}",
"lists.list_name": "Όνομα λίστας", "lists.list_name": "Όνομα λίστας",

View File

@ -796,6 +796,7 @@
"info_button.label": "Help", "info_button.label": "Help",
"info_button.what_is_alt_text": "<h1>What is alt text?</h1> <p>Alt text provides image descriptions for people with vision impairments, low-bandwidth connections, or those seeking extra context.</p> <p>You can improve accessibility and understanding for everyone by writing clear, concise, and objective alt text.</p> <ul> <li>Capture important elements</li> <li>Summarize text in images</li> <li>Use regular sentence structure</li> <li>Avoid redundant information</li> <li>Focus on trends and key findings in complex visuals (like diagrams or maps)</li> </ul>", "info_button.what_is_alt_text": "<h1>What is alt text?</h1> <p>Alt text provides image descriptions for people with vision impairments, low-bandwidth connections, or those seeking extra context.</p> <p>You can improve accessibility and understanding for everyone by writing clear, concise, and objective alt text.</p> <ul> <li>Capture important elements</li> <li>Summarize text in images</li> <li>Use regular sentence structure</li> <li>Avoid redundant information</li> <li>Focus on trends and key findings in complex visuals (like diagrams or maps)</li> </ul>",
"interaction_modal.action": "To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use.", "interaction_modal.action": "To interact with {name}'s post, you need to sign into your account on whatever Mastodon server you use.",
"interaction_modal.action_follow": "To follow {name}, you need to sign into your account on whatever Mastodon server you use.",
"interaction_modal.go": "Go", "interaction_modal.go": "Go",
"interaction_modal.no_account_yet": "Don't have an account yet?", "interaction_modal.no_account_yet": "Don't have an account yet?",
"interaction_modal.on_another_server": "On a different server", "interaction_modal.on_another_server": "On a different server",

View File

@ -1043,9 +1043,9 @@
"notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas", "notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas",
"notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement", "notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement",
"notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas", "notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas",
"notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez l'expéditeur·ice", "notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez la personne",
"notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées", "notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées",
"notifications.policy.title": "Gestion des notifications des …", "notifications.policy.title": "Gestion des notifications des…",
"notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.enable": "Activer les notifications de bureau",
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon nest pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types dinteractions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois quelles sont activées.", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon nest pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types dinteractions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois quelles sont activées.",
"notifications_permission_banner.title": "Ne rien rater", "notifications_permission_banner.title": "Ne rien rater",

View File

@ -1027,7 +1027,7 @@
"notifications.group": "{count} notifications", "notifications.group": "{count} notifications",
"notifications.mark_as_read": "Marquer toutes les notifications comme lues", "notifications.mark_as_read": "Marquer toutes les notifications comme lues",
"notifications.permission_denied": "Impossible dactiver les notifications de bureau car lautorisation a été refusée.", "notifications.permission_denied": "Impossible dactiver les notifications de bureau car lautorisation a été refusée.",
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car lautorisation du navigateur a été refusée avant", "notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car lautorisation du navigateur a été refusée auparavant",
"notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car lautorisation requise na pas été accordée.", "notifications.permission_required": "Les notifications de bureau ne sont pas disponibles car lautorisation requise na pas été accordée.",
"notifications.policy.accept": "Accepter", "notifications.policy.accept": "Accepter",
"notifications.policy.accept_hint": "Afficher dans les notifications", "notifications.policy.accept_hint": "Afficher dans les notifications",
@ -1043,9 +1043,9 @@
"notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas", "notifications.policy.filter_not_followers_title": "Personnes qui ne vous suivent pas",
"notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement", "notifications.policy.filter_not_following_hint": "Jusqu'à ce que vous les validiez manuellement",
"notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas", "notifications.policy.filter_not_following_title": "Personnes que vous ne suivez pas",
"notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez l'expéditeur·ice", "notifications.policy.filter_private_mentions_hint": "Filtrées sauf si c'est en réponse à l'une de vos mentions ou si vous suivez la personne",
"notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées", "notifications.policy.filter_private_mentions_title": "Mentions privées non sollicitées",
"notifications.policy.title": "Gestion des notifications des …", "notifications.policy.title": "Gestion des notifications des…",
"notifications_permission_banner.enable": "Activer les notifications de bureau", "notifications_permission_banner.enable": "Activer les notifications de bureau",
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon nest pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types dinteractions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois quelles sont activées.", "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon nest pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types dinteractions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois quelles sont activées.",
"notifications_permission_banner.title": "Toujours au courant", "notifications_permission_banner.title": "Toujours au courant",

View File

@ -328,11 +328,15 @@
"annual_report.summary.share_on_mastodon": "Comhroinn ar Mastodon", "annual_report.summary.share_on_mastodon": "Comhroinn ar Mastodon",
"attachments_list.unprocessed": "(neamhphróiseáilte)", "attachments_list.unprocessed": "(neamhphróiseáilte)",
"audio.hide": "Cuir fuaim i bhfolach", "audio.hide": "Cuir fuaim i bhfolach",
"block_modal.no_collections": "Ní féidir le ceachtar agaibh a chéile a chur le bailiúcháin. Bainfear sibh go huathoibríoch ó bhailiúcháin atá agaibh cheana féin, más infheidhme.",
"block_modal.remote_users_caveat": "Iarrfaimid ar an bhfreastalaí {domain} meas a bheith agat ar do chinneadh. Mar sin féin, ní ráthaítear comhlíonadh toisc go bhféadfadh roinnt freastalaithe bloic a láimhseáil ar bhealach difriúil. Seans go mbeidh postálacha poiblí fós le feiceáil ag úsáideoirí nach bhfuil logáilte isteach.", "block_modal.remote_users_caveat": "Iarrfaimid ar an bhfreastalaí {domain} meas a bheith agat ar do chinneadh. Mar sin féin, ní ráthaítear comhlíonadh toisc go bhféadfadh roinnt freastalaithe bloic a láimhseáil ar bhealach difriúil. Seans go mbeidh postálacha poiblí fós le feiceáil ag úsáideoirí nach bhfuil logáilte isteach.",
"block_modal.show_less": "Taispeáin níos lú", "block_modal.show_less": "Taispeáin níos lú",
"block_modal.show_more": "Taispeáin níos mó", "block_modal.show_more": "Taispeáin níos mó",
"block_modal.they_cant_mention": "Ní féidir libh a chéile a lua, a leanúint ná a chéile a lua.",
"block_modal.they_cant_see_posts": "Ní féidir leo dábhar a fheiceáil agus ní fheicfidh tú a gcuid ábhair.",
"block_modal.they_will_know": "Is féidir leo a fheiceáil go bhfuil bac orthu.", "block_modal.they_will_know": "Is féidir leo a fheiceáil go bhfuil bac orthu.",
"block_modal.title": "Úsáideoir a bhlocáil?", "block_modal.title": "Úsáideoir a bhlocáil?",
"block_modal.you_wont_see_mentions": "Ní fheicfidh tú poist ó dhaoine eile a luann iad.",
"boost_modal.combo": "Is féidir leat {combo} a bhrú chun é seo a scipeáil an chéad uair eile", "boost_modal.combo": "Is féidir leat {combo} a bhrú chun é seo a scipeáil an chéad uair eile",
"boost_modal.reblog": "An post a threisiú?", "boost_modal.reblog": "An post a threisiú?",
"boost_modal.undo_reblog": "An deireadh a chur le postáil?", "boost_modal.undo_reblog": "An deireadh a chur le postáil?",

View File

@ -224,6 +224,7 @@
"account_edit.profile_tab.show_media.title": "„Média” lap megjelenítése", "account_edit.profile_tab.show_media.title": "„Média” lap megjelenítése",
"account_edit.profile_tab.show_media_replies.description": "Ha engedélyezve van, akkor a Média lap megjeleníti a bejegyzéseidet és a mások bejegyzéseihez írt válaszaidat.", "account_edit.profile_tab.show_media_replies.description": "Ha engedélyezve van, akkor a Média lap megjeleníti a bejegyzéseidet és a mások bejegyzéseihez írt válaszaidat.",
"account_edit.profile_tab.show_media_replies.title": "Válaszok megjelenítése a „Média” lapon", "account_edit.profile_tab.show_media_replies.title": "Válaszok megjelenítése a „Média” lapon",
"account_edit.profile_tab.show_relations.description": "A profilodban megjeleníti azokat a fiókokat, melyeket követsz, valamint a többi felhasználó követőit. Mások továbbra is látni fogják, hogy követed-e őket.",
"account_edit.profile_tab.show_relations.title": "„Követők” és „Követettek” megjelenítése", "account_edit.profile_tab.show_relations.title": "„Követők” és „Követettek” megjelenítése",
"account_edit.profile_tab.subtitle": "A profil megjelenítésének testreszabása.", "account_edit.profile_tab.subtitle": "A profil megjelenítésének testreszabása.",
"account_edit.profile_tab.title": "Profil megjelenítési beállításai", "account_edit.profile_tab.title": "Profil megjelenítési beállításai",
@ -327,6 +328,7 @@
"annual_report.summary.share_on_mastodon": "Megosztás a Mastodonon", "annual_report.summary.share_on_mastodon": "Megosztás a Mastodonon",
"attachments_list.unprocessed": "(feldolgozatlan)", "attachments_list.unprocessed": "(feldolgozatlan)",
"audio.hide": "Hang elrejtése", "audio.hide": "Hang elrejtése",
"block_modal.no_collections": "Egyikőtök sem adhatja hozzá a másikat gyűjteményekhez. Automatikusan el is lesztek távolítva az egymás gyűjteményéből.",
"block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.", "block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.",
"block_modal.show_less": "Kevesebb mutatása", "block_modal.show_less": "Kevesebb mutatása",
"block_modal.show_more": "Több mutatása", "block_modal.show_more": "Több mutatása",

View File

@ -36,6 +36,7 @@
"account.familiar_followers_many": "Yeṭṭafaṛ-it {name1} d {name2}, akked {othersCount, plural, one {yiwen nniḍen i tessneḍ} other {# nniḍen i tessneḍ}}", "account.familiar_followers_many": "Yeṭṭafaṛ-it {name1} d {name2}, akked {othersCount, plural, one {yiwen nniḍen i tessneḍ} other {# nniḍen i tessneḍ}}",
"account.familiar_followers_one": "Yeṭṭafar-it {name1}", "account.familiar_followers_one": "Yeṭṭafar-it {name1}",
"account.familiar_followers_two": "Yeṭṭafar-it {name1} akked {name2}", "account.familiar_followers_two": "Yeṭṭafar-it {name1} akked {name2}",
"account.featured": "Ufrinen",
"account.featured.accounts": "Imeɣna", "account.featured.accounts": "Imeɣna",
"account.featured.collections": "Tilkensa", "account.featured.collections": "Tilkensa",
"account.featured.new_collection": "Talkensit tamaynut", "account.featured.new_collection": "Talkensit tamaynut",
@ -68,6 +69,8 @@
"account.join_modal.me_today": "Ass-a, d ass-ik⋅im amezwaru deg {server}!", "account.join_modal.me_today": "Ass-a, d ass-ik⋅im amezwaru deg {server}!",
"account.join_modal.other": "{name} yerna-d ɣer {server} ass n", "account.join_modal.other": "{name} yerna-d ɣer {server} ass n",
"account.join_modal.other_today": "D ass amezwaru n {name} ɣef {server}!", "account.join_modal.other_today": "D ass amezwaru n {name} ɣef {server}!",
"account.join_modal.share.intro": "Bḍu izen anida deg-s ad temmeslayeḍ fell-ak⋅am",
"account.join_modal.years": "{number, plural, one {n useggas} other {n iseggasen}}",
"account.joined_short": "Izeddi da seg ass n", "account.joined_short": "Izeddi da seg ass n",
"account.languages": "Beddel tutlayin yettwajerden", "account.languages": "Beddel tutlayin yettwajerden",
"account.last_active": "Armud aneggaru", "account.last_active": "Armud aneggaru",
@ -87,6 +90,7 @@
"account.menu.remove_follower": "Kkes aneḍfar", "account.menu.remove_follower": "Kkes aneḍfar",
"account.menu.report": "Cetki ɣef umiḍan-a", "account.menu.report": "Cetki ɣef umiḍan-a",
"account.menu.share": "Zuzer…", "account.menu.share": "Zuzer…",
"account.menu.unblock": "Kkes asewḥel i umiḍan",
"account.moved_to": "{name} yenna-d dakken amiḍan-is amaynut yuɣal :", "account.moved_to": "{name} yenna-d dakken amiḍan-is amaynut yuɣal :",
"account.mute": "Sgugem @{name}", "account.mute": "Sgugem @{name}",
"account.mute_notifications_short": "Susem ilɣa", "account.mute_notifications_short": "Susem ilɣa",
@ -141,6 +145,7 @@
"account_edit.display_name.edit_label": "Ẓreg isem ara d-yettwaskanen", "account_edit.display_name.edit_label": "Ẓreg isem ara d-yettwaskanen",
"account_edit.display_name.title": "Isem ara d-yettwaskanen", "account_edit.display_name.title": "Isem ara d-yettwaskanen",
"account_edit.featured_hashtags.edit_label": "Rnu ihacṭagen", "account_edit.featured_hashtags.edit_label": "Rnu ihacṭagen",
"account_edit.featured_hashtags.title": "Ihacṭagen ufrinen",
"account_edit.field_actions.delete": "Kkes urti", "account_edit.field_actions.delete": "Kkes urti",
"account_edit.field_actions.edit": "Ẓreg urti", "account_edit.field_actions.edit": "Ẓreg urti",
"account_edit.field_delete_modal.delete_button": "Kkes", "account_edit.field_delete_modal.delete_button": "Kkes",
@ -167,6 +172,7 @@
"account_edit.name_modal.add_title": "Rnu isem ara d-yettwaskanen", "account_edit.name_modal.add_title": "Rnu isem ara d-yettwaskanen",
"account_edit.name_modal.edit_title": "Ẓreg isem ara d-yettwaskanen", "account_edit.name_modal.edit_title": "Ẓreg isem ara d-yettwaskanen",
"account_edit.profile_tab.button_label": "Sagen", "account_edit.profile_tab.button_label": "Sagen",
"account_edit.profile_tab.show_featured.title": "Sken-d accer n \"Ufrinen\"",
"account_edit.save": "Sekles", "account_edit.save": "Sekles",
"account_edit.upload_modal.back": "Uɣal", "account_edit.upload_modal.back": "Uɣal",
"account_edit.upload_modal.done": "Dayen", "account_edit.upload_modal.done": "Dayen",
@ -179,12 +185,16 @@
"account_edit.upload_modal.title_add.header": "Rnu tawlaft n tduli", "account_edit.upload_modal.title_add.header": "Rnu tawlaft n tduli",
"account_edit.upload_modal.title_replace.avatar": "Semselsi tawlaft n umaɣnu", "account_edit.upload_modal.title_replace.avatar": "Semselsi tawlaft n umaɣnu",
"account_edit.upload_modal.title_replace.header": "Semselsi tawlaft n tduli", "account_edit.upload_modal.title_replace.header": "Semselsi tawlaft n tduli",
"account_edit.verified_modal.invisible_link.summary": "Amek ara rreɣ aseɣwen-nni ur yettban ara?",
"account_edit.verified_modal.title": "Amek ara ternuḍ aseɣwen yettuselknen",
"account_edit_tags.add_tag": "Rnu #{tagName}", "account_edit_tags.add_tag": "Rnu #{tagName}",
"account_edit_tags.column_title": "Asiẓreg n yihacṭagen", "account_edit_tags.column_title": "Asiẓreg n yihacṭagen",
"account_edit_tags.search_placeholder": "Sekcem-d ahacṭag…", "account_edit_tags.search_placeholder": "Sekcem-d ahacṭag…",
"account_edit_tags.suggestions": "Isumren:", "account_edit_tags.suggestions": "Isumren:",
"account_edit_tags.tag_status_count": "{count, plural, one {# n yizen} other {# n yiznan}}", "account_edit_tags.tag_status_count": "{count, plural, one {# n yizen} other {# n yiznan}}",
"account_list.total": "{total, plural, one {# n umiḍan} other {# n imiḍanen}}",
"account_note.placeholder": "Ulac iwenniten", "account_note.placeholder": "Ulac iwenniten",
"admin.dashboard.retention.cohort": "Ajerred deg ayyur",
"admin.dashboard.retention.cohort_size": "Iseqdacen imaynuten", "admin.dashboard.retention.cohort_size": "Iseqdacen imaynuten",
"alert.rate_limited.message": "Ma ulac aɣilif ɛreḍ tikelt-nniḍen akka {retry_time, time, medium}.", "alert.rate_limited.message": "Ma ulac aɣilif ɛreḍ tikelt-nniḍen akka {retry_time, time, medium}.",
"alert.rate_limited.title": "Aktum s talast", "alert.rate_limited.title": "Aktum s talast",
@ -223,6 +233,7 @@
"block_modal.title": "Sewḥel aseqdac ?", "block_modal.title": "Sewḥel aseqdac ?",
"boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun", "boost_modal.combo": "Tzemreḍ ad tsiteḍ ɣef {combo} akken ad tzegleḍ aya tikelt i d-iteddun",
"boost_modal.reblog": "Zuzer tasuffeɣt?", "boost_modal.reblog": "Zuzer tasuffeɣt?",
"boost_modal.undo_reblog": "Semmet azuzer n yizen-a?",
"bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis", "bundle_column_error.copy_stacktrace": "Nɣel tuccḍa n uneqqis",
"bundle_column_error.error.title": "Uh, ala !", "bundle_column_error.error.title": "Uh, ala !",
"bundle_column_error.network.body": "Teḍra-d tuccḍa deg usali n usebter-a. Aya yezmer ad yili d ugur akudan deg tuqqna-inek·inem ɣer internet neɣ deg uqeddac-a.", "bundle_column_error.network.body": "Teḍra-d tuccḍa deg usali n usebter-a. Aya yezmer ad yili d ugur akudan deg tuqqna-inek·inem ɣer internet neɣ deg uqeddac-a.",
@ -234,6 +245,7 @@
"bundle_modal_error.close": "Mdel", "bundle_modal_error.close": "Mdel",
"bundle_modal_error.retry": "Ɛreḍ tikelt-nniḍen", "bundle_modal_error.retry": "Ɛreḍ tikelt-nniḍen",
"callout.dismiss": "Zgel-it", "callout.dismiss": "Zgel-it",
"character_counter.required": "{currentLength}/{maxLength} n yisekkilen",
"closed_registrations_modal.description": "Asnulfu n umiḍan deg {domain} mačči d ayen izemren ad yili, maca ttxil-k·m, err deg lbal-ik·im belli ur teḥwaǧeḍ ara amiḍan s wudem ibanen ɣef {domain} akken ad tesqedceḍ Mastodon.", "closed_registrations_modal.description": "Asnulfu n umiḍan deg {domain} mačči d ayen izemren ad yili, maca ttxil-k·m, err deg lbal-ik·im belli ur teḥwaǧeḍ ara amiḍan s wudem ibanen ɣef {domain} akken ad tesqedceḍ Mastodon.",
"closed_registrations_modal.find_another_server": "Aff-d aqeddac nniḍen", "closed_registrations_modal.find_another_server": "Aff-d aqeddac nniḍen",
"closed_registrations_modal.title": "Ajerred deg Masṭudun", "closed_registrations_modal.title": "Ajerred deg Masṭudun",
@ -243,6 +255,8 @@
"collection.share_modal.title": "Bḍu talkensit", "collection.share_modal.title": "Bḍu talkensit",
"collection.share_modal.title_new": "Zuzer talkensit-ik·im tamaynut!", "collection.share_modal.title_new": "Zuzer talkensit-ik·im tamaynut!",
"collections.account_count": "{count, plural, one {# n umiḍan} other {# n imiḍanen}}", "collections.account_count": "{count, plural, one {# n umiḍan} other {# n imiḍanen}}",
"collections.accounts.empty_description": "Rnu alamma d {count} n imiḍanen",
"collections.accounts.empty_editor_title": "Ulac ula yiwen ɛad deg telkensit-a",
"collections.accounts.empty_title": "Talkensit-a d tilemt", "collections.accounts.empty_title": "Talkensit-a d tilemt",
"collections.block_collection_owner": "Sewḥel amiḍan", "collections.block_collection_owner": "Sewḥel amiḍan",
"collections.by_account": "sɣur {account_handle}", "collections.by_account": "sɣur {account_handle}",
@ -262,12 +276,14 @@
"collections.detail.revoke_inclusion": "Kkes-iyi", "collections.detail.revoke_inclusion": "Kkes-iyi",
"collections.detail.sensitive_content": "Agbur amḥulfu", "collections.detail.sensitive_content": "Agbur amḥulfu",
"collections.detail.share": "Zuzer talkensit-a", "collections.detail.share": "Zuzer talkensit-a",
"collections.detail.you_are_in_this_collection": "Aql-ik⋅em ɣer sdat deg telsenkit-a",
"collections.edit_details": "Ẓreg talqayt", "collections.edit_details": "Ẓreg talqayt",
"collections.hidden_accounts_link": "{count, plural, one {# n umiḍan uffir} other {# n imiḍanen yettwaffaren}}", "collections.hidden_accounts_link": "{count, plural, one {# n umiḍan uffir} other {# n imiḍanen yettwaffaren}}",
"collections.hints.accounts_counter": "{count}/{max} n imiḍanen", "collections.hints.accounts_counter": "{count}/{max} n imiḍanen",
"collections.last_updated_at": "Taẓrigt taneggarut: {date}", "collections.last_updated_at": "Taẓrigt taneggarut: {date}",
"collections.list.created_by_author": "D-yesnulfa {name}", "collections.list.created_by_author": "D-yesnulfa {name}",
"collections.list.created_by_you": "D-tesnulfaḍ", "collections.list.created_by_you": "D-tesnulfaḍ",
"collections.list.featuring_you": "Yid-k⋅m",
"collections.manage_accounts": "Sefrek imiḍanen", "collections.manage_accounts": "Sefrek imiḍanen",
"collections.name_length_hint": "talast n 40 n yisekkilen", "collections.name_length_hint": "talast n 40 n yisekkilen",
"collections.new_collection": "Talkensit tamaynut", "collections.new_collection": "Talkensit tamaynut",
@ -276,6 +292,7 @@
"collections.revoke_collection_inclusion": "Kkes-iyi seg telkensit-a", "collections.revoke_collection_inclusion": "Kkes-iyi seg telkensit-a",
"collections.search_accounts_label": "Nadi ɣef umiḍan ara ternuḍ", "collections.search_accounts_label": "Nadi ɣef umiḍan ara ternuḍ",
"collections.share_short": "Bḍu", "collections.share_short": "Bḍu",
"collections.suggestions.can_not_add": "Ur tezmireḍ ara ad t-ternuḍt",
"collections.view_collection": "Wali talkensit", "collections.view_collection": "Wali talkensit",
"collections.visibility_public": "Azayaz", "collections.visibility_public": "Azayaz",
"collections.visibility_title": "Abani", "collections.visibility_title": "Abani",
@ -290,6 +307,7 @@
"column.edit_list": "Ẓreg tabdart", "column.edit_list": "Ẓreg tabdart",
"column.favourites": "Imenyafen", "column.favourites": "Imenyafen",
"column.firehose": "Isuddam usriden", "column.firehose": "Isuddam usriden",
"column.firehose_singular": "Asuddem usrid",
"column.follow_requests": "Isuturen n teḍfeṛt", "column.follow_requests": "Isuturen n teḍfeṛt",
"column.home": "Agejdan", "column.home": "Agejdan",
"column.list_members": "Sefrek iεeggalen n tebdart", "column.list_members": "Sefrek iεeggalen n tebdart",
@ -299,6 +317,7 @@
"column.other_collections": "Tilkensa sɣur {name}", "column.other_collections": "Tilkensa sɣur {name}",
"column.pins": "Tisuffaɣ yettwasenṭḍen", "column.pins": "Tisuffaɣ yettwasenṭḍen",
"column.public": "Tasuddemt tamatut", "column.public": "Tasuddemt tamatut",
"column.your_collections": "Tilkensa-k·m",
"column_back_button.label": "Tuɣalin", "column_back_button.label": "Tuɣalin",
"column_header.hide_settings": "Ffer iɣewwaṛen", "column_header.hide_settings": "Ffer iɣewwaṛen",
"column_header.moveLeft_settings": "Err ajgu ɣer tama tazelmaḍt", "column_header.moveLeft_settings": "Err ajgu ɣer tama tazelmaḍt",
@ -355,6 +374,7 @@
"confirmations.follow_to_list.confirm": "Ḍfeṛ-it sakin rnu-t ɣer tebdart", "confirmations.follow_to_list.confirm": "Ḍfeṛ-it sakin rnu-t ɣer tebdart",
"confirmations.follow_to_list.title": "Ḍfer aseqdac?", "confirmations.follow_to_list.title": "Ḍfer aseqdac?",
"confirmations.hide_featured_tab.confirm": "Ffer accer", "confirmations.hide_featured_tab.confirm": "Ffer accer",
"confirmations.hide_featured_tab.title": "Ffer accer n \"Ufrinen\"?",
"confirmations.logout.confirm": "Ffeɣ", "confirmations.logout.confirm": "Ffeɣ",
"confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?", "confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?",
"confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?", "confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?",
@ -432,11 +452,13 @@
"emoji_button.symbols": "Izamulen", "emoji_button.symbols": "Izamulen",
"emoji_button.travel": "Imeḍqan d Yinigen", "emoji_button.travel": "Imeḍqan d Yinigen",
"empty_column.account_featured_self.no_collections_button": "Snulfu-d talkensit", "empty_column.account_featured_self.no_collections_button": "Snulfu-d talkensit",
"empty_column.account_featured_self.no_collections_hide_tab": "Ɣumm accer-a",
"empty_column.account_suspended": "Amiḍan yettwaḥbas", "empty_column.account_suspended": "Amiḍan yettwaḥbas",
"empty_column.account_timeline": "Ulac tisuffaɣ da !", "empty_column.account_timeline": "Ulac tisuffaɣ da !",
"empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi", "empty_column.account_unavailable": "Ur nufi ara amaɣnu-ayi",
"empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.", "empty_column.blocks": "Ur tesḥebseḍ ula yiwen n umseqdac ar tura.",
"empty_column.bookmarked_statuses": "Ulac kra n tsuffeɣt i terniḍ ɣer yismenyifen-ik·im ar tura. Ticki terniḍ yiwet, ad d-tettwasken da.", "empty_column.bookmarked_statuses": "Ulac kra n tsuffeɣt i terniḍ ɣer yismenyifen-ik·im ar tura. Ticki terniḍ yiwet, ad d-tettwasken da.",
"empty_column.collections.featured_in": "Ur-k yerni ḥedd ɛad ɣer kra n telkensit.",
"empty_column.community": "Tasuddemt tazayezt tadigant n yisallen d tilemt. Aru ihi kra akken ad tt-teččareḍ!", "empty_column.community": "Tasuddemt tazayezt tadigant n yisallen d tilemt. Aru ihi kra akken ad tt-teččareḍ!",
"empty_column.domain_blocks": "Ulac kra n taɣult yettwaffren ar tura.", "empty_column.domain_blocks": "Ulac kra n taɣult yettwaffren ar tura.",
"empty_column.explore_statuses": "Ulac ayen yellan d anezzuɣ akka tura. Uɣal-d ticki!", "empty_column.explore_statuses": "Ulac ayen yellan d anezzuɣ akka tura. Uɣal-d ticki!",
@ -458,6 +480,7 @@
"explore.trending_tags": "Ihacṭagen", "explore.trending_tags": "Ihacṭagen",
"featured_carousel.current": "<sr>Izen wis</sr> {current, number} / {max, number}", "featured_carousel.current": "<sr>Izen wis</sr> {current, number} / {max, number}",
"featured_carousel.header": "{count, plural, one {n tsuffeɣt tunṭiḍt} other {n tsuffaɣ tunṭiḍin}}", "featured_carousel.header": "{count, plural, one {n tsuffeɣt tunṭiḍt} other {n tsuffaɣ tunṭiḍin}}",
"featured_carousel.slide": "Iznen {current, number} ɣef {max, number}",
"featured_tags.more_items": "+{count}", "featured_tags.more_items": "+{count}",
"featured_tags.suggestions.add": "Rnu", "featured_tags.suggestions.add": "Rnu",
"featured_tags.suggestions.dismiss": "Uhu, tanemmirt", "featured_tags.suggestions.dismiss": "Uhu, tanemmirt",

View File

@ -43,6 +43,7 @@
"account.featured": "Utvald", "account.featured": "Utvald",
"account.featured.accounts": "Profilar", "account.featured.accounts": "Profilar",
"account.featured.collections": "Samlingar", "account.featured.collections": "Samlingar",
"account.featured.new_collection": "Ny samling",
"account.field_overflow": "Vis heile innhaldet", "account.field_overflow": "Vis heile innhaldet",
"account.filters.all": "All aktivitet", "account.filters.all": "All aktivitet",
"account.filters.boosts_toggle": "Vis framhevingar", "account.filters.boosts_toggle": "Vis framhevingar",
@ -68,6 +69,16 @@
"account.go_to_profile": "Gå til profil", "account.go_to_profile": "Gå til profil",
"account.hide_reblogs": "Gøym framhevingar frå @{name}", "account.hide_reblogs": "Gøym framhevingar frå @{name}",
"account.in_memoriam": "Til minne om.", "account.in_memoriam": "Til minne om.",
"account.join_modal.day": "Dag",
"account.join_modal.me": "Du vart medlem av {server} den",
"account.join_modal.me_anniversary": "God allheimsbursdag! Du vart medlem av {server} den",
"account.join_modal.me_today": "Det er fyrste dagen din på {server}!",
"account.join_modal.other": "{name} vart medlem av {server} den",
"account.join_modal.other_today": "{name} har sin fyrste dag på {server}!",
"account.join_modal.share.celebrate": "Skriv eit jubileumsinnlegg",
"account.join_modal.share.intro": "Skriv eit introduksjonsinnlegg",
"account.join_modal.share.welcome": "Skriv eit velkomstinnlegg",
"account.join_modal.years": "{number, plural, one {år} other {år}}",
"account.joined_short": "Vart med", "account.joined_short": "Vart med",
"account.languages": "Endre språktingingar", "account.languages": "Endre språktingingar",
"account.last_active": "Sist aktiv", "account.last_active": "Sist aktiv",

View File

@ -324,11 +324,15 @@
"annual_report.summary.share_on_mastodon": "Ndajeni në Mastodon me të tjerë", "annual_report.summary.share_on_mastodon": "Ndajeni në Mastodon me të tjerë",
"attachments_list.unprocessed": "(e papërpunuar)", "attachments_list.unprocessed": "(e papërpunuar)",
"audio.hide": "Fshihe audion", "audio.hide": "Fshihe audion",
"block_modal.no_collections": "Asnjë prej jush smund shtojë tjetrin te koleksione. Do të hiqeni automatikisht nga koleksionne ekzistuese të njëri-tjetrit, nëse ka vend.",
"block_modal.remote_users_caveat": "Do ti kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi sështë i garantuar, ngaqë disa shërbyes mund ti trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.", "block_modal.remote_users_caveat": "Do ti kërkojmë shërbyesit {domain} të respektojë vendimin tuaj. Por, pajtimi sështë i garantuar, ngaqë disa shërbyes mund ti trajtojnë ndryshe bllokimet. Psotimet publike mundet të jenë ende të dukshme për përdorues pa bërë hyrje në llogari.",
"block_modal.show_less": "Shfaq më pak", "block_modal.show_less": "Shfaq më pak",
"block_modal.show_more": "Shfaq më tepër", "block_modal.show_more": "Shfaq më tepër",
"block_modal.they_cant_mention": "Smund të përmendni, ndiqni, ose citoni njëri-tjetrin.",
"block_modal.they_cant_see_posts": "Smund të shohin lëndën tuaj dhe ju sdo të shihni të tyren.",
"block_modal.they_will_know": "Mund të shohin se janë bllokuar.", "block_modal.they_will_know": "Mund të shohin se janë bllokuar.",
"block_modal.title": "Të bllokohet përdoruesi?", "block_modal.title": "Të bllokohet përdoruesi?",
"block_modal.you_wont_see_mentions": "Sdo të shihni postime nga të tjerë që i përmendin ata.",
"boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}", "boost_modal.combo": "Që kjo të anashkalohet herës tjetër, mund të shtypni {combo}",
"boost_modal.reblog": "Përforcim postimi?", "boost_modal.reblog": "Përforcim postimi?",
"boost_modal.undo_reblog": "Të hiqet përforcim për postimin?", "boost_modal.undo_reblog": "Të hiqet përforcim për postimin?",

View File

@ -1,3 +1,4 @@
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client'; import { createRoot } from 'react-dom/client';
import { Globals } from '@react-spring/web'; import { Globals } from '@react-spring/web';
@ -33,7 +34,11 @@ function main() {
await initializeEmoji(); await initializeEmoji();
const root = createRoot(mountNode); const root = createRoot(mountNode);
root.render(<Mastodon {...props} />); root.render(
<StrictMode>
<Mastodon {...props} />
</StrictMode>,
);
store.dispatch(setupBrowserNotifications()); store.dispatch(setupBrowserNotifications());
if (isProduction() && me && 'serviceWorker' in navigator) { if (isProduction() && me && 'serviceWorker' in navigator) {

View File

@ -231,75 +231,6 @@
border-color: var(--color-border-error-soft); border-color: var(--color-border-error-soft);
} }
.account__header__fields {
max-width: 100vw;
padding: 0;
margin: 15px -15px -15px;
border: 0 none;
border-top: 1px solid var(--color-border-primary);
border-bottom: 1px solid var(--color-border-primary);
font-size: 14px;
line-height: 20px;
dl {
display: flex;
border-bottom: 1px solid var(--color-border-primary);
}
dt,
dd {
box-sizing: border-box;
padding: 14px;
text-align: center;
max-height: 48px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
dt {
font-weight: 500;
width: 120px;
flex: 0 0 auto;
color: var(--color-text-primary);
background: var(--color-bg-secondary);
}
dd {
flex: 1 1 auto;
color: var(--color-text-secondary);
}
a {
color: var(--color-text-brand);
text-decoration: none;
&:hover,
&:focus,
&:active {
text-decoration: underline;
}
}
.verified {
border: 1px solid var(--color-border-success-soft);
background: var(--color-bg-success-softest);
a {
color: var(--color-text-success);
font-weight: 500;
}
&__mark {
color: var(--color-text-success);
}
}
dl:last-child {
border-bottom: 0;
}
}
.directory__tag .trends__item__current { .directory__tag .trends__item__current {
width: auto; width: auto;
} }

View File

@ -1051,35 +1051,121 @@ a.name-tag,
max-width: 100%; max-width: 100%;
} }
.account__header__fields, &__fields,
.account__header__content { &__content {
background: var(--color-bg-primary); background: var(--color-bg-primary);
border: 1px solid var(--color-border-primary); border: 1px solid var(--color-border-primary);
border-radius: 4px; border-radius: 4px;
height: 100%; height: 100%;
} }
.account__header__fields { &__fields {
margin: 0;
border: 1px solid var(--color-border-primary); border: 1px solid var(--color-border-primary);
font-size: 14px;
line-height: 20px;
display: grid;
grid-template-columns: 120px auto;
grid-auto-flow: row;
dl {
display: flex;
}
dt,
dd {
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
padding: 14px;
text-align: center;
border-bottom: 1px solid var(--color-border-primary);
&:last-of-type:not(.verified) {
border-bottom: none;
}
}
dt {
font-weight: 500;
width: 120px;
flex: 0 0 auto;
color: var(--color-text-primary);
background: var(--color-bg-secondary);
}
dd {
flex: 1 1 auto;
color: var(--color-text-secondary);
&:first-of-type.verified {
border-top-right-radius: 4px;
}
&:last-of-type.verified {
border-bottom-right-radius: 4px;
}
}
a { a {
color: var(--color-text-brand); color: var(--color-text-brand);
text-decoration: none;
&:hover,
&:focus,
&:active {
text-decoration: underline;
}
} }
dl:first-child .verified { .verified {
border-radius: 0 4px 0 0; border: 1px solid var(--color-border-success-soft);
} background: var(--color-bg-success-softest);
.verified a { a {
color: var(--color-text-success); color: var(--color-text-success);
font-weight: 500;
}
&__mark {
color: var(--color-text-success);
> svg {
vertical-align: middle;
}
}
} }
} }
.account__header__content { &__content {
box-sizing: border-box; box-sizing: border-box;
padding: 20px; padding: 20px;
color: var(--color-text-primary); color: var(--color-text-primary);
font-size: 14px;
font-weight: 400;
overflow: hidden;
word-break: normal;
overflow-wrap: break-word;
p {
margin-bottom: 20px;
unicode-bidi: plaintext;
&:last-child {
margin-bottom: 0;
}
}
a {
color: var(--color-text-brand);
text-decoration: none;
&:hover,
&:focus,
&:active {
text-decoration: underline;
}
}
} }
} }

View File

@ -8320,372 +8320,6 @@ noscript {
} }
} }
.account__header__content {
color: var(--color-text-secondary);
font-size: 14px;
font-weight: 400;
overflow: hidden;
word-break: normal;
overflow-wrap: break-word;
p {
margin-bottom: 20px;
unicode-bidi: plaintext;
&:last-child {
margin-bottom: 0;
}
}
a {
color: inherit;
text-decoration: underline;
&:hover {
text-decoration: none;
}
}
}
.account__header {
container: account-header / inline-size;
&.inactive {
opacity: 0.5;
.account__header__image,
.account__avatar {
filter: grayscale(100%);
}
}
&__info {
position: absolute;
top: 20px;
inset-inline-end: 20px;
display: flex;
flex-wrap: wrap;
gap: 2px;
}
&__image {
overflow: hidden;
height: 145px;
position: relative;
background: var(--color-bg-tertiary);
border-bottom: 1px solid var(--color-border-primary);
img {
object-fit: cover;
display: block;
width: 100%;
height: 100%;
margin: 0;
}
}
&__bar {
position: relative;
padding: 0 20px;
border-bottom: 1px solid var(--color-border-primary);
.avatar {
display: block;
flex: 0 0 auto;
.account__avatar {
background: var(--color-bg-primary);
border: 1px solid var(--color-border-primary);
border-radius: var(--avatar-border-radius);
}
}
}
&__tabs {
display: flex;
align-items: flex-start;
justify-content: space-between;
margin-top: -55px;
padding-top: 10px;
gap: 8px;
overflow: hidden;
margin-inline-start: -2px; // aligns the pfp with content below
&__name {
margin-top: 16px;
margin-bottom: 16px;
.emojione {
width: 22px;
height: 22px;
}
h1 {
font-size: 17px;
line-height: 22px;
color: var(--color-text-primary);
font-weight: 600;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
small {
display: flex;
align-items: center;
gap: 4px;
font-size: 14px;
line-height: 20px;
color: var(--color-text-secondary);
font-weight: 400;
overflow: hidden;
text-overflow: ellipsis;
span {
overflow: hidden;
text-overflow: ellipsis;
user-select: all;
}
.icon-lock {
height: 18px;
width: 18px;
}
}
}
}
.spacer {
flex: 1 1 auto;
}
}
&__follow-button {
flex-grow: 1;
}
&__buttons {
display: flex;
align-items: center;
gap: 8px;
$button-breakpoint: 420px;
$button-fallback-breakpoint: $button-breakpoint + 55px;
&--desktop {
margin-top: 55px;
@container (width < #{$button-breakpoint}) {
display: none;
}
@supports (not (container-type: inline-size)) {
@media (max-width: #{$button-fallback-breakpoint}) {
display: none;
}
}
}
&--mobile {
margin-block: 16px;
@container (width >= #{$button-breakpoint}) {
display: none;
}
@supports (not (container-type: inline-size)) {
@media (min-width: ($button-fallback-breakpoint + 1px)) {
display: none;
}
}
}
.button {
flex-shrink: 1;
white-space: nowrap;
min-width: 80px;
}
.icon-button {
border: 1px solid var(--color-border-primary);
border-radius: 4px;
box-sizing: content-box;
padding: 5px;
.icon {
width: 24px;
height: 24px;
}
&.copied {
border-color: var(--color-text-success);
}
}
}
&__bio {
.account__header__content {
color: var(--color-text-primary);
}
.account__header__fields {
margin: 0;
margin-top: 16px;
border-radius: 4px;
border: 1px solid var(--color-border-primary);
dl {
display: block;
padding: 11px 16px;
border-bottom-color: var(--color-border-primary);
}
dd,
dt {
font-size: 13px;
line-height: 18px;
padding: 0;
text-align: initial;
}
dt {
width: auto;
background: transparent;
text-transform: uppercase;
color: var(--color-text-tertiary);
}
dd {
color: var(--color-text-secondary);
}
a {
color: var(--color-text-brand);
}
.icon {
width: 18px;
height: 18px;
}
.verified {
border: 1px solid var(--color-text-success);
margin-top: -1px;
margin-inline: -1px;
&:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
&:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
margin-bottom: -1px;
}
dt,
dd {
color: var(--color-text-success);
}
dd {
display: flex;
align-items: center;
gap: 4px;
span {
display: flex;
}
}
a {
color: var(--color-text-success);
}
}
}
}
&__extra {
margin-top: 16px;
&__links {
font-size: 14px;
color: var(--color-text-secondary);
margin: 0 -10px;
padding-top: 16px;
padding-bottom: 10px;
a {
display: inline-block;
color: var(--color-text-secondary);
text-decoration: none;
padding: 5px 10px;
font-weight: 500;
strong {
font-weight: 700;
color: var(--color-text-primary);
}
}
}
}
&__account-note {
color: var(--color-text-primary);
font-size: 14px;
font-weight: 400;
margin-bottom: 10px;
&__loading-indicator-wrapper {
position: relative;
height: 37px;
.loading-indicator {
left: 10px;
}
.circular-progress {
width: 14px;
height: 14px;
}
}
label {
display: block;
font-size: 12px;
font-weight: 500;
color: var(--color-text-secondary);
text-transform: uppercase;
margin-bottom: 5px;
}
textarea {
display: block;
box-sizing: border-box;
width: calc(100% + 20px);
color: var(--color-text-primary);
background: transparent;
padding: 10px;
margin: 0 -10px;
font-family: inherit;
font-size: 14px;
resize: none;
border: 0;
outline: 0;
border-radius: 4px;
&::placeholder {
color: var(--color-text-tertiary);
opacity: 1;
}
&:focus {
background: var(--color-bg-brand-softest);
}
}
}
}
.account__contents { .account__contents {
overflow: hidden; overflow: hidden;
} }

View File

@ -21,6 +21,9 @@ class PermalinkRedirector
elsif accounts_request? && record_integer_id_request? elsif accounts_request? && record_integer_id_request?
account = Account.find_by(id: second_segment) account = Account.find_by(id: second_segment)
account if !account&.local? && !account&.suspended? account if !account&.local? && !account&.suspended?
elsif collections_request? && record_integer_id_request?
collection = Collection.find_by(id: second_segment)
collection if !collection&.local? && !collection&.account&.suspended?
end end
end end
end end
@ -43,6 +46,8 @@ class PermalinkRedirector
redirect_account_path(object.id) redirect_account_path(object.id)
when 'Status' when 'Status'
redirect_status_path(object.id) redirect_status_path(object.id)
when 'Collection'
redirect_collection_path(object.id)
else else
@path.delete_prefix('/deck') if @path.start_with?('/deck') @path.delete_prefix('/deck') if @path.start_with?('/deck')
end end
@ -70,6 +75,10 @@ class PermalinkRedirector
first_segment == 'accounts' first_segment == 'accounts'
end end
def collections_request?
first_segment == 'collections'
end
def record_integer_id_request? def record_integer_id_request?
second_segment =~ /\d/ second_segment =~ /\d/
end end

View File

@ -30,7 +30,7 @@ class CollectionItem < ApplicationRecord
delegate :local?, :remote?, to: :collection delegate :local?, :remote?, to: :collection
validates :account_id, uniqueness: { scope: :collection_id } validates :account_id, uniqueness: { scope: :collection_id, allow_nil: true }
validates :position, numericality: { only_integer: true, greater_than: 0 } validates :position, numericality: { only_integer: true, greater_than: 0 }
validates :activity_uri, presence: true, if: :local_item_with_remote_account? validates :activity_uri, presence: true, if: :local_item_with_remote_account?
validates :approval_uri, presence: true, unless: -> { local? || account&.local? || !accepted? } validates :approval_uri, presence: true, unless: -> { local? || account&.local? || !accepted? }

View File

@ -1,8 +1,7 @@
-# locals: (field:, account:) -# locals: (field:, account:)
%dl %dt.emojify{ title: field.name }
%dt.emojify{ title: field.name }
= prerender_custom_emojis(h(field.name), account.emojis) = prerender_custom_emojis(h(field.name), account.emojis)
%dd{ title: field.value, class: field_verified_class(field.verified?) } %dd{ title: field.value, class: field_verified_class(field.verified?) }
- if field.verified? - if field.verified?
%span.verified__mark{ title: t('accounts.link_verified_on', date: l(field.verified_at)) } %span.verified__mark{ title: t('accounts.link_verified_on', date: l(field.verified_at)) }
= material_symbol 'check' = material_symbol 'check'

View File

@ -11,12 +11,12 @@
.admin-account-bio .admin-account-bio
- if @account.fields? - if @account.fields?
%div %div
.account__header__fields %dl.admin-account-bio__fields
= render partial: 'field', collection: @account.fields, locals: { account: @account } = render partial: 'field', collection: @account.fields, locals: { account: @account }
- if @account.note? - if @account.note?
%div %div
.account__header__content.emojify .admin-account-bio__content.emojify
= prerender_custom_emojis(account_bio_format(@account), @account.emojis) = prerender_custom_emojis(account_bio_format(@account), @account.emojis)
= render 'admin/accounts/counters', account: @account = render 'admin/accounts/counters', account: @account

View File

@ -61,14 +61,11 @@
wrapper: :with_block_label wrapper: :with_block_label
- if approved_registrations? && @invite.blank? - if approved_registrations? && @invite.blank?
%p.lead= t('auth.sign_up.manual_review', domain: site_hostname)
.fields-group .fields-group
= f.simple_fields_for :invite_request, resource.invite_request || resource.build_invite_request do |invite_request_fields| = f.simple_fields_for :invite_request, resource.invite_request || resource.build_invite_request do |invite_request_fields|
= invite_request_fields.input :text, = invite_request_fields.input :text,
as: :text, as: :text,
hint: false, hint: t('auth.sign_up.manual_review', domain: site_hostname),
label: false,
input_html: { maxlength: UserInviteRequest::TEXT_SIZE_LIMIT }, input_html: { maxlength: UserInviteRequest::TEXT_SIZE_LIMIT },
required: Setting.require_invite_text, required: Setting.require_invite_text,
wrapper: :with_block_label wrapper: :with_block_label

View File

@ -18,7 +18,7 @@ FileUtils.chdir APP_ROOT do
system('bundle check') || system!('bundle install') system('bundle check') || system!('bundle install')
puts "\n== Installing JS dependencies ==" puts "\n== Installing JS dependencies =="
system! 'corepack enable' system! 'npm i -g corepack'
system! 'bin/yarn install --immutable' system! 'bin/yarn install --immutable'
puts "\n== Preparing database ==" puts "\n== Preparing database =="

View File

@ -484,8 +484,10 @@ da:
title: Blokér nyt e-maildomæne title: Blokér nyt e-maildomæne
no_email_domain_block_selected: Ingen e-maildomæneblokeringer ændret (ingen var valgt) no_email_domain_block_selected: Ingen e-maildomæneblokeringer ændret (ingen var valgt)
not_permitted: Ikke tilladt not_permitted: Ikke tilladt
reset: Nulstil
resolved_dns_records_hint_html: Domænenavnet opløses til flg. MX-domæner, som i sidste ende er ansvarlige for e-mailmodtagelse. Blokering af et MX-domæne blokerer også tilmeldinger fra enhver e-mailadresse på det pågældende MX-domæne, selv hvis det synlige domænenavn er et andet. <strong>Pas på ikke at blokere større e-mailudbydere.</strong> resolved_dns_records_hint_html: Domænenavnet opløses til flg. MX-domæner, som i sidste ende er ansvarlige for e-mailmodtagelse. Blokering af et MX-domæne blokerer også tilmeldinger fra enhver e-mailadresse på det pågældende MX-domæne, selv hvis det synlige domænenavn er et andet. <strong>Pas på ikke at blokere større e-mailudbydere.</strong>
resolved_through_html: Opløst via %{domain} resolved_through_html: Opløst via %{domain}
search: Søg
title: Blokerede e-maildomæner title: Blokerede e-maildomæner
email_subscriptions: email_subscriptions:
accounts: accounts:

View File

@ -484,8 +484,10 @@ de:
title: Neue E-Mail-Domain sperren title: Neue E-Mail-Domain sperren
no_email_domain_block_selected: Es wurden keine E-Mail-Domain-Sperren geändert, da keine ausgewählt wurden no_email_domain_block_selected: Es wurden keine E-Mail-Domain-Sperren geändert, da keine ausgewählt wurden
not_permitted: Nicht erlaubt not_permitted: Nicht erlaubt
reset: Zurücksetzen
resolved_dns_records_hint_html: Die Domain wird zu den folgenden MX-Domains aufgelöst, die für die Annahme von E-Mails zuständig sind. Das Sperren einer MX-Domain sperrt Anmeldungen aller E-Mail-Adressen, die dieselbe MX-Domain verwenden, auch wenn die sichtbare Domain anders lautet. <strong>Achte daher darauf, keine großen E-Mail-Anbieter versehentlich zu sperren.</strong> resolved_dns_records_hint_html: Die Domain wird zu den folgenden MX-Domains aufgelöst, die für die Annahme von E-Mails zuständig sind. Das Sperren einer MX-Domain sperrt Anmeldungen aller E-Mail-Adressen, die dieselbe MX-Domain verwenden, auch wenn die sichtbare Domain anders lautet. <strong>Achte daher darauf, keine großen E-Mail-Anbieter versehentlich zu sperren.</strong>
resolved_through_html: Durch %{domain} aufgelöst resolved_through_html: Durch %{domain} aufgelöst
search: Suchen
title: Gesperrte E-Mail-Domains title: Gesperrte E-Mail-Domains
email_subscriptions: email_subscriptions:
accounts: accounts:
@ -495,26 +497,39 @@ de:
hint: Bisher wurden keine Konten abonniert. hint: Bisher wurden keine Konten abonniert.
no_lists_yet: Noch keine Listen vorhanden no_lists_yet: Noch keine Listen vorhanden
inactive: Deaktiviert inactive: Deaktiviert
last_email: Letzte E-Mail
lead: Konten, die die Funktion aktiviert haben und abonniert wurden, werden unten angezeigt. lead: Konten, die die Funktion aktiviert haben und abonniert wurden, werden unten angezeigt.
status: Status status: Status
subscribers: Abonnent*innen subscribers: Abonnent*innen
title: Mailingliste title: Mailingliste
additional_footer_texts:
show:
title: Fußzeile
compliance_settings: compliance_settings:
additional_footer_text: additional_footer_text:
action: Verwalten action: Verwalten
hint: Der Text erscheint ausschließlich in der Fußzeile von E-Mails
title: Fußzeile
lead: E-Mail-Newsletter können abhängig vom geltenden Recht als Marketing-E-Mails betrachtet werden.
privacy_policy: privacy_policy:
action: Verwalten action: Verwalten
hint: Die Datenschutzerklärung wird in der Fußzeile jeder E-Mail beigefügt
title: Datenschutzerklärung title: Datenschutzerklärung
title: Einstellungen zur Einhaltung von Vorschriften
danger_zone: danger_zone:
disable_feature: disable_feature:
action: Deaktivieren action: Deaktivieren
hint: Funktion für alle Konten deaktivieren
title: Funktion deaktivieren title: Funktion deaktivieren
erase_all_data: erase_all_data:
action: Daten löschen action: Daten löschen
hint: Löscht dauerhaft alle E-Mails aus allen Mailinglisten
title: Alle Daten löschen title: Alle Daten löschen
title: Gefahrenzone title: Gefahrenzone
disabled_msg: E-Mail-Abonnements wurden erfolgreich deaktiviert.
index: index:
disabled: disabled:
description: Diese Funktion ermöglicht bestimmten Konten, ein Widget zu ihrem Profil hinzuzufügen, damit Gäste ohne Mastodon-Konto deren Beiträge per E-Mail erhalten können.
get_started: Loslegen get_started: Loslegen
lead: Ermögliche Gästen, Beiträge von ausgewählten Konten dieses Servers per E-Mail zu abonnieren. lead: Ermögliche Gästen, Beiträge von ausgewählten Konten dieses Servers per E-Mail zu abonnieren.
title: E-Mail-Newsletter title: E-Mail-Newsletter
@ -533,6 +548,11 @@ de:
show: show:
enable_feature: Funktionen aktivieren enable_feature: Funktionen aktivieren
important_information: Wichtige Informationen important_information: Wichtige Informationen
list:
1_permission_explanation: Wenn die Funktion aktiviert ist, können alle berechtigten Konten ein E-Mail-Formular zu ihrem Profil hinzufügen.
2_feature_explanation: Sobald Gäste ein Profil abonnieren und das Abonnement bestätigen, werden sie E-Mails über neue öffentliche Beiträge des betreffenden Profils erhalten.
3_privacy_policy_warning: Server-Admins werden Zugriff auf persönlich identifizierbare Informationen (E-Mail-Adressen) haben. Daher müssen die Datenschutzerklärung und Nutzungsbedingungen im Vorfeld aktualisiert werden, bevor diese Funktion verwendet werden kann.
4_cost_warning: Abhängig vom Hosting-Provider können Gebühren für den E-Mail-Versand anfallen. Kläre für deinen Server vorher alle Details, da diese Funktion die Anzahl versendeter E-Mails drastisch erhöhen kann.
export_domain_allows: export_domain_allows:
new: new:
title: Erlaubte Domains importieren title: Erlaubte Domains importieren
@ -838,6 +858,7 @@ de:
manage_custom_emojis: Emojis manage_custom_emojis: Emojis
manage_custom_emojis_description: Spezielle Emojis dieses Servers verwalten manage_custom_emojis_description: Spezielle Emojis dieses Servers verwalten
manage_email_subscriptions: E-Mail-Abonnements manage_email_subscriptions: E-Mail-Abonnements
manage_email_subscriptions_description: Konten mit dieser Berechtigung dürfen die Funktion für E-Mail-Newsletter verwenden
manage_federation: Föderation manage_federation: Föderation
manage_federation_description: Domains anderer Mastodon-Server sperren/zulassen und Zustellbarkeit kontrollieren manage_federation_description: Domains anderer Mastodon-Server sperren/zulassen und Zustellbarkeit kontrollieren
manage_invites: Einladungen manage_invites: Einladungen

View File

@ -484,8 +484,10 @@ el:
title: Αποκλεισμός νέου τομέα email title: Αποκλεισμός νέου τομέα email
no_email_domain_block_selected: Δεν άλλαξαν οι αποκλεισμοί τομέα email καθώς δεν επιλέχθηκε κανένας no_email_domain_block_selected: Δεν άλλαξαν οι αποκλεισμοί τομέα email καθώς δεν επιλέχθηκε κανένας
not_permitted: Δεν επιτρέπεται not_permitted: Δεν επιτρέπεται
reset: Επαναφορά
resolved_dns_records_hint_html: Το όνομα τομέα επιλύεται στους ακόλουθους τομείς MX, οι οποίοι είναι τελικά υπεύθυνοι για την αποδοχή των email. Αποκλείοντας έναν τομέα MX θα αποκλείει τις εγγραφές από οποιαδήποτε διεύθυνση email που χρησιμοποιεί τον ίδιο τομέα MX, ακόμη και αν το ορατό όνομα τομέα είναι διαφορετικό. <strong>Προσέξτε να μην αποκλείσετε τους μεγάλους παρόχους ηλεκτρονικού ταχυδρομείου.</strong> resolved_dns_records_hint_html: Το όνομα τομέα επιλύεται στους ακόλουθους τομείς MX, οι οποίοι είναι τελικά υπεύθυνοι για την αποδοχή των email. Αποκλείοντας έναν τομέα MX θα αποκλείει τις εγγραφές από οποιαδήποτε διεύθυνση email που χρησιμοποιεί τον ίδιο τομέα MX, ακόμη και αν το ορατό όνομα τομέα είναι διαφορετικό. <strong>Προσέξτε να μην αποκλείσετε τους μεγάλους παρόχους ηλεκτρονικού ταχυδρομείου.</strong>
resolved_through_html: Επιλύθηκε μέσω %{domain} resolved_through_html: Επιλύθηκε μέσω %{domain}
search: Αναζήτηση
title: Αποκλεισμένοι τομείς email title: Αποκλεισμένοι τομείς email
email_subscriptions: email_subscriptions:
accounts: accounts:

View File

@ -484,8 +484,10 @@ es-AR:
title: Bloquear nuevo dominio de correo electrónico title: Bloquear nuevo dominio de correo electrónico
no_email_domain_block_selected: No se cambiaron bloqueos de dominio de correo electrónico, ya que no se seleccionó ninguno no_email_domain_block_selected: No se cambiaron bloqueos de dominio de correo electrónico, ya que no se seleccionó ninguno
not_permitted: No permitidos not_permitted: No permitidos
reset: Restablecer
resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Tené cuidado de no bloquear los principales proveedores de correo electrónico.</strong> resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Tené cuidado de no bloquear los principales proveedores de correo electrónico.</strong>
resolved_through_html: Resuelto a través de %{domain} resolved_through_html: Resuelto a través de %{domain}
search: Buscar
title: Dominios bloqueados de correo electrónico title: Dominios bloqueados de correo electrónico
email_subscriptions: email_subscriptions:
accounts: accounts:

View File

@ -484,8 +484,10 @@ es-MX:
title: Bloquear nuevo dominio de correo title: Bloquear nuevo dominio de correo
no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado
not_permitted: No permitido not_permitted: No permitido
reset: Restablecer
resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Ten cuidado de no bloquear los principales proveedores de correo electrónico.</strong> resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Ten cuidado de no bloquear los principales proveedores de correo electrónico.</strong>
resolved_through_html: Resuelto a través de %{domain} resolved_through_html: Resuelto a través de %{domain}
search: Buscar
title: Dominios de correo bloqueados title: Dominios de correo bloqueados
email_subscriptions: email_subscriptions:
accounts: accounts:
@ -496,7 +498,7 @@ es-MX:
no_lists_yet: No hay listas todavía no_lists_yet: No hay listas todavía
inactive: Inactiva inactive: Inactiva
last_email: Último correo electrónico last_email: Último correo electrónico
lead: Las cuentas que han habilitado la función y tienen suscriptores se mostrarán a continuación. lead: A continuación se mostrarán las cuentas que hayan activado la función y tengan suscriptores.
status: Estado status: Estado
subscribers: Suscriptores subscribers: Suscriptores
title: Listas de correo title: Listas de correo
@ -506,33 +508,33 @@ es-MX:
compliance_settings: compliance_settings:
additional_footer_text: additional_footer_text:
action: Administrar action: Administrar
hint: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de noticias hint: Texto opcional que aparece únicamente en el pie de página de los correos electrónicos del boletín informativo
title: Texto de pie de página adicional title: Texto de pie de página adicional
lead: Los boletines de correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operas. lead: Los boletines informativos por correo electrónico pueden considerarse correos electrónicos de marketing, dependiendo de las jurisdicciones en las que operes.
privacy_policy: privacy_policy:
action: Administrar action: Administrar
hint: Esta política está enlazada en el pie de cada correo electrónico hint: Esta política aparece en el pie de página de cada correo electrónico
title: Política de privacidad title: Política de privacidad
title: Ajustes de cumplimiento normativo title: Ajustes de cumplimiento normativo
danger_zone: danger_zone:
disable_feature: disable_feature:
action: Desactivar action: Desactivar
hint: Desactivar función para todas las cuentas hint: Desactivar la función para todas las cuentas
title: Desactivar función title: Desactivar función
erase_all_data: erase_all_data:
action: Borrar datos action: Eliminar datos
hint: Borra permanentemente todos los correos electrónicos de todas las listas de correo hint: Elimina de forma permanente todos los correos electrónicos de todas las listas de correo
title: Borrar todos los datos title: Eliminar todos los datos
title: Zona peligrosa title: Zona peligrosa
disabled_msg: Las suscripciones de correo electrónico se han desactivado correctamente. disabled_msg: Las suscripciones por correo electrónico se han desactivado correctamente.
index: index:
disabled: disabled:
cannot_be_enabled: Tu proveedor técnico no ha habilitado esta función para tu servidor. cannot_be_enabled: Tu proveedor técnico no ha habilitado esta función para tu servidor.
description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, permitiendo a los visitantes sin una cuenta de Mastodon recibir sus publicaciones por correo electrónico. description: Esta función permite a las cuentas especificadas añadir un widget a sus perfiles, lo que permite a los visitantes que no tienen una cuenta de Mastodon recibir sus publicaciones por correo electrónico.
get_started: Primeros pasos get_started: Primeros pasos
lead: Permitir a los visitantes recibir publicaciones por correo electrónico de cuentas dedicadas en este servidor. lead: Permitir que los visitantes reciban publicaciones por correo electrónico desde cuentas específicas de este servidor.
title: Boletines de correo electrónico title: Boletines informativos por correo electrónico
purged_msg: Todos los datos de las suscripciones de correo electrónico están siendo borrados. purged_msg: Se están borrando todos los datos de las suscripciones por correo electrónico.
roles: roles:
accounts: Cuentas accounts: Cuentas
edit_role: Editar rol edit_role: Editar rol
@ -545,13 +547,13 @@ es-MX:
title: Roles title: Roles
setups: setups:
show: show:
enable_feature: Activar función enable_feature: Habilitar función
important_information: Información importante important_information: Información importante
list: list:
1_permission_explanation: Cuando esta función está activada, las cuentas con los permisos designados pueden añadir un formulario de recopilación de correo electrónico a sus perfiles. 1_permission_explanation: Cuando esta función está habilitada, las cuentas con los permisos correspondientes pueden añadir un formulario de recopilación de correos electrónicos a sus perfiles.
2_feature_explanation: Cuando los visitantes se registran en la página de perfil de una cuenta y confirman su suscripción, comenzarán a recibir actualizaciones por correo electrónico cuando la cuenta cree nuevas publicaciones públicas. 2_feature_explanation: Cuando los visitantes se suscriban en la página de perfil de una cuenta y confirmen su suscripción, empezarán a recibir notificaciones por correo electrónico cada vez que la cuenta publique nuevas entradas públicas.
3_privacy_policy_warning: Los administradores del servidor tendrán acceso a información de identificación personal (direcciones de correo electrónico). Por lo tanto, la política de privacidad y los Términos del Servicio del servidor deben actualizarse antes de usar esta función. 3_privacy_policy_warning: Los administradores del servidor tendrán acceso a la información de identificación personal (direcciones de correo electrónico) recopilada. Por lo tanto, es necesario actualizar la política de privacidad y los Términos de servicio del servidor antes de utilizar esta función.
4_cost_warning: Los correos electrónicos pueden incurrir en un cargo dependiendo de la configuración del alojamiento. Habla con tu proveedor de alojamiento antes de activarlo, ya que esta característica podría aumentar drásticamente la cantidad de correos electrónicos enviados desde tu servidor. 4_cost_warning: El envío de correos electrónicos puede conllevar un cargo adicional dependiendo de la configuración del alojamiento web. Consúltalo con tu proveedor de alojamiento antes de habilitar esta función, ya que podría aumentar considerablemente el volumen de correos electrónicos enviados desde tu servidor.
export_domain_allows: export_domain_allows:
new: new:
title: Importar dominios permitidos title: Importar dominios permitidos
@ -857,7 +859,7 @@ es-MX:
manage_custom_emojis: Administrar Emojis Personalizados manage_custom_emojis: Administrar Emojis Personalizados
manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor manage_custom_emojis_description: Permite a los usuarios gestionar emojis personalizados en el servidor
manage_email_subscriptions: Gestionar suscripciones por correo electrónico manage_email_subscriptions: Gestionar suscripciones por correo electrónico
manage_email_subscriptions_description: Permite a los usuarios con este permiso habilitar la función del boletín de noticias por correo electrónico para su cuenta manage_email_subscriptions_description: Permitir a los usuarios con este permiso activar la función de boletín informativo por correo electrónico en su cuenta
manage_federation: Administrar Federación manage_federation: Administrar Federación
manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad manage_federation_description: Permite a los usuarios bloquear o permitir la federación con otros dominios, y controlar la entregabilidad
manage_invites: Administrar Invitaciones manage_invites: Administrar Invitaciones

View File

@ -484,8 +484,10 @@ es:
title: Bloquear nuevo dominio de correo title: Bloquear nuevo dominio de correo
no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado no_email_domain_block_selected: No se han cambiado bloqueos de dominio de correo, ya que ninguno ha sido seleccionado
not_permitted: No permitido not_permitted: No permitido
reset: Restablecer
resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Ten cuidado de no bloquear los principales proveedores de correo electrónico.</strong> resolved_dns_records_hint_html: El nombre de dominio resuelve los siguientes dominios MX, los cuales son responsables en última instancia de aceptar el correo electrónico. Bloquear un dominio MX bloqueará los registros de cualquier dirección de correo electrónico que utilice el mismo dominio MX, incluso si el nombre de dominio visible es diferente. <strong>Ten cuidado de no bloquear los principales proveedores de correo electrónico.</strong>
resolved_through_html: Resuelto a través de %{domain} resolved_through_html: Resuelto a través de %{domain}
search: Buscar
title: Dominios de correo bloqueados title: Dominios de correo bloqueados
email_subscriptions: email_subscriptions:
accounts: accounts:

View File

@ -539,6 +539,19 @@ et:
empty: empty:
hint: Kellelgi pole õigust seda oskust kasutada. hint: Kellelgi pole õigust seda oskust kasutada.
no_roles_added: Rolle pole lisatud no_roles_added: Rolle pole lisatud
lead: Järgmiste rollidega kontod saavad selle oskuse oma profiilis sisse lülitada.
manage_roles: Halda rolle
role_name: Rolli nimi
title: Rollid
setups:
show:
enable_feature: Luba oskus
important_information: Oluline info
list:
1_permission_explanation: Kui see funktsioon on sisse lülitatud, saavad vastavate õigustega kontod lisada oma profiilidesse e-posti kogumise vormi.
2_feature_explanation: Kui külastajad registreeruvad konto profiililehel ja kinnitavad tellimuse, hakkavad nad saama e-kirju, kui konto avaldab uusi avalikke postitusi.
3_privacy_policy_warning: Serveri administraatoritel on juurdepääs kogutud isikuandmetele (e-posti aadressidele). Seetõttu tuleb enne selle funktsiooni kasutamist ajakohastada serveri privaatsuspoliitika ja kasutustingimused.
4_cost_warning: Sõltuvalt veebimajutuse seadistustest võib e-kirjade saatmine kaasa tuua lisatasu. Enne selle funktsiooni aktiveerimist konsulteeri oma veebimajutuse pakkujaga, kuna sinu serverist saadetavate e-kirjade arv võib oluliselt suureneda.
export_domain_allows: export_domain_allows:
new: new:
title: Lubatud domeenide import title: Lubatud domeenide import
@ -844,6 +857,7 @@ et:
manage_custom_emojis: Halda isetehtud emotikone manage_custom_emojis: Halda isetehtud emotikone
manage_custom_emojis_description: Lubab kasutajatel hallata serveris isetehtud emotikone manage_custom_emojis_description: Lubab kasutajatel hallata serveris isetehtud emotikone
manage_email_subscriptions: Halda e-posti tellimusi manage_email_subscriptions: Halda e-posti tellimusi
manage_email_subscriptions_description: Luba selle õigusega kasutajatel oma kontol e-posti uudiskirja funktsioon sisse lülitada
manage_federation: Halda födereerumist manage_federation: Halda födereerumist
manage_federation_description: Lubab kasutajail keelata või lubada föderatsioone teiste domeenidega ja hallata ühenduvust manage_federation_description: Lubab kasutajail keelata või lubada föderatsioone teiste domeenidega ja hallata ühenduvust
manage_invites: Halda kutseid manage_invites: Halda kutseid

View File

@ -517,6 +517,71 @@ ga:
resolved_dns_records_hint_html: Réitíonn an t-ainm fearainn chuig na fearainn MX seo a leanas, atá freagrach sa deireadh as glacadh le ríomhphost. Má dhéantar fearann MX a bhlocáil, cuirfear bac ar chlárúcháin ó aon seoladh ríomhphoist a úsáideann an fearann MX céanna, fiú má tá an t-ainm fearainn infheicthe difriúil. <strong>Bí cúramach gan bac a chur ar phríomhsholáthraithe ríomhphoist.</strong> resolved_dns_records_hint_html: Réitíonn an t-ainm fearainn chuig na fearainn MX seo a leanas, atá freagrach sa deireadh as glacadh le ríomhphost. Má dhéantar fearann MX a bhlocáil, cuirfear bac ar chlárúcháin ó aon seoladh ríomhphoist a úsáideann an fearann MX céanna, fiú má tá an t-ainm fearainn infheicthe difriúil. <strong>Bí cúramach gan bac a chur ar phríomhsholáthraithe ríomhphoist.</strong>
resolved_through_html: Réitithe trí %{domain} resolved_through_html: Réitithe trí %{domain}
title: Fearainn ríomhphoist bactha title: Fearainn ríomhphoist bactha
email_subscriptions:
accounts:
account: Cuntas
active: Gníomhach
empty:
hint: Níl aon síntiúsóirí ag aon chuntas go fóill.
no_lists_yet: Gan aon liostaí fós
inactive: Neamhghníomhach
last_email: Ríomhphost deireanach
lead: Taispeánfar thíos cuntais a bhfuil an ghné cumasaithe acu agus a bhfuil síntiúsóirí acu.
status: Stádas
subscribers: Síntiúsóirí
title: Liostaí poist
additional_footer_texts:
show:
title: Téacs breise sa bhuntásc
compliance_settings:
additional_footer_text:
action: Bainistigh
hint: Téacs roghnach a thaispeántar i mbunús ríomhphoist nuachtlitir amháin
title: Téacs breise sa bhuntásc
lead: Féadfar nuachtlitreacha ríomhphoist a mheas mar ríomhphoist mhargaíochta, ag brath ar na dlínsí ina bhfeidhmíonn tú.
privacy_policy:
action: Bainistigh
hint: Tá nasc chuig an mbeartas seo i mbun gach ríomhphoist
title: Polasaí príobháideachta
title: Socruithe comhlíontachta
danger_zone:
disable_feature:
action: Díchumasaigh
hint: Múch an ghné do gach cuntas
title: Díchumasaigh gné
erase_all_data:
action: Scrios sonraí
hint: Scriosann sé gach ríomhphost i ngach liosta seoltaí go buan
title: Scrios na sonraí go léir
title: Crios contúirte
disabled_msg: Tá síntiúis ríomhphoist díchumasaithe go rathúil.
index:
disabled:
cannot_be_enabled: Níl an ghné seo cumasaithe ag do sholáthraí teicniúil do do fhreastalaí.
description: Leis an ngné seo, is féidir le cuntais shonraithe giuirléid a chur lena bpróifílí, rud a chuireann ar chumas cuairteoirí gan cuntas Mastodon a gcuid post a fháil trí ríomhphost.
get_started: Tosaigh
lead: Lig do chuairteoirí poist a fháil trí ríomhphost ó chuntais tiomnaithe ar an bhfreastalaí seo.
title: Nuachtlitreacha ríomhphoist
purged_msg: Tá gach sonraí síntiúis ríomhphoist á scriosadh.
roles:
accounts: Cuntais
edit_role: Cuir ról in eagar
empty:
hint: Níl cead ag aon duine an ghné seo a úsáid.
no_roles_added: Níor cuireadh aon róil leis
lead: Is féidir le cuntais leis na róil seo a leanas an ghné seo a chumasú ar a bpróifílí.
manage_roles: Bainistigh róil
role_name: Ainm an róil
title: Róil
setups:
show:
enable_feature: Cumasaigh gné
important_information: Faisnéis thábhachtach
list:
1_permission_explanation: Nuair a bhíonn an ghné seo cumasaithe, is féidir le cuntais a bhfuil na ceadanna ainmnithe acu foirm bhailiúcháin ríomhphoist a chur lena bpróifílí.
2_feature_explanation: Nuair a chláraíonn cuairteoirí ar leathanach próifíle cuntais agus a dheimhníonn siad a síntiús, tosóidh siad ag fáil nuashonruithe ríomhphoist nuair a chruthaíonn an cuntas poist phoiblí nua.
3_privacy_policy_warning: Beidh rochtain ag riarthóirí freastalaí ar PII (seoltaí ríomhphoist) a bhailítear. Dá bhrí sin, ní mór an polasaí príobháideachta agus na Téarmaí Seirbhíse don fhreastalaí a nuashonrú sula n-úsáidtear an ghné seo.
4_cost_warning: Dfhéadfadh táille a bheith i gceist le ríomhphoist ag brath ar shocrú an óstála. Pléigh le do sholáthraí óstála sula gcumasaíonn tú é, mar dfhéadfadh an ghné seo líon na ríomhphoist a sheoltar ó do fhreastalaí a mhéadú go mór.
export_domain_allows: export_domain_allows:
new: new:
title: Ceadaíonn fearann iomportála title: Ceadaíonn fearann iomportála
@ -840,6 +905,7 @@ ga:
manage_custom_emojis: Bainistigh Emojis Saincheaptha manage_custom_emojis: Bainistigh Emojis Saincheaptha
manage_custom_emojis_description: Ligeann sé d'úsáideoirí emojis saincheaptha a bhainistiú ar an bhfreastalaí manage_custom_emojis_description: Ligeann sé d'úsáideoirí emojis saincheaptha a bhainistiú ar an bhfreastalaí
manage_email_subscriptions: Bainistigh Síntiúis Ríomhphoist manage_email_subscriptions: Bainistigh Síntiúis Ríomhphoist
manage_email_subscriptions_description: Lig dúsáideoirí a bhfuil an cead seo acu gné an nuachtlitir ríomhphoist a chumasú dá gcuntas
manage_federation: Cónaidhm a bhainistiú manage_federation: Cónaidhm a bhainistiú
manage_federation_description: Ligeann sé dúsáideoirí cónaidhm a bhlocáil nó a cheadú le fearainn eile, agus inseachadacht a rialú manage_federation_description: Ligeann sé dúsáideoirí cónaidhm a bhlocáil nó a cheadú le fearainn eile, agus inseachadacht a rialú
manage_invites: Bainistigh Cuirí manage_invites: Bainistigh Cuirí

View File

@ -484,8 +484,10 @@ gl:
title: Bloquear novo dominio de correo title: Bloquear novo dominio de correo
no_email_domain_block_selected: Non se cambiou ningún bloqueo de dominio porque non había ningún seleccionado no_email_domain_block_selected: Non se cambiou ningún bloqueo de dominio porque non había ningún seleccionado
not_permitted: Non permitido not_permitted: Non permitido
reset: Restabelecer
resolved_dns_records_hint_html: O nome de dominio corresponde cos seguintes dominios MX, que son os responsables últimos de aceptar o correo. Ao bloquear un dominio MX bloquerás a creación de contas para todo enderezo de correo que use o mesmo dominio MX, incluso se o nome de dominio visible é diferente. <strong>Ten coidado xa que podes bloquear os principais provedores de correo.</strong> resolved_dns_records_hint_html: O nome de dominio corresponde cos seguintes dominios MX, que son os responsables últimos de aceptar o correo. Ao bloquear un dominio MX bloquerás a creación de contas para todo enderezo de correo que use o mesmo dominio MX, incluso se o nome de dominio visible é diferente. <strong>Ten coidado xa que podes bloquear os principais provedores de correo.</strong>
resolved_through_html: Resolto a través de %{domain} resolved_through_html: Resolto a través de %{domain}
search: Buscar
title: Dominios de correo bloqueados title: Dominios de correo bloqueados
email_subscriptions: email_subscriptions:
accounts: accounts:
@ -551,6 +553,7 @@ gl:
1_permission_explanation: Cando se activa esta ferramenta as contas cos permisos concedidos poden engadir un formulario no seu perfil para recoller correos. 1_permission_explanation: Cando se activa esta ferramenta as contas cos permisos concedidos poden engadir un formulario no seu perfil para recoller correos.
2_feature_explanation: Cando unha persoa visita se apunta na páxina do perfil e confirma a súa subscrición, comezará a recibir actualizacións por correo cando a conta publique novas publicacións públicas. 2_feature_explanation: Cando unha persoa visita se apunta na páxina do perfil e confirma a súa subscrición, comezará a recibir actualizacións por correo cando a conta publique novas publicacións públicas.
3_privacy_policy_warning: A administración do servidor vai ter acceso aos PII (enderezos de correo) recollidos. Así, a directiva de privacidade e os termos do servizo do servidor deben actualizarse antes de activar esta ferramenta. 3_privacy_policy_warning: A administración do servidor vai ter acceso aos PII (enderezos de correo) recollidos. Así, a directiva de privacidade e os termos do servizo do servidor deben actualizarse antes de activar esta ferramenta.
4_cost_warning: Os correos poderían supoñer costes adicionais do servidor. Consulta co teu provedor de hospedaxe antes de activalos, xa que esta ferramenta podería facer aumentar drásticamente o número de correos que envía o teu servidor.
export_domain_allows: export_domain_allows:
new: new:
title: Importar dominios permitidos title: Importar dominios permitidos
@ -856,6 +859,7 @@ gl:
manage_custom_emojis: Xestionar Emojis personalizados manage_custom_emojis: Xestionar Emojis personalizados
manage_custom_emojis_description: Permite xestionar os emojis personalizados do servidor manage_custom_emojis_description: Permite xestionar os emojis personalizados do servidor
manage_email_subscriptions: Xestionar subscripcións por correo manage_email_subscriptions: Xestionar subscripcións por correo
manage_email_subscriptions_description: Permitir ás usuarias con este permiso activar para a súa conta a ferramenta do boletín por correo
manage_federation: Xestionar a federación manage_federation: Xestionar a federación
manage_federation_description: Permite bloquear ou permitir a federación con outros dominios, e controlar as entregas manage_federation_description: Permite bloquear ou permitir a federación con outros dominios, e controlar as entregas
manage_invites: Xestionar Convites manage_invites: Xestionar Convites

View File

@ -496,6 +496,7 @@ hu:
no_lists_yet: Még nincsenek listák no_lists_yet: Még nincsenek listák
inactive: Inaktív inactive: Inaktív
last_email: Legutóbbi e-mail last_email: Legutóbbi e-mail
lead: A fiókok, melyek bekapcsolták a funkciót, és vannak feliratkozóik, itt fognak megjelenni alább.
status: Állapot status: Állapot
subscribers: Feliratkozók subscribers: Feliratkozók
title: Levelezőlisták title: Levelezőlisták
@ -527,6 +528,7 @@ hu:
index: index:
disabled: disabled:
cannot_be_enabled: A műszaki szolgáltató nem kapcsolta be ezt a funkciót a kiszolgálód számára. cannot_be_enabled: A műszaki szolgáltató nem kapcsolta be ezt a funkciót a kiszolgálód számára.
description: A funkció lehetővé teszi, hogy a megadott fiókok hozzáadjanak egy kisalkalmazást a profiljukhoz, mellyel a Mastodon-fiók nélküli látogatók e-mailben megkaphatják a bejegyzéseiket.
get_started: Első lépések get_started: Első lépések
title: E-mailes hírlevelek title: E-mailes hírlevelek
purged_msg: Az összes e-mail-feliratkozási adat törlése folyamatban van. purged_msg: Az összes e-mail-feliratkozási adat törlése folyamatban van.

View File

@ -484,8 +484,10 @@ is:
title: Útiloka nýtt tölvupóstlén title: Útiloka nýtt tölvupóstlén
no_email_domain_block_selected: Engum útilokunum tölvupóstléna var breytt þar sem ekkert var valið no_email_domain_block_selected: Engum útilokunum tölvupóstléna var breytt þar sem ekkert var valið
not_permitted: Ekki leyft not_permitted: Ekki leyft
reset: Endurstilla
resolved_dns_records_hint_html: Heiti lénsins vísar til eftirfarandi MX-léna, sem bera endanlega ábyrgð á að tölvupóstur skili sér. Útilokun á MX-léni mun koma í veg fyrir nýskráningar með hverju því tölvupóstfangi sem notar sama MX-lén, jafnvel þótt sýnilega lénsheitið sé frábrugðið. <strong>Farðu varlega svo þú útilokir ekki algengar tölvupóstþjónustur.</strong> resolved_dns_records_hint_html: Heiti lénsins vísar til eftirfarandi MX-léna, sem bera endanlega ábyrgð á að tölvupóstur skili sér. Útilokun á MX-léni mun koma í veg fyrir nýskráningar með hverju því tölvupóstfangi sem notar sama MX-lén, jafnvel þótt sýnilega lénsheitið sé frábrugðið. <strong>Farðu varlega svo þú útilokir ekki algengar tölvupóstþjónustur.</strong>
resolved_through_html: Leyst í gegnum %{domain} resolved_through_html: Leyst í gegnum %{domain}
search: Leita
title: Útilokuð tölvupóstlén title: Útilokuð tölvupóstlén
email_subscriptions: email_subscriptions:
accounts: accounts:

View File

@ -486,6 +486,7 @@ it:
not_permitted: Non consentito not_permitted: Non consentito
resolved_dns_records_hint_html: Il nome di dominio si risolve nei seguenti domini MX, che sono in ultima analisi responsabili dell'accettazione delle e-mail. Il blocco di un dominio MX bloccherà le registrazioni da qualsiasi indirizzo e-mail che utilizzi lo stesso dominio MX, anche se il nome di dominio visibile è diverso. <strong>Fai attenzione a non bloccare i principali provider di posta elettronica.</strong> resolved_dns_records_hint_html: Il nome di dominio si risolve nei seguenti domini MX, che sono in ultima analisi responsabili dell'accettazione delle e-mail. Il blocco di un dominio MX bloccherà le registrazioni da qualsiasi indirizzo e-mail che utilizzi lo stesso dominio MX, anche se il nome di dominio visibile è diverso. <strong>Fai attenzione a non bloccare i principali provider di posta elettronica.</strong>
resolved_through_html: Risolto attraverso %{domain} resolved_through_html: Risolto attraverso %{domain}
search: Cerca
title: Domini e-mail bloccati title: Domini e-mail bloccati
email_subscriptions: email_subscriptions:
accounts: accounts:
@ -521,6 +522,7 @@ it:
title: Disabilita la funzionalità title: Disabilita la funzionalità
erase_all_data: erase_all_data:
action: Cancella i dati action: Cancella i dati
hint: Elimina in modo permanente tutti gli indirizzi email in tutte le mailing list
title: Cancella tutti i dati title: Cancella tutti i dati
title: Zona pericolosa title: Zona pericolosa
disabled_msg: Le iscrizioni via email sono state disabilitate con successo. disabled_msg: Le iscrizioni via email sono state disabilitate con successo.

View File

@ -1005,6 +1005,7 @@ kab:
development: Taneflit development: Taneflit
edit_profile: Ẓreg amaɣnu edit_profile: Ẓreg amaɣnu
export: Sifeḍ export: Sifeḍ
featured_tags: Ihacṭagen ufrinen
import: Kter import: Kter
import_and_export: Taktert d usifeḍ import_and_export: Taktert d usifeḍ
migrate: Tunigin n umiḍan migrate: Tunigin n umiḍan

View File

@ -92,6 +92,7 @@ de:
closed_registrations_message: Wird angezeigt, wenn Registrierungen deaktiviert sind closed_registrations_message: Wird angezeigt, wenn Registrierungen deaktiviert sind
content_cache_retention_period: Sämtliche Beiträge von anderen Servern (einschließlich geteilte Beiträge und Antworten) werden, unabhängig von der Interaktion der lokalen Nutzer*innen mit diesen Beiträgen, nach der festgelegten Anzahl von Tagen gelöscht. Davon sind auch Beiträge betroffen, die von lokalen Nutzer*innen favorisiert oder als Lesezeichen gespeichert wurden. Private Erwähnungen zwischen Nutzer*innen von verschiedenen Servern werden ebenfalls verloren gehen und können nicht wiederhergestellt werden. Diese Option richtet sich ausschließlich an Server mit speziellen Zwecken und wird die allgemeine Nutzungserfahrung beeinträchtigen, wenn sie für den allgemeinen Gebrauch aktiviert ist. content_cache_retention_period: Sämtliche Beiträge von anderen Servern (einschließlich geteilte Beiträge und Antworten) werden, unabhängig von der Interaktion der lokalen Nutzer*innen mit diesen Beiträgen, nach der festgelegten Anzahl von Tagen gelöscht. Davon sind auch Beiträge betroffen, die von lokalen Nutzer*innen favorisiert oder als Lesezeichen gespeichert wurden. Private Erwähnungen zwischen Nutzer*innen von verschiedenen Servern werden ebenfalls verloren gehen und können nicht wiederhergestellt werden. Diese Option richtet sich ausschließlich an Server mit speziellen Zwecken und wird die allgemeine Nutzungserfahrung beeinträchtigen, wenn sie für den allgemeinen Gebrauch aktiviert ist.
custom_css: Du kannst eigene Stylesheets für das Webinterface von Mastodon verwenden. custom_css: Du kannst eigene Stylesheets für das Webinterface von Mastodon verwenden.
email_footer_text: Der Text erscheint ausschließlich in der Fußzeile von E-Mails.
favicon: WebP, PNG, GIF oder JPG. Überschreibt das Standard-Mastodon-Favicon mit einem eigenen Favicon. favicon: WebP, PNG, GIF oder JPG. Überschreibt das Standard-Mastodon-Favicon mit einem eigenen Favicon.
landing_page: Legt fest, welchen Bereich (nicht angemeldete) Besucher*innen sehen, wenn sie deinen Server besuchen. Für „Trends“ müssen die Trends in den Entdecken-Einstellungen aktiviert sein. Für „Lokaler Feed“ muss „Zugriff auf Live-Feeds, die lokale Beiträge beinhalten“ in den Entdecken-Einstellungen auf „Alle“ gesetzt werden. landing_page: Legt fest, welchen Bereich (nicht angemeldete) Besucher*innen sehen, wenn sie deinen Server besuchen. Für „Trends“ müssen die Trends in den Entdecken-Einstellungen aktiviert sein. Für „Lokaler Feed“ muss „Zugriff auf Live-Feeds, die lokale Beiträge beinhalten“ in den Entdecken-Einstellungen auf „Alle“ gesetzt werden.
mascot: Überschreibt die Abbildung im erweiterten Webinterface. mascot: Überschreibt die Abbildung im erweiterten Webinterface.
@ -294,6 +295,7 @@ de:
closed_registrations_message: Nachricht, falls Registrierungen deaktiviert sind closed_registrations_message: Nachricht, falls Registrierungen deaktiviert sind
content_cache_retention_period: Aufbewahrungsfrist für externe Inhalte content_cache_retention_period: Aufbewahrungsfrist für externe Inhalte
custom_css: Eigenes CSS custom_css: Eigenes CSS
email_footer_text: Fußzeile
favicon: Favicon favicon: Favicon
landing_page: Landingpage für Gäste landing_page: Landingpage für Gäste
local_live_feed_access: Zugriff auf Live-Feeds, die lokale Beiträge beinhalten local_live_feed_access: Zugriff auf Live-Feeds, die lokale Beiträge beinhalten
@ -322,6 +324,9 @@ de:
trendable_by_default: Trends ohne vorherige Überprüfung erlauben trendable_by_default: Trends ohne vorherige Überprüfung erlauben
trends: Trends aktivieren trends: Trends aktivieren
wrapstodon: Wrapstodon aktivieren wrapstodon: Wrapstodon aktivieren
form_email_subscriptions_confirmation:
agreement_email_volume: Ich verstehe, dass das Aktivieren dieser Funktion die Anzahl versendeter E-Mails drastisch erhöhen kann. Ich übernehme die Verantwortung für mögliche Zusatzkosten.
agreement_privacy_and_terms: Datenschutzerklärung und Nutzungsbedingungen wurden im Vorfeld aktualisiert.
interactions: interactions:
must_be_follower: Benachrichtigungen von Profilen, die mir nicht folgen, ausblenden must_be_follower: Benachrichtigungen von Profilen, die mir nicht folgen, ausblenden
must_be_following: Benachrichtigungen von Profilen, denen ich nicht folge, ausblenden must_be_following: Benachrichtigungen von Profilen, denen ich nicht folge, ausblenden

View File

@ -156,7 +156,7 @@ el:
jurisdiction: Ανέφερε τη χώρα όπου ζει αυτός που πληρώνει τους λογαριασμούς. Εάν πρόκειται για εταιρεία ή άλλη οντότητα, ανέφερε τη χώρα όπου υφίσταται, και την πόλη, περιοχή, έδαφος ή πολιτεία ανάλογα με την περίπτωση. jurisdiction: Ανέφερε τη χώρα όπου ζει αυτός που πληρώνει τους λογαριασμούς. Εάν πρόκειται για εταιρεία ή άλλη οντότητα, ανέφερε τη χώρα όπου υφίσταται, και την πόλη, περιοχή, έδαφος ή πολιτεία ανάλογα με την περίπτωση.
min_age: Δεν πρέπει να είναι κάτω από την ελάχιστη ηλικία που απαιτείται από τους νόμους της δικαιοδοσίας σας. min_age: Δεν πρέπει να είναι κάτω από την ελάχιστη ηλικία που απαιτείται από τους νόμους της δικαιοδοσίας σας.
user: user:
chosen_languages: Όταν ενεργοποιηθεί, μόνο αναρτήσεις σε επιλεγμένες γλώσσες θα εμφανίζονται στις δημόσιες ροές. Αυτή η ρύθμιση δεν επηρεάζει την Αρχική ροή και τις λίστες σας. chosen_languages: Όταν επιλέξετε, στις δημόσιες ροές θα εμφανίζονται αναρτήσεις μόνο από τις επιλεγμένες γλώσσες. Αυτή η ρύθμιση δεν επηρεάζει την Αρχική ροή και τις λίστες σας.
date_of_birth: date_of_birth:
one: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε. one: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε.
other: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε. other: Πρέπει να βεβαιωθούμε ότι είσαι τουλάχιστον %{count} για να χρησιμοποιήσεις το %{domain}. Δε θα το αποθηκεύσουμε.

View File

@ -92,7 +92,7 @@ es-MX:
closed_registrations_message: Mostrado cuando los registros están cerrados closed_registrations_message: Mostrado cuando los registros están cerrados
content_cache_retention_period: Todas las publicaciones de otros servidores (incluyendo impuestos y respuestas) serán borrados después del número de días especificado, sin tener en cuenta cualquier interacción del usuario local con esas publicaciones. Esto incluye los mensajes que un usuario local haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán y será imposible restaurarlas. El uso de esta configuración está pensado para instancias de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general. content_cache_retention_period: Todas las publicaciones de otros servidores (incluyendo impuestos y respuestas) serán borrados después del número de días especificado, sin tener en cuenta cualquier interacción del usuario local con esas publicaciones. Esto incluye los mensajes que un usuario local haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán y será imposible restaurarlas. El uso de esta configuración está pensado para instancias de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general.
custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon. custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon.
email_footer_text: Texto opcional que aparece únicamente en el pie de los correos electrónicos del boletín de correo electrónico. email_footer_text: Texto opcional que aparece únicamente en el pie de página de los correos electrónicos del boletín informativo.
favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado. favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado.
landing_page: Selecciona qué página ven los nuevos visitantes cuando llegan por primera vez a tu servidor. Si seleccionas "Tendencias", entonces las tendencias deben estar habilitadas en la Configuración de Descubrimiento. Si selecciona "Cronología local", entonces "Acceso a las cronologías que destacan publicaciones locales" debe configurarse a "Todos" en la Configuración de Descubrimiento. landing_page: Selecciona qué página ven los nuevos visitantes cuando llegan por primera vez a tu servidor. Si seleccionas "Tendencias", entonces las tendencias deben estar habilitadas en la Configuración de Descubrimiento. Si selecciona "Cronología local", entonces "Acceso a las cronologías que destacan publicaciones locales" debe configurarse a "Todos" en la Configuración de Descubrimiento.
mascot: Reemplaza la ilustración en la interfaz web avanzada. mascot: Reemplaza la ilustración en la interfaz web avanzada.
@ -325,8 +325,8 @@ es-MX:
trends: Habilitar tendencias trends: Habilitar tendencias
wrapstodon: Habilitar Wrapstodon wrapstodon: Habilitar Wrapstodon
form_email_subscriptions_confirmation: form_email_subscriptions_confirmation:
agreement_email_volume: Entiendo que activar esta característica puede aumentar significativamente el volumen de correos electrónicos enviados desde el servidor, y que soy el único responsable de cualquier coste incurrido. agreement_email_volume: Entiendo que al habilitar esta función puede aumentar considerablemente el volumen de correos electrónicos enviados desde el servidor y que soy el único responsable de los gastos en que se incurra.
agreement_privacy_and_terms: He actualizado la Política de Privacidad y los Términos del Servicio. agreement_privacy_and_terms: He actualizado la Política de privacidad y los Términos de servicio.
interactions: interactions:
must_be_follower: Bloquear notificaciones de personas que no te siguen must_be_follower: Bloquear notificaciones de personas que no te siguen
must_be_following: Bloquear notificaciones de personas que no sigues must_be_following: Bloquear notificaciones de personas que no sigues

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