Merge commit '64629eadb71afab79a741b016dc56a8bdf1d46f2' into glitch-soc/merge-upstream

This commit is contained in:
Claire
2026-03-10 18:04:32 +01:00
57 changed files with 755 additions and 253 deletions

View File

@@ -50,6 +50,8 @@ You can contribute in the following ways:
Please review the org-level [contribution guidelines] for high-level acceptance Please review the org-level [contribution guidelines] for high-level acceptance
criteria guidance and the [DEVELOPMENT] guide for environment-specific details. criteria guidance and the [DEVELOPMENT] guide for environment-specific details.
You should also read the project's [AI Contribution Policy] to understand how we approach
AI-assisted contributions.
## API Changes and Additions ## API Changes and Additions
@@ -80,7 +82,7 @@ reviewed and merged into the codebase.
Our time is limited and PRs making large, unsolicited changes are unlikely to Our time is limited and PRs making large, unsolicited changes are unlikely to
get a response. Changes which link to an existing confirmed issue, or which come get a response. Changes which link to an existing confirmed issue, or which come
from a "help wanted" issue or other request are more likely to be reviewed. from a "help wanted" issue or other request, are more likely to be reviewed.
The smaller and more narrowly focused the changes in a PR are, the easier they The smaller and more narrowly focused the changes in a PR are, the easier they
are to review and potentially merge. If the change only makes sense in some are to review and potentially merge. If the change only makes sense in some
@@ -130,3 +132,4 @@ and API docs. Improvements are made via PRs to the [documentation repository].
[keepachangelog]: https://keepachangelog.com/en/1.0.0/ [keepachangelog]: https://keepachangelog.com/en/1.0.0/
[Mastodon documentation]: https://docs.joinmastodon.org [Mastodon documentation]: https://docs.joinmastodon.org
[SECURITY]: SECURITY.md [SECURITY]: SECURITY.md
[AI Contribution Policy]: https://github.com/mastodon/.github/blob/main/AI_POLICY.md

View File

@@ -39,18 +39,57 @@ const findLink = (rel: string, data: unknown): JRDLink | undefined => {
} }
}; };
const findTemplateLink = (data: unknown) => const intentParams = (intent: string) => {
findLink('http://ostatus.org/schema/1.0/subscribe', data)?.template; switch (intent) {
case 'follow':
return ['https://w3id.org/fep/3b86/Follow', 'object'] as [string, string];
case 'reblog':
return ['https://w3id.org/fep/3b86/Announce', 'object'] as [
string,
string,
];
case 'favourite':
return ['https://w3id.org/fep/3b86/Like', 'object'] as [string, string];
case 'vote':
case 'reply':
return ['https://w3id.org/fep/3b86/Object', 'object'] as [string, string];
default:
return null;
}
};
const findTemplateLink = (data: unknown, intent: string) => {
const [needle, param] = intentParams(intent) ?? [
'http://ostatus.org/schema/1.0/subscribe',
'uri',
];
const match = findLink(needle, data);
if (match) {
return [match.template, param] as [string, string];
}
const fallback = findLink('http://ostatus.org/schema/1.0/subscribe', data);
if (fallback) {
return [fallback.template, 'uri'] as [string, string];
}
return [null, null];
};
const fetchInteractionURLSuccess = ( const fetchInteractionURLSuccess = (
uri_or_domain: string, uri_or_domain: string,
template: string, template: string,
param: string,
) => { ) => {
window.parent.postMessage( window.parent.postMessage(
{ {
type: 'fetchInteractionURL-success', type: 'fetchInteractionURL-success',
uri_or_domain, uri_or_domain,
template, template,
param,
}, },
window.origin, window.origin,
); );
@@ -74,7 +113,7 @@ const isValidDomain = (value: unknown) => {
}; };
// Attempt to find a remote interaction URL from a domain // Attempt to find a remote interaction URL from a domain
const fromDomain = (domain: string) => { const fromDomain = (domain: string, intent: string) => {
const fallbackTemplate = `https://${domain}/authorize_interaction?uri={uri}`; const fallbackTemplate = `https://${domain}/authorize_interaction?uri={uri}`;
axios axios
@@ -82,17 +121,21 @@ const fromDomain = (domain: string) => {
params: { resource: `https://${domain}` }, params: { resource: `https://${domain}` },
}) })
.then(({ data }) => { .then(({ data }) => {
const template = findTemplateLink(data); const [template, param] = findTemplateLink(data, intent);
fetchInteractionURLSuccess(domain, template ?? fallbackTemplate); fetchInteractionURLSuccess(
domain,
template ?? fallbackTemplate,
param ?? 'uri',
);
return; return;
}) })
.catch(() => { .catch(() => {
fetchInteractionURLSuccess(domain, fallbackTemplate); fetchInteractionURLSuccess(domain, fallbackTemplate, 'uri');
}); });
}; };
// Attempt to find a remote interaction URL from an arbitrary URL // Attempt to find a remote interaction URL from an arbitrary URL
const fromURL = (url: string) => { const fromURL = (url: string, intent: string) => {
const domain = new URL(url).host; const domain = new URL(url).host;
const fallbackTemplate = `https://${domain}/authorize_interaction?uri={uri}`; const fallbackTemplate = `https://${domain}/authorize_interaction?uri={uri}`;
@@ -101,17 +144,21 @@ const fromURL = (url: string) => {
params: { resource: url }, params: { resource: url },
}) })
.then(({ data }) => { .then(({ data }) => {
const template = findTemplateLink(data); const [template, param] = findTemplateLink(data, intent);
fetchInteractionURLSuccess(url, template ?? fallbackTemplate); fetchInteractionURLSuccess(
url,
template ?? fallbackTemplate,
param ?? 'uri',
);
return; return;
}) })
.catch(() => { .catch(() => {
fromDomain(domain); fromDomain(domain, intent);
}); });
}; };
// Attempt to find a remote interaction URL from a `user@domain` string // Attempt to find a remote interaction URL from a `user@domain` string
const fromAcct = (acct: string) => { const fromAcct = (acct: string, intent: string) => {
acct = acct.replace(/^@/, ''); acct = acct.replace(/^@/, '');
const segments = acct.split('@'); const segments = acct.split('@');
@@ -134,25 +181,29 @@ const fromAcct = (acct: string) => {
params: { resource: `acct:${acct}` }, params: { resource: `acct:${acct}` },
}) })
.then(({ data }) => { .then(({ data }) => {
const template = findTemplateLink(data); const [template, param] = findTemplateLink(data, intent);
fetchInteractionURLSuccess(acct, template ?? fallbackTemplate); fetchInteractionURLSuccess(
acct,
template ?? fallbackTemplate,
param ?? 'uri',
);
return; return;
}) })
.catch(() => { .catch(() => {
// TODO: handle host-meta? // TODO: handle host-meta?
fromDomain(domain); fromDomain(domain, intent);
}); });
}; };
const fetchInteractionURL = (uri_or_domain: string) => { const fetchInteractionURL = (uri_or_domain: string, intent: string) => {
if (uri_or_domain === '') { if (uri_or_domain === '') {
fetchInteractionURLFailure(); fetchInteractionURLFailure();
} else if (/^https?:\/\//.test(uri_or_domain)) { } else if (/^https?:\/\//.test(uri_or_domain)) {
fromURL(uri_or_domain); fromURL(uri_or_domain, intent);
} else if (uri_or_domain.includes('@')) { } else if (uri_or_domain.includes('@')) {
fromAcct(uri_or_domain); fromAcct(uri_or_domain, intent);
} else { } else {
fromDomain(uri_or_domain); fromDomain(uri_or_domain, intent);
} }
}; };
@@ -172,8 +223,10 @@ window.addEventListener('message', (event: MessageEvent<unknown>) => {
'type' in event.data && 'type' in event.data &&
event.data.type === 'fetchInteractionURL' && event.data.type === 'fetchInteractionURL' &&
'uri_or_domain' in event.data && 'uri_or_domain' in event.data &&
typeof event.data.uri_or_domain === 'string' typeof event.data.uri_or_domain === 'string' &&
'intent' in event.data &&
typeof event.data.intent === 'string'
) { ) {
fetchInteractionURL(event.data.uri_or_domain); fetchInteractionURL(event.data.uri_or_domain, event.data.intent);
} }
}); });

View File

@@ -0,0 +1,80 @@
import { IntlProvider } from 'react-intl';
import { render, screen } from '@testing-library/react';
import { ShortNumber } from '../short_number';
function renderShortNumber(value: number) {
return render(
<IntlProvider locale='en'>
<ShortNumber value={value} />
</IntlProvider>,
);
}
describe('ShortNumber Component', () => {
it('does not abbreviate numbers under 1000', () => {
renderShortNumber(999);
expect(screen.getByText('999')).toBeDefined();
});
it('formats thousands correctly for 1000', () => {
renderShortNumber(1000);
expect(screen.getByText('1K')).toBeDefined();
});
it('truncates decimals for 1051', () => {
renderShortNumber(1051);
expect(screen.getByText('1K')).toBeDefined();
});
it('truncates decimals for 2999', () => {
renderShortNumber(2999);
expect(screen.getByText('2.9K')).toBeDefined();
});
it('truncates decimals for 9999', () => {
renderShortNumber(9999);
expect(screen.getByText('9.9K')).toBeDefined();
});
it('truncates decimals for 10501', () => {
renderShortNumber(10501);
expect(screen.getByText('10K')).toBeDefined();
});
it('truncates decimals for 11000', () => {
renderShortNumber(11000);
expect(screen.getByText('11K')).toBeDefined();
});
it('truncates decimals for 99999', () => {
renderShortNumber(99999);
expect(screen.getByText('99K')).toBeDefined();
});
it('truncates decimals for 100501', () => {
renderShortNumber(100501);
expect(screen.getByText('100K')).toBeDefined();
});
it('truncates decimals for 101000', () => {
renderShortNumber(101000);
expect(screen.getByText('101K')).toBeDefined();
});
it('truncates decimals for 999999', () => {
renderShortNumber(999999);
expect(screen.getByText('999K')).toBeDefined();
});
it('truncates decimals for 2999999', () => {
renderShortNumber(2999999);
expect(screen.getByText('2.9M')).toBeDefined();
});
it('truncates decimals for 9999999', () => {
renderShortNumber(9999999);
expect(screen.getByText('9.9M')).toBeDefined();
});
});

View File

@@ -92,6 +92,7 @@ export const FollowButton: React.FC<{
openModal({ openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'follow',
accountId: accountId, accountId: accountId,
url: account?.url, url: account?.url,
}, },

View File

@@ -110,6 +110,7 @@ export const Poll: React.FC<PollProps> = ({ pollId, disabled, status }) => {
openModal({ openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'vote',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },

View File

@@ -17,6 +17,9 @@ import { isDevelopment } from 'mastodon/utils/environment';
interface MastodonLocationState { interface MastodonLocationState {
fromMastodon?: boolean; fromMastodon?: boolean;
mastodonModalKey?: string; mastodonModalKey?: string;
// Prevent the rightmost column in advanced UI from scrolling
// into view on location changes
preventMultiColumnAutoScroll?: string;
} }
export type LocationState = MastodonLocationState | null | undefined; export type LocationState = MastodonLocationState | null | undefined;

View File

@@ -51,6 +51,7 @@ const ShortNumberCounter: React.FC<ShortNumberCounterProps> = ({ value }) => {
<FormattedNumber <FormattedNumber
value={rawNumber ?? 0} value={rawNumber ?? 0}
maximumFractionDigits={maxFractionDigits} maximumFractionDigits={maxFractionDigits}
roundingMode='trunc'
/> />
); );

View File

@@ -47,6 +47,7 @@ const StandaloneBoostButton: FC<ReblogButtonProps> = ({ status, counters }) => {
openModal({ openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'reblog',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },
@@ -120,6 +121,7 @@ const BoostOrQuoteMenu: FC<ReblogButtonProps> = ({ status, counters }) => {
openModal({ openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'reblog',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },

View File

@@ -124,7 +124,7 @@ class StatusActionBar extends ImmutablePureComponent {
if (signedIn) { if (signedIn) {
this.props.onReply(this.props.status); this.props.onReply(this.props.status);
} else { } else {
this.props.onInteractionModal(this.props.status); this.props.onInteractionModal(this.props.status, 'reply');
} }
}; };
@@ -146,7 +146,7 @@ class StatusActionBar extends ImmutablePureComponent {
if (signedIn) { if (signedIn) {
this.props.onFavourite(this.props.status); this.props.onFavourite(this.props.status);
} else { } else {
this.props.onInteractionModal(this.props.status); this.props.onInteractionModal(this.props.status, 'favourite');
} }
}; };
@@ -382,7 +382,7 @@ class StatusActionBar extends ImmutablePureComponent {
const bookmarkTitle = intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark); const bookmarkTitle = intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark);
const favouriteTitle = intl.formatMessage(status.get('favourited') ? messages.removeFavourite : messages.favourite); const favouriteTitle = intl.formatMessage(status.get('favourited') ? messages.removeFavourite : messages.favourite);
const isReply = status.get('in_reply_to_account_id') === status.getIn(['account', 'id']); const isReply = status.get('in_reply_to_account_id') === status.getIn(['account', 'id']);
const shouldShowQuoteRemovalHint = isQuotingMe && contextType === 'notifications'; const shouldShowQuoteRemovalHint = isQuotingMe && contextType === 'notifications';
return ( return (

View File

@@ -77,7 +77,7 @@ const mapDispatchToProps = (dispatch, { contextType }) => ({
onReblog (status, e) { onReblog (status, e) {
dispatch(toggleReblog(status.get('id'), e.shiftKey)); dispatch(toggleReblog(status.get('id'), e.shiftKey));
}, },
onQuote (status) { onQuote (status) {
dispatch(quoteComposeById(status.get('id'))); dispatch(quoteComposeById(status.get('id')));
}, },
@@ -231,10 +231,11 @@ const mapDispatchToProps = (dispatch, { contextType }) => ({
dispatch(deployPictureInPicture({statusId: status.get('id'), accountId: status.getIn(['account', 'id']), playerType: type, props: mediaProps})); dispatch(deployPictureInPicture({statusId: status.get('id'), accountId: status.getIn(['account', 'id']), playerType: type, props: mediaProps}));
}, },
onInteractionModal (status) { onInteractionModal (status, intent) {
dispatch(openModal({ dispatch(openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent,
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },

View File

@@ -103,7 +103,11 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
); );
} }
if (featuredTags.isEmpty() && featuredAccountIds.isEmpty()) { if (
featuredTags.isEmpty() &&
featuredAccountIds.isEmpty() &&
listedCollections.length === 0
) {
return ( return (
<AccountFeaturedWrapper accountId={accountId}> <AccountFeaturedWrapper accountId={accountId}>
<EmptyMessage <EmptyMessage

View File

@@ -25,6 +25,8 @@ const messages = defineMessages({
}, },
}); });
type InteractionIntent = 'follow' | 'reblog' | 'favourite' | 'reply' | 'vote';
interface LoginFormMessage { interface LoginFormMessage {
type: type:
| 'fetchInteractionURL' | 'fetchInteractionURL'
@@ -32,6 +34,8 @@ interface LoginFormMessage {
| 'fetchInteractionURL-success'; | 'fetchInteractionURL-success';
uri_or_domain: string; uri_or_domain: string;
template?: string; template?: string;
param?: string;
intent?: InteractionIntent;
} }
const PERSISTENCE_KEY = 'mastodon_home'; const PERSISTENCE_KEY = 'mastodon_home';
@@ -110,7 +114,11 @@ const isValueValid = (value: string) => {
} }
}; };
const sendToFrame = (frame: HTMLIFrameElement | null, value: string): void => { const sendToFrame = (
frame: HTMLIFrameElement | null,
value: string,
intent: string,
): void => {
if (valueToDomain(value.trim()) === localDomain) { if (valueToDomain(value.trim()) === localDomain) {
window.location.href = '/auth/sign_in'; window.location.href = '/auth/sign_in';
return; return;
@@ -120,6 +128,7 @@ const sendToFrame = (frame: HTMLIFrameElement | null, value: string): void => {
{ {
type: 'fetchInteractionURL', type: 'fetchInteractionURL',
uri_or_domain: value.trim(), uri_or_domain: value.trim(),
intent,
}, },
window.origin, window.origin,
); );
@@ -127,7 +136,8 @@ const sendToFrame = (frame: HTMLIFrameElement | null, value: string): void => {
const LoginForm: React.FC<{ const LoginForm: React.FC<{
resourceUrl: string; resourceUrl: string;
}> = ({ resourceUrl }) => { intent: string;
}> = ({ resourceUrl, intent }) => {
const intl = useIntl(); const intl = useIntl();
const [value, setValue] = useState( const [value, setValue] = useState(
localStorage.getItem(PERSISTENCE_KEY) ?? '', localStorage.getItem(PERSISTENCE_KEY) ?? '',
@@ -161,7 +171,7 @@ const LoginForm: React.FC<{
try { try {
const url = new URL( const url = new URL(
event.data.template.replace( event.data.template.replace(
'{uri}', `{${event.data.param}}`,
encodeURIComponent(resourceUrl), encodeURIComponent(resourceUrl),
), ),
); );
@@ -242,8 +252,8 @@ const LoginForm: React.FC<{
const handleSubmit = useCallback(() => { const handleSubmit = useCallback(() => {
setIsSubmitting(true); setIsSubmitting(true);
sendToFrame(iframeRef.current, value); sendToFrame(iframeRef.current, value, intent);
}, [setIsSubmitting, value]); }, [setIsSubmitting, value, intent]);
const handleFocus = useCallback(() => { const handleFocus = useCallback(() => {
setExpanded(true); setExpanded(true);
@@ -287,7 +297,7 @@ const LoginForm: React.FC<{
setError(false); setError(false);
setValue(selectedOptionValue); setValue(selectedOptionValue);
setIsSubmitting(true); setIsSubmitting(true);
sendToFrame(iframeRef.current, selectedOptionValue); sendToFrame(iframeRef.current, selectedOptionValue, intent);
} }
break; break;
@@ -300,6 +310,7 @@ const LoginForm: React.FC<{
setValue, setValue,
selectedOption, selectedOption,
options, options,
intent,
], ],
); );
@@ -318,9 +329,9 @@ const LoginForm: React.FC<{
setValue(option); setValue(option);
setError(false); setError(false);
setIsSubmitting(true); setIsSubmitting(true);
sendToFrame(iframeRef.current, option); sendToFrame(iframeRef.current, option, intent);
}, },
[options, setSelectedOption, setValue, setError], [options, setSelectedOption, setValue, setError, intent],
); );
const domain = (valueToDomain(value) ?? '').trim(); const domain = (valueToDomain(value) ?? '').trim();
@@ -404,7 +415,8 @@ const LoginForm: React.FC<{
const InteractionModal: React.FC<{ const InteractionModal: React.FC<{
accountId: string; accountId: string;
url: string; url: string;
}> = ({ accountId, url }) => { intent: string;
}> = ({ accountId, url, intent }) => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const signupUrl = useAppSelector( const signupUrl = useAppSelector(
(state) => (state) =>
@@ -479,7 +491,7 @@ const InteractionModal: React.FC<{
</p> </p>
</div> </div>
<LoginForm resourceUrl={url} /> <LoginForm resourceUrl={url} intent={intent} />
<p> <p>
<FormattedMessage <FormattedMessage

View File

@@ -86,6 +86,7 @@ export const Footer: React.FC<{
openModal({ openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'reply',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },
@@ -106,6 +107,7 @@ export const Footer: React.FC<{
openModal({ openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'favourite',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },

View File

@@ -190,6 +190,7 @@ class Status extends ImmutablePureComponent {
dispatch(openModal({ dispatch(openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'favourite',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },
@@ -219,6 +220,7 @@ class Status extends ImmutablePureComponent {
dispatch(openModal({ dispatch(openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'reply',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },
@@ -236,6 +238,7 @@ class Status extends ImmutablePureComponent {
dispatch(openModal({ dispatch(openModal({
modalType: 'INTERACTION', modalType: 'INTERACTION',
modalProps: { modalProps: {
intent: 'reblog',
accountId: status.getIn(['account', 'id']), accountId: status.getIn(['account', 'id']),
url: status.get('uri'), url: status.get('uri'),
}, },
@@ -255,7 +258,12 @@ class Status extends ImmutablePureComponent {
const { dispatch, history } = this.props; const { dispatch, history } = this.props;
const handleDeleteSuccess = () => { const handleDeleteSuccess = () => {
history.push('/'); history.push('/', {
// Preventing the default "scroll to right" on
// location change in advanced UI to avoid conflict
// with the composer being focused
preventMultiColumnAutoScroll: true
});
}; };
if (!deleteModal) { if (!deleteModal) {
@@ -269,13 +277,13 @@ class Status extends ImmutablePureComponent {
// Error handling - could show error message // Error handling - could show error message
}); });
} else { } else {
dispatch(openModal({ dispatch(openModal({
modalType: 'CONFIRM_DELETE_STATUS', modalType: 'CONFIRM_DELETE_STATUS',
modalProps: { modalProps: {
statusId: status.get('id'), statusId: status.get('id'),
withRedraft, withRedraft,
onDeleteSuccess: handleDeleteSuccess onDeleteSuccess: handleDeleteSuccess
} }
})); }));
} }
}; };
@@ -493,7 +501,7 @@ class Status extends ImmutablePureComponent {
// Only highlight replies after the initial load // Only highlight replies after the initial load
if (prevProps.descendantsIds.length && isSameStatus) { if (prevProps.descendantsIds.length && isSameStatus) {
const newRepliesIds = difference(descendantsIds, prevProps.descendantsIds); const newRepliesIds = difference(descendantsIds, prevProps.descendantsIds);
if (newRepliesIds.length) { if (newRepliesIds.length) {
this.setState({newRepliesIds}); this.setState({newRepliesIds});
} }
@@ -626,7 +634,7 @@ class Status extends ImmutablePureComponent {
</Hotkeys> </Hotkeys>
{descendants} {descendants}
<RefreshController <RefreshController
isLocal={isLocal} isLocal={isLocal}
statusId={status.get('id')} statusId={status.get('id')}

View File

@@ -136,7 +136,9 @@ class SwitchingColumnsArea extends PureComponent {
} }
handleChildrenContentChange() { handleChildrenContentChange() {
if (!this.props.singleColumn) { const {preventMultiColumnAutoScroll} = this.props.location.state ?? {};
if (!this.props.singleColumn && !preventMultiColumnAutoScroll) {
const isRtlLayout = document.getElementsByTagName('body')[0] const isRtlLayout = document.getElementsByTagName('body')[0]
?.classList.contains('rtl'); ?.classList.contains('rtl');
const modifier = isRtlLayout ? -1 : 1; const modifier = isRtlLayout ? -1 : 1;
@@ -156,24 +158,23 @@ class SwitchingColumnsArea extends PureComponent {
const { signedIn } = this.props.identity; const { signedIn } = this.props.identity;
const pathName = this.props.location.pathname; const pathName = this.props.location.pathname;
let redirect; let rootRedirect;
if (signedIn) { if (signedIn) {
if (forceOnboarding) { if (forceOnboarding) {
redirect = <Redirect from='/' to='/start' exact />; rootRedirect = '/start';
} else if (singleColumn) { } else if (singleColumn) {
redirect = <Redirect from='/' to='/home' exact />; rootRedirect = '/home';
} else { } else {
redirect = <Redirect from='/' to='/deck/getting-started' exact />; rootRedirect = '/deck/getting-started';
} }
} else if (singleUserMode && owner && initialState?.accounts[owner]) { } else if (singleUserMode && owner && initialState?.accounts[owner]) {
redirect = <Redirect from='/' to={`/@${initialState.accounts[owner].username}`} exact />; rootRedirect = `/@${initialState.accounts[owner].username}`;
} else if (trendsEnabled && landingPage === 'trends') { } else if (trendsEnabled && landingPage === 'trends') {
redirect = <Redirect from='/' to='/explore' exact />; rootRedirect = '/explore';
} else if (localLiveFeedAccess === 'public' && landingPage === 'local_feed') { } else if (localLiveFeedAccess === 'public' && landingPage === 'local_feed') {
redirect = <Redirect from='/' to='/public/local' exact />; rootRedirect = '/public/local';
} else { } else {
redirect = <Redirect from='/' to='/about' exact />; rootRedirect = '/about';
} }
const profileRedesignRoutes = []; const profileRedesignRoutes = [];
@@ -194,7 +195,7 @@ class SwitchingColumnsArea extends PureComponent {
<ColumnsContextProvider multiColumn={!singleColumn}> <ColumnsContextProvider multiColumn={!singleColumn}>
<ColumnsArea ref={this.setRef} singleColumn={singleColumn}> <ColumnsArea ref={this.setRef} singleColumn={singleColumn}>
<WrappedSwitch> <WrappedSwitch>
{redirect} <Redirect from='/' to={{pathname: rootRedirect, state: this.props.location.state}} exact />
{singleColumn ? <Redirect from='/deck' to='/home' exact /> : null} {singleColumn ? <Redirect from='/deck' to='/home' exact /> : null}
{singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={{...this.props.location, pathname: pathName.slice(5)}} /> : null} {singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={{...this.props.location, pathname: pathName.slice(5)}} /> : null}

View File

@@ -28,6 +28,7 @@
"account.featured_tags.last_status_never": "Nun hai nenguna publicación", "account.featured_tags.last_status_never": "Nun hai nenguna publicación",
"account.follow": "Siguir", "account.follow": "Siguir",
"account.follow_back": "Siguir tamién", "account.follow_back": "Siguir tamién",
"account.follow_request_short": "Solicitú",
"account.followers": "Siguidores", "account.followers": "Siguidores",
"account.followers.empty": "Naide sigue a esti perfil.", "account.followers.empty": "Naide sigue a esti perfil.",
"account.following": "Siguiendo", "account.following": "Siguiendo",
@@ -43,6 +44,7 @@
"account.mute": "Desactivar los avisos de @{name}", "account.mute": "Desactivar los avisos de @{name}",
"account.mute_notifications_short": "Silenciar avisos", "account.mute_notifications_short": "Silenciar avisos",
"account.mute_short": "Silenciar", "account.mute_short": "Silenciar",
"account.name.help.header": "Un \"handle\" ye como una dirección de corréu",
"account.no_bio": "Nun se fornió nenguna descripción.", "account.no_bio": "Nun se fornió nenguna descripción.",
"account.open_original_page": "Abrir la páxina orixinal", "account.open_original_page": "Abrir la páxina orixinal",
"account.posts": "Artículos", "account.posts": "Artículos",
@@ -59,10 +61,17 @@
"account.unmute": "Activar los avisos de @{name}", "account.unmute": "Activar los avisos de @{name}",
"account.unmute_notifications_short": "Dexar de silenciar notificaciones", "account.unmute_notifications_short": "Dexar de silenciar notificaciones",
"account.unmute_short": "Activar los avisos", "account.unmute_short": "Activar los avisos",
"account_edit.custom_fields.placeholder": "Añade los tos pronombres, enllaces externos o cualquier otra cosa que quieras compartir.",
"account_edit.custom_fields.tip_title": "Conseyu: Añadir enllaces verificáos",
"account_edit.display_name.title": "Nome a mostrar",
"account_edit.field_edit_modal.name_hint": "Por exemplu: \"Web personal\"",
"account_edit.profile_tab.hint.title": "Les visualizaciones sigan variando",
"account_edit.verified_modal.details": "Añade credibilidá al to perfil de Mastodon verificando enllaces a webs personales. Asina ye como funciona:",
"account_note.placeholder": "Calca equí p'amestar una nota", "account_note.placeholder": "Calca equí p'amestar una nota",
"admin.dashboard.retention.average": "Media", "admin.dashboard.retention.average": "Media",
"admin.dashboard.retention.cohort": "Mes de rexistru", "admin.dashboard.retention.cohort": "Mes de rexistru",
"admin.dashboard.retention.cohort_size": "Perfiles nuevos", "admin.dashboard.retention.cohort_size": "Perfiles nuevos",
"admin.impact_report.instance_followers": "Seguidores que perderíen los nuestros usuarios",
"alert.rate_limited.message": "Volvi tentalo dempués de la hora: {retry_time, time, medium}.", "alert.rate_limited.message": "Volvi tentalo dempués de la hora: {retry_time, time, medium}.",
"alert.unexpected.message": "Prodúxose un error inesperáu.", "alert.unexpected.message": "Prodúxose un error inesperáu.",
"alert.unexpected.title": "¡Meca!", "alert.unexpected.title": "¡Meca!",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Opret samling", "collections.create_collection": "Opret samling",
"collections.delete_collection": "Slet samling", "collections.delete_collection": "Slet samling",
"collections.description_length_hint": "Begrænset til 100 tegn", "collections.description_length_hint": "Begrænset til 100 tegn",
"collections.detail.accept_inclusion": "Okay",
"collections.detail.accounts_heading": "Konti", "collections.detail.accounts_heading": "Konti",
"collections.detail.author_added_you": "{author} tilføjede dig til denne samling", "collections.detail.author_added_you": "{author} tilføjede dig til denne samling",
"collections.detail.curated_by_author": "Kurateret af {author}", "collections.detail.curated_by_author": "Kurateret af {author}",
"collections.detail.curated_by_you": "Kurateret af dig", "collections.detail.curated_by_you": "Kurateret af dig",
"collections.detail.loading": "Indlæser samling…", "collections.detail.loading": "Indlæser samling…",
"collections.detail.other_accounts_in_collection": "Andre i denne samling:", "collections.detail.other_accounts_in_collection": "Andre i denne samling:",
"collections.detail.revoke_inclusion": "Fjern mig",
"collections.detail.sensitive_note": "Denne samling indeholder konti og indhold, der kan være følsomt for nogle brugere.", "collections.detail.sensitive_note": "Denne samling indeholder konti og indhold, der kan være følsomt for nogle brugere.",
"collections.detail.share": "Del denne samling", "collections.detail.share": "Del denne samling",
"collections.edit_details": "Rediger detaljer", "collections.edit_details": "Rediger detaljer",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Seneste indlæg er fra over en uge siden", "collections.old_last_post_note": "Seneste indlæg er fra over en uge siden",
"collections.remove_account": "Fjern denne konto", "collections.remove_account": "Fjern denne konto",
"collections.report_collection": "Anmeld denne samling", "collections.report_collection": "Anmeld denne samling",
"collections.revoke_collection_inclusion": "Fjern mig selv fra denne samling",
"collections.revoke_inclusion.confirmation": "Du er blevet fjernet fra \"{collection}\"",
"collections.revoke_inclusion.error": "Der opstod en fejl, prøv igen senere.",
"collections.search_accounts_label": "Søg efter konti for at tilføje…", "collections.search_accounts_label": "Søg efter konti for at tilføje…",
"collections.search_accounts_max_reached": "Du har tilføjet det maksimale antal konti", "collections.search_accounts_max_reached": "Du har tilføjet det maksimale antal konti",
"collections.sensitive": "Sensitivt", "collections.sensitive": "Sensitivt",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Fjern følger", "confirmations.remove_from_followers.confirm": "Fjern følger",
"confirmations.remove_from_followers.message": "{name} vil ikke længere følge dig. Er du sikker på, at du vil fortsætte?", "confirmations.remove_from_followers.message": "{name} vil ikke længere følge dig. Er du sikker på, at du vil fortsætte?",
"confirmations.remove_from_followers.title": "Fjern følger?", "confirmations.remove_from_followers.title": "Fjern følger?",
"confirmations.revoke_collection_inclusion.confirm": "Fjern mig",
"confirmations.revoke_collection_inclusion.message": "Denne handling er permanent, og kuratoren vil ikke kunne føje dig til samlingen igen senere.",
"confirmations.revoke_collection_inclusion.title": "Fjern dig selv fra denne samling?",
"confirmations.revoke_quote.confirm": "Fjern indlæg", "confirmations.revoke_quote.confirm": "Fjern indlæg",
"confirmations.revoke_quote.message": "Denne handling kan ikke fortrydes.", "confirmations.revoke_quote.message": "Denne handling kan ikke fortrydes.",
"confirmations.revoke_quote.title": "Fjern indlæg?", "confirmations.revoke_quote.title": "Fjern indlæg?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Sammlung erstellen", "collections.create_collection": "Sammlung erstellen",
"collections.delete_collection": "Sammlung löschen", "collections.delete_collection": "Sammlung löschen",
"collections.description_length_hint": "Maximal 100 Zeichen", "collections.description_length_hint": "Maximal 100 Zeichen",
"collections.detail.accept_inclusion": "Einverstanden",
"collections.detail.accounts_heading": "Konten", "collections.detail.accounts_heading": "Konten",
"collections.detail.author_added_you": "{author} hat dich zur Sammlung hinzugefügt", "collections.detail.author_added_you": "{author} hat dich zur Sammlung hinzugefügt",
"collections.detail.curated_by_author": "Kuratiert von {author}", "collections.detail.curated_by_author": "Kuratiert von {author}",
"collections.detail.curated_by_you": "Kuratiert von dir", "collections.detail.curated_by_you": "Kuratiert von dir",
"collections.detail.loading": "Sammlung wird geladen …", "collections.detail.loading": "Sammlung wird geladen …",
"collections.detail.other_accounts_in_collection": "Weitere Profile in dieser Sammlung:", "collections.detail.other_accounts_in_collection": "Weitere Profile in dieser Sammlung:",
"collections.detail.revoke_inclusion": "Mich entfernen",
"collections.detail.sensitive_note": "Diese Sammlung enthält Profile und Inhalte, die manche als anstößig empfinden.", "collections.detail.sensitive_note": "Diese Sammlung enthält Profile und Inhalte, die manche als anstößig empfinden.",
"collections.detail.share": "Sammlung teilen", "collections.detail.share": "Sammlung teilen",
"collections.edit_details": "Details bearbeiten", "collections.edit_details": "Details bearbeiten",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Neuester Beitrag mehr als eine Woche alt", "collections.old_last_post_note": "Neuester Beitrag mehr als eine Woche alt",
"collections.remove_account": "Dieses Konto entfernen", "collections.remove_account": "Dieses Konto entfernen",
"collections.report_collection": "Sammlung melden", "collections.report_collection": "Sammlung melden",
"collections.revoke_collection_inclusion": "Mich aus dieser Sammlung entfernen",
"collections.revoke_inclusion.confirmation": "Du wurdest aus „{collection}“ entfernt",
"collections.revoke_inclusion.error": "Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.",
"collections.search_accounts_label": "Suche nach Konten, um sie hinzuzufügen …", "collections.search_accounts_label": "Suche nach Konten, um sie hinzuzufügen …",
"collections.search_accounts_max_reached": "Du hast die Höchstzahl an Konten hinzugefügt", "collections.search_accounts_max_reached": "Du hast die Höchstzahl an Konten hinzugefügt",
"collections.sensitive": "Inhaltswarnung", "collections.sensitive": "Inhaltswarnung",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Follower entfernen", "confirmations.remove_from_followers.confirm": "Follower entfernen",
"confirmations.remove_from_followers.message": "{name} wird dir nicht länger folgen. Bist du dir sicher?", "confirmations.remove_from_followers.message": "{name} wird dir nicht länger folgen. Bist du dir sicher?",
"confirmations.remove_from_followers.title": "Follower entfernen?", "confirmations.remove_from_followers.title": "Follower entfernen?",
"confirmations.revoke_collection_inclusion.confirm": "Mich entfernen",
"confirmations.revoke_collection_inclusion.message": "Diese Aktion kann nicht rückgängig gemacht werden. Es wird daher nicht möglich sein, dich zu dieser Sammlung erneut hinzuzufügen.",
"confirmations.revoke_collection_inclusion.title": "Möchtest du wirklich aus dieser Sammlung entfernt werden?",
"confirmations.revoke_quote.confirm": "Zitat entfernen", "confirmations.revoke_quote.confirm": "Zitat entfernen",
"confirmations.revoke_quote.message": "Diese Aktion kann nicht rückgängig gemacht werden.", "confirmations.revoke_quote.message": "Diese Aktion kann nicht rückgängig gemacht werden.",
"confirmations.revoke_quote.title": "Mein Zitat aus diesem Beitrag entfernen?", "confirmations.revoke_quote.title": "Mein Zitat aus diesem Beitrag entfernen?",

View File

@@ -231,7 +231,7 @@
"alt_text_modal.change_thumbnail": "Αλλαγή μικρογραφίας", "alt_text_modal.change_thumbnail": "Αλλαγή μικρογραφίας",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Περιέγραψε αυτό για άτομα με προβλήματα ακοής…", "alt_text_modal.describe_for_people_with_hearing_impairments": "Περιέγραψε αυτό για άτομα με προβλήματα ακοής…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Περιέγραψε αυτό για άτομα με προβλήματα όρασης…", "alt_text_modal.describe_for_people_with_visual_impairments": "Περιέγραψε αυτό για άτομα με προβλήματα όρασης…",
"alt_text_modal.done": "Ολοκληρώθηκε", "alt_text_modal.done": "Τέλος",
"announcement.announcement": "Ανακοίνωση", "announcement.announcement": "Ανακοίνωση",
"annual_report.announcement.action_build": "Φτιάξε το Wrapstodon μου", "annual_report.announcement.action_build": "Φτιάξε το Wrapstodon μου",
"annual_report.announcement.action_dismiss": "Όχι, ευχαριστώ", "annual_report.announcement.action_dismiss": "Όχι, ευχαριστώ",
@@ -338,12 +338,14 @@
"collections.create_collection": "Δημιουργία συλλογής", "collections.create_collection": "Δημιουργία συλλογής",
"collections.delete_collection": "Διαγραφή συλλογής", "collections.delete_collection": "Διαγραφή συλλογής",
"collections.description_length_hint": "Όριο 100 χαρακτήρων", "collections.description_length_hint": "Όριο 100 χαρακτήρων",
"collections.detail.accept_inclusion": "Εντάξει",
"collections.detail.accounts_heading": "Λογαριασμοί", "collections.detail.accounts_heading": "Λογαριασμοί",
"collections.detail.author_added_you": "Ο/Η {author} σας πρόσθεσε σε αυτήν τη συλλογή", "collections.detail.author_added_you": "Ο/Η {author} σας πρόσθεσε σε αυτήν τη συλλογή",
"collections.detail.curated_by_author": "Επιμέλεια από {author}", "collections.detail.curated_by_author": "Επιμέλεια από {author}",
"collections.detail.curated_by_you": "Επιμέλεια από εσάς", "collections.detail.curated_by_you": "Επιμέλεια από εσάς",
"collections.detail.loading": "Γίνεται φόρτωση της συλλογής…", "collections.detail.loading": "Γίνεται φόρτωση της συλλογής…",
"collections.detail.other_accounts_in_collection": "Άλλοι σε αυτήν τη συλλογή:", "collections.detail.other_accounts_in_collection": "Άλλοι σε αυτήν τη συλλογή:",
"collections.detail.revoke_inclusion": "Αφαίρεσε με",
"collections.detail.sensitive_note": "Αυτή η συλλογή περιέχει λογαριασμούς και περιεχόμενο που μπορεί να είναι ευαίσθητα σε ορισμένους χρήστες.", "collections.detail.sensitive_note": "Αυτή η συλλογή περιέχει λογαριασμούς και περιεχόμενο που μπορεί να είναι ευαίσθητα σε ορισμένους χρήστες.",
"collections.detail.share": "Κοινοποιήστε αυτήν τη συλλογή", "collections.detail.share": "Κοινοποιήστε αυτήν τη συλλογή",
"collections.edit_details": "Επεξεργασία λεπτομερειών", "collections.edit_details": "Επεξεργασία λεπτομερειών",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Τελευταία ανάρτηση πριν από μια εβδομάδα", "collections.old_last_post_note": "Τελευταία ανάρτηση πριν από μια εβδομάδα",
"collections.remove_account": "Αφαίρεση λογαριασμού", "collections.remove_account": "Αφαίρεση λογαριασμού",
"collections.report_collection": "Αναφορά αυτής της συλλογής", "collections.report_collection": "Αναφορά αυτής της συλλογής",
"collections.revoke_collection_inclusion": "Αφαίρεσε τον εαυτό μου από αυτήν τη συλλογή",
"collections.revoke_inclusion.confirmation": "Έχεις αφαιρεθεί από τη συλλογή \"{collection}\"",
"collections.revoke_inclusion.error": "Υπήρξε ένα σφάλμα, παρακαλούμε προσπαθήστε ξανά αργότερα.",
"collections.search_accounts_label": "Αναζήτηση λογαριασμών για προσθήκη…", "collections.search_accounts_label": "Αναζήτηση λογαριασμών για προσθήκη…",
"collections.search_accounts_max_reached": "Έχετε προσθέσει τον μέγιστο αριθμό λογαριασμών", "collections.search_accounts_max_reached": "Έχετε προσθέσει τον μέγιστο αριθμό λογαριασμών",
"collections.sensitive": "Ευαίσθητο", "collections.sensitive": "Ευαίσθητο",
@@ -405,7 +410,7 @@
"combobox.no_results_found": "Κανένα αποτέλεσμα για αυτήν την αναζήτηση", "combobox.no_results_found": "Κανένα αποτέλεσμα για αυτήν την αναζήτηση",
"combobox.open_results": "Άνοιγμα αποτελεσμάτων", "combobox.open_results": "Άνοιγμα αποτελεσμάτων",
"combobox.results_available": "{count, plural, one {# πρόταση διαθέσιμη} other {# προτάσεις διαθέσιμες}}. Χρησιμοποιήστε τα βελάκια πάνω και κάτω για να πλοηγηθείτε. Πατήστε Enter για να επιλέξετε.", "combobox.results_available": "{count, plural, one {# πρόταση διαθέσιμη} other {# προτάσεις διαθέσιμες}}. Χρησιμοποιήστε τα βελάκια πάνω και κάτω για να πλοηγηθείτε. Πατήστε Enter για να επιλέξετε.",
"community.column_settings.local_only": "Τοπικά μόνο", "community.column_settings.local_only": "Τοπική μόνο",
"community.column_settings.media_only": "Μόνο πολυμέσα", "community.column_settings.media_only": "Μόνο πολυμέσα",
"community.column_settings.remote_only": "Απομακρυσμένα μόνο", "community.column_settings.remote_only": "Απομακρυσμένα μόνο",
"compose.error.blank_post": "Η ανάρτηση δεν μπορεί να είναι κενή.", "compose.error.blank_post": "Η ανάρτηση δεν μπορεί να είναι κενή.",
@@ -462,7 +467,7 @@
"confirmations.logout.confirm": "Αποσύνδεση", "confirmations.logout.confirm": "Αποσύνδεση",
"confirmations.logout.message": "Σίγουρα θέλεις να αποσυνδεθείς;", "confirmations.logout.message": "Σίγουρα θέλεις να αποσυνδεθείς;",
"confirmations.logout.title": "Αποσύνδεση;", "confirmations.logout.title": "Αποσύνδεση;",
"confirmations.missing_alt_text.confirm": "Προσθήκη εναλ κειμένου", "confirmations.missing_alt_text.confirm": "Προσθήκη εναλλακτικού κειμένου",
"confirmations.missing_alt_text.message": "Η ανάρτησή σου περιέχει πολυμέσα χωρίς εναλλακτικό κείμενο. Η προσθήκη περιγραφών βοηθά να γίνει το περιεχόμενό σου προσβάσιμο σε περισσότερους ανθρώπους.", "confirmations.missing_alt_text.message": "Η ανάρτησή σου περιέχει πολυμέσα χωρίς εναλλακτικό κείμενο. Η προσθήκη περιγραφών βοηθά να γίνει το περιεχόμενό σου προσβάσιμο σε περισσότερους ανθρώπους.",
"confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει", "confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει",
"confirmations.missing_alt_text.title": "Προσθήκη εναλλακτικού κειμένου;", "confirmations.missing_alt_text.title": "Προσθήκη εναλλακτικού κειμένου;",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Αφαίρεση ακολούθου", "confirmations.remove_from_followers.confirm": "Αφαίρεση ακολούθου",
"confirmations.remove_from_followers.message": "Ο χρήστης {name} θα σταματήσει να σε ακολουθεί. Σίγουρα θες να συνεχίσεις;", "confirmations.remove_from_followers.message": "Ο χρήστης {name} θα σταματήσει να σε ακολουθεί. Σίγουρα θες να συνεχίσεις;",
"confirmations.remove_from_followers.title": "Αφαίρεση ακολούθου;", "confirmations.remove_from_followers.title": "Αφαίρεση ακολούθου;",
"confirmations.revoke_collection_inclusion.confirm": "Αφαίρεσε με",
"confirmations.revoke_collection_inclusion.message": "Αυτή η ενέργεια είναι μόνιμη, και ο επιμελητής δεν θα μπορεί να σε προσθέσει ξανά στη συλλογή αργότερα.",
"confirmations.revoke_collection_inclusion.title": "Αφαίρεσε τον εαυτό σου από αυτήν τη συλλογή;",
"confirmations.revoke_quote.confirm": "Αφαίρεση ανάρτησης", "confirmations.revoke_quote.confirm": "Αφαίρεση ανάρτησης",
"confirmations.revoke_quote.message": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", "confirmations.revoke_quote.message": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.",
"confirmations.revoke_quote.title": "Αφαίρεση ανάρτησης;", "confirmations.revoke_quote.title": "Αφαίρεση ανάρτησης;",
@@ -541,7 +549,7 @@
"emoji_button.custom": "Προσαρμοσμένα", "emoji_button.custom": "Προσαρμοσμένα",
"emoji_button.flags": "Σημαίες", "emoji_button.flags": "Σημαίες",
"emoji_button.food": "Φαγητά & Ποτά", "emoji_button.food": "Φαγητά & Ποτά",
"emoji_button.label": "Εισάγετε emoji", "emoji_button.label": "Εισαγωγή emoji",
"emoji_button.nature": "Φύση", "emoji_button.nature": "Φύση",
"emoji_button.not_found": "Δε βρέθηκε αντιστοίχιση εμότζι", "emoji_button.not_found": "Δε βρέθηκε αντιστοίχιση εμότζι",
"emoji_button.objects": "Αντικείμενα", "emoji_button.objects": "Αντικείμενα",
@@ -697,7 +705,7 @@
"ignore_notifications_modal.not_following_title": "Αγνόηση ειδοποιήσεων από άτομα που δεν ακολουθείς;", "ignore_notifications_modal.not_following_title": "Αγνόηση ειδοποιήσεων από άτομα που δεν ακολουθείς;",
"ignore_notifications_modal.private_mentions_title": "Αγνόηση ειδοποιήσεων από μη ζητηθείσες ιδιωτικές επισημάνσεις;", "ignore_notifications_modal.private_mentions_title": "Αγνόηση ειδοποιήσεων από μη ζητηθείσες ιδιωτικές επισημάνσεις;",
"info_button.label": "Βοήθεια", "info_button.label": "Βοήθεια",
"info_button.what_is_alt_text": "Το εναλλακτικό κείμενο παρέχει περιγραφές εικόνας για άτομα με προβλήματα όρασης, διαδικτυακές συνδέσεις χαμηλής ταχύτητας ή για άτομα που αναζητούν επιπλέον περιεχόμενο.\\n\\nΜπορείς να βελτιώσεις την προσβασιμότητα και την κατανόηση για όλους, γράφοντας σαφές, συνοπτικό και αντικειμενικό εναλλακτικό κείμενο.\\n\\n<ul><li>Κατέγραψε σημαντικά στοιχεία</li>\\n<li>Συνόψισε το κείμενο στις εικόνες</li>\\n<li>Χρησιμοποίησε δομή κανονικής πρότασης</li>\\n<li>Απέφυγε περιττές πληροφορίες</li>\\n<li>Εστίασε στις τάσεις και τα βασικά ευρήματα σε σύνθετα οπτικά στοιχεία (όπως διαγράμματα ή χάρτες)</li></ul>", "info_button.what_is_alt_text": "<h1>Τι είναι το εναλλακτικό κείμενο;</h1> <p>Το εναλλακτικό κείμενο (alt text) παρέχει περιγραφές εικόνας για άτομα με προβλήματα όρασης, διαδικτυακές συνδέσεις χαμηλής ταχύτητας ή για άτομα που αναζητούν επιπλέον περιεχόμενο.</p> <p>Μπορείς να βελτιώσεις την προσβασιμότητα και την κατανόηση για όλους, γράφοντας σαφές, συνοπτικό και αντικειμενικό εναλλακτικό κείμενο.</p> <ul> <li>Κατέγραψε σημαντικά στοιχεία</li> <li>Συνόψισε το κείμενο στις εικόνες</li> <li>Χρησιμοποίησε δομή κανονικής πρότασης</li> <li>Απέφυγε περιττές πληροφορίες</li> <li>Εστίασε στις τάσεις και τα βασικά ευρήματα σε σύνθετα οπτικά στοιχεία (όπως διαγράμματα ή χάρτες)</li> </ul>",
"interaction_modal.action": "Για να αλληλεπιδράσετε με την ανάρτηση του/της {name}, πρέπει να συνδεθείτε στον λογαριασμό σας σε οποιονδήποτε διακομιστή Mastodon χρησιμοποιείτε.", "interaction_modal.action": "Για να αλληλεπιδράσετε με την ανάρτηση του/της {name}, πρέπει να συνδεθείτε στον λογαριασμό σας σε οποιονδήποτε διακομιστή Mastodon χρησιμοποιείτε.",
"interaction_modal.go": "Πάμε", "interaction_modal.go": "Πάμε",
"interaction_modal.no_account_yet": "Δεν έχεις ακόμη λογαριασμό;", "interaction_modal.no_account_yet": "Δεν έχεις ακόμη λογαριασμό;",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Create collection", "collections.create_collection": "Create collection",
"collections.delete_collection": "Delete collection", "collections.delete_collection": "Delete collection",
"collections.description_length_hint": "100 characters limit", "collections.description_length_hint": "100 characters limit",
"collections.detail.accept_inclusion": "OK",
"collections.detail.accounts_heading": "Accounts", "collections.detail.accounts_heading": "Accounts",
"collections.detail.author_added_you": "{author} added you to this collection", "collections.detail.author_added_you": "{author} added you to this collection",
"collections.detail.curated_by_author": "Curated by {author}", "collections.detail.curated_by_author": "Curated by {author}",
"collections.detail.curated_by_you": "Curated by you", "collections.detail.curated_by_you": "Curated by you",
"collections.detail.loading": "Loading collection…", "collections.detail.loading": "Loading collection…",
"collections.detail.other_accounts_in_collection": "Others in this collection:", "collections.detail.other_accounts_in_collection": "Others in this collection:",
"collections.detail.revoke_inclusion": "Remove me",
"collections.detail.sensitive_note": "This collection contains accounts and content that may be sensitive to some users.", "collections.detail.sensitive_note": "This collection contains accounts and content that may be sensitive to some users.",
"collections.detail.share": "Share this collection", "collections.detail.share": "Share this collection",
"collections.edit_details": "Edit details", "collections.edit_details": "Edit details",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Last posted over a week ago", "collections.old_last_post_note": "Last posted over a week ago",
"collections.remove_account": "Remove this account", "collections.remove_account": "Remove this account",
"collections.report_collection": "Report this collection", "collections.report_collection": "Report this collection",
"collections.revoke_collection_inclusion": "Remove myself from this collection",
"collections.revoke_inclusion.confirmation": "You've been removed from \"{collection}\"",
"collections.revoke_inclusion.error": "There was an error, please try again later.",
"collections.search_accounts_label": "Search for accounts to add…", "collections.search_accounts_label": "Search for accounts to add…",
"collections.search_accounts_max_reached": "You have added the maximum number of accounts", "collections.search_accounts_max_reached": "You have added the maximum number of accounts",
"collections.sensitive": "Sensitive", "collections.sensitive": "Sensitive",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Remove follower", "confirmations.remove_from_followers.confirm": "Remove follower",
"confirmations.remove_from_followers.message": "{name} will stop following you. Are you sure you want to proceed?", "confirmations.remove_from_followers.message": "{name} will stop following you. Are you sure you want to proceed?",
"confirmations.remove_from_followers.title": "Remove follower?", "confirmations.remove_from_followers.title": "Remove follower?",
"confirmations.revoke_collection_inclusion.confirm": "Remove me",
"confirmations.revoke_collection_inclusion.message": "This action is permanent, and the curator won't be able to re-add you to the collection later on.",
"confirmations.revoke_collection_inclusion.title": "Remove yourself from this collection?",
"confirmations.revoke_quote.confirm": "Remove post", "confirmations.revoke_quote.confirm": "Remove post",
"confirmations.revoke_quote.message": "This action cannot be undone.", "confirmations.revoke_quote.message": "This action cannot be undone.",
"confirmations.revoke_quote.title": "Remove post?", "confirmations.revoke_quote.title": "Remove post?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Crear colección", "collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección", "collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Límite de 100 caracteres", "collections.description_length_hint": "Límite de 100 caracteres",
"collections.detail.accept_inclusion": "Aceptar",
"collections.detail.accounts_heading": "Cuentas", "collections.detail.accounts_heading": "Cuentas",
"collections.detail.author_added_you": "{author} te agregó a esta colección", "collections.detail.author_added_you": "{author} te agregó a esta colección",
"collections.detail.curated_by_author": "Curado por {author}", "collections.detail.curated_by_author": "Curado por {author}",
"collections.detail.curated_by_you": "Curado por vos", "collections.detail.curated_by_you": "Curado por vos",
"collections.detail.loading": "Cargando colección…", "collections.detail.loading": "Cargando colección…",
"collections.detail.other_accounts_in_collection": "Otras cuentas en esta colección:", "collections.detail.other_accounts_in_collection": "Otras cuentas en esta colección:",
"collections.detail.revoke_inclusion": "Quitarme",
"collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que pueden ser sensibles a algunos usuarios.", "collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que pueden ser sensibles a algunos usuarios.",
"collections.detail.share": "Compartir esta colección", "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar detalles", "collections.edit_details": "Editar detalles",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Último mensaje hace más de una semana", "collections.old_last_post_note": "Último mensaje hace más de una semana",
"collections.remove_account": "Eliminar esta cuenta", "collections.remove_account": "Eliminar esta cuenta",
"collections.report_collection": "Denunciar esta colección", "collections.report_collection": "Denunciar esta colección",
"collections.revoke_collection_inclusion": "Quitarme de esta colección",
"collections.revoke_inclusion.confirmation": "Saliste de «{collection}»",
"collections.revoke_inclusion.error": "Hubo un error; por favor, intentalo de nuevo más tarde.",
"collections.search_accounts_label": "Buscar cuentas para agregar…", "collections.search_accounts_label": "Buscar cuentas para agregar…",
"collections.search_accounts_max_reached": "Agregaste el número máximo de cuentas", "collections.search_accounts_max_reached": "Agregaste el número máximo de cuentas",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Quitar seguidor", "confirmations.remove_from_followers.confirm": "Quitar seguidor",
"confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿Estás seguro de que querés continuar?", "confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿Estás seguro de que querés continuar?",
"confirmations.remove_from_followers.title": "¿Quitar seguidor?", "confirmations.remove_from_followers.title": "¿Quitar seguidor?",
"confirmations.revoke_collection_inclusion.confirm": "Quitarme",
"confirmations.revoke_collection_inclusion.message": "Esta acción es permanente, y el autor no podrá volver a agregarte a la colección más adelante.",
"confirmations.revoke_collection_inclusion.title": "¿Querés quitarte de esta colección?",
"confirmations.revoke_quote.confirm": "Eliminar mensaje", "confirmations.revoke_quote.confirm": "Eliminar mensaje",
"confirmations.revoke_quote.message": "Esta acción no se puede deshacer.", "confirmations.revoke_quote.message": "Esta acción no se puede deshacer.",
"confirmations.revoke_quote.title": "¿Eliminar mensaje?", "confirmations.revoke_quote.title": "¿Eliminar mensaje?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Crear colección", "collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección", "collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Limitado a 100 caracteres", "collections.description_length_hint": "Limitado a 100 caracteres",
"collections.detail.accept_inclusion": "Aceptar",
"collections.detail.accounts_heading": "Cuentas", "collections.detail.accounts_heading": "Cuentas",
"collections.detail.author_added_you": "{author} te ha añadido a esta colección", "collections.detail.author_added_you": "{author} te ha añadido a esta colección",
"collections.detail.curated_by_author": "Seleccionado por {author}", "collections.detail.curated_by_author": "Seleccionado por {author}",
"collections.detail.curated_by_you": "Seleccionado por ti", "collections.detail.curated_by_you": "Seleccionado por ti",
"collections.detail.loading": "Cargando colección…", "collections.detail.loading": "Cargando colección…",
"collections.detail.other_accounts_in_collection": "Otros en esta colección:", "collections.detail.other_accounts_in_collection": "Otros en esta colección:",
"collections.detail.revoke_inclusion": "Excluirme",
"collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que pueden resultar sensibles para algunos usuarios.", "collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que pueden resultar sensibles para algunos usuarios.",
"collections.detail.share": "Compartir esta colección", "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar detalles", "collections.edit_details": "Editar detalles",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Última publicación hace más de una semana", "collections.old_last_post_note": "Última publicación hace más de una semana",
"collections.remove_account": "Eliminar esta cuenta", "collections.remove_account": "Eliminar esta cuenta",
"collections.report_collection": "Reportar esta colección", "collections.report_collection": "Reportar esta colección",
"collections.revoke_collection_inclusion": "Excluirme de esta colección",
"collections.revoke_inclusion.confirmation": "Has sido excluido de \"{collection}\"",
"collections.revoke_inclusion.error": "Se ha producido un error, por favor, inténtalo de nuevo más tarde.",
"collections.search_accounts_label": "Buscar cuentas para añadir…", "collections.search_accounts_label": "Buscar cuentas para añadir…",
"collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas", "collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Eliminar seguidor", "confirmations.remove_from_followers.confirm": "Eliminar seguidor",
"confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿Estás seguro de que quieres continuar?", "confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿Estás seguro de que quieres continuar?",
"confirmations.remove_from_followers.title": "¿Eliminar seguidor?", "confirmations.remove_from_followers.title": "¿Eliminar seguidor?",
"confirmations.revoke_collection_inclusion.confirm": "Excluirme",
"confirmations.revoke_collection_inclusion.message": "Esta acción es permanente y el autor no podrá volver a agregarte a la colección más adelante.",
"confirmations.revoke_collection_inclusion.title": "¿Deseas excluirte de esta colección?",
"confirmations.revoke_quote.confirm": "Eliminar publicación", "confirmations.revoke_quote.confirm": "Eliminar publicación",
"confirmations.revoke_quote.message": "Esta acción no se puede deshacer.", "confirmations.revoke_quote.message": "Esta acción no se puede deshacer.",
"confirmations.revoke_quote.title": "¿Deseas eliminar la publicación?", "confirmations.revoke_quote.title": "¿Deseas eliminar la publicación?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Crear colección", "collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección", "collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Limitado a 100 caracteres", "collections.description_length_hint": "Limitado a 100 caracteres",
"collections.detail.accept_inclusion": "Aceptar",
"collections.detail.accounts_heading": "Cuentas", "collections.detail.accounts_heading": "Cuentas",
"collections.detail.author_added_you": "{author} te añadió a esta colección", "collections.detail.author_added_you": "{author} te añadió a esta colección",
"collections.detail.curated_by_author": "Seleccionado por {author}", "collections.detail.curated_by_author": "Seleccionado por {author}",
"collections.detail.curated_by_you": "Seleccionado por ti", "collections.detail.curated_by_you": "Seleccionado por ti",
"collections.detail.loading": "Cargando colección…", "collections.detail.loading": "Cargando colección…",
"collections.detail.other_accounts_in_collection": "Otros en esta colección:", "collections.detail.other_accounts_in_collection": "Otros en esta colección:",
"collections.detail.revoke_inclusion": "Eliminar",
"collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que puede ser sensible para algunos usuarios.", "collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que puede ser sensible para algunos usuarios.",
"collections.detail.share": "Compartir esta colección", "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar detalles", "collections.edit_details": "Editar detalles",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Última publicación hace más de una semana", "collections.old_last_post_note": "Última publicación hace más de una semana",
"collections.remove_account": "Quitar esta cuenta", "collections.remove_account": "Quitar esta cuenta",
"collections.report_collection": "Informar de esta colección", "collections.report_collection": "Informar de esta colección",
"collections.revoke_collection_inclusion": "Eliminarme de esta colección",
"collections.revoke_inclusion.confirmation": "Ha sido eliminado de\"{collection}\"",
"collections.revoke_inclusion.error": "Se ha producido un error. Inténtelo de nuevo más tarde.",
"collections.search_accounts_label": "Buscar cuentas para añadir…", "collections.search_accounts_label": "Buscar cuentas para añadir…",
"collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas", "collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Eliminar seguidor", "confirmations.remove_from_followers.confirm": "Eliminar seguidor",
"confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿Estás seguro de que quieres continuar?", "confirmations.remove_from_followers.message": "{name} dejará de seguirte. ¿Estás seguro de que quieres continuar?",
"confirmations.remove_from_followers.title": "¿Eliminar seguidor?", "confirmations.remove_from_followers.title": "¿Eliminar seguidor?",
"confirmations.revoke_collection_inclusion.confirm": "Eliminar",
"confirmations.revoke_collection_inclusion.message": "Esta acción es permanente, y el curador no podrá volver a añadirle a la colección más adelante.",
"confirmations.revoke_collection_inclusion.title": "¿Eliminarse de esta colección?",
"confirmations.revoke_quote.confirm": "Eliminar publicación", "confirmations.revoke_quote.confirm": "Eliminar publicación",
"confirmations.revoke_quote.message": "Esta acción no tiene vuelta atrás.", "confirmations.revoke_quote.message": "Esta acción no tiene vuelta atrás.",
"confirmations.revoke_quote.title": "¿Eliminar la publicación?", "confirmations.revoke_quote.title": "¿Eliminar la publicación?",

View File

@@ -153,6 +153,7 @@
"account_edit.column_title": "Muokkaa profiilia", "account_edit.column_title": "Muokkaa profiilia",
"account_edit.custom_fields.name": "kenttä", "account_edit.custom_fields.name": "kenttä",
"account_edit.custom_fields.placeholder": "Lisää pronominisi, ulkoisia linkkejä tai mitä tahansa muuta, jonka haluat jakaa.", "account_edit.custom_fields.placeholder": "Lisää pronominisi, ulkoisia linkkejä tai mitä tahansa muuta, jonka haluat jakaa.",
"account_edit.custom_fields.reorder_button": "Järjestele kenttiä",
"account_edit.custom_fields.tip_content": "Voit helposti lisätä Mastodon-tilisi uskottavuutta vahvistamalla mihin tahansa omistamaasi verkkosivustoon ohjaavat linkit.", "account_edit.custom_fields.tip_content": "Voit helposti lisätä Mastodon-tilisi uskottavuutta vahvistamalla mihin tahansa omistamaasi verkkosivustoon ohjaavat linkit.",
"account_edit.custom_fields.tip_title": "Vinkki: Vahvistettujen linkkien lisääminen", "account_edit.custom_fields.tip_title": "Vinkki: Vahvistettujen linkkien lisääminen",
"account_edit.custom_fields.title": "Mukautetut kentät", "account_edit.custom_fields.title": "Mukautetut kentät",
@@ -162,15 +163,26 @@
"account_edit.featured_hashtags.item": "aihetunnisteet", "account_edit.featured_hashtags.item": "aihetunnisteet",
"account_edit.featured_hashtags.placeholder": "Auta muita tunnistamaan suosikkiaiheesi ja saamaan nopea pääsy niihin.", "account_edit.featured_hashtags.placeholder": "Auta muita tunnistamaan suosikkiaiheesi ja saamaan nopea pääsy niihin.",
"account_edit.featured_hashtags.title": "Esiteltävät aihetunnisteet", "account_edit.featured_hashtags.title": "Esiteltävät aihetunnisteet",
"account_edit.field_delete_modal.confirm": "Haluatko varmasti poistaa tämän mukautetun kentän? Tätä toimintoa ei voi peruuttaa.", "account_edit.field_delete_modal.confirm": "Haluatko varmasti poistaa tämän mukautetun kentän? Tätä toimea ei voi peruuttaa.",
"account_edit.field_delete_modal.delete_button": "Poista", "account_edit.field_delete_modal.delete_button": "Poista",
"account_edit.field_delete_modal.title": "Poistetaanko mukautettu kenttä?", "account_edit.field_delete_modal.title": "Poistetaanko mukautettu kenttä?",
"account_edit.field_edit_modal.add_title": "Lisää mukautettu kenttä", "account_edit.field_edit_modal.add_title": "Lisää mukautettu kenttä",
"account_edit.field_edit_modal.edit_title": "Muokkaa mukautettua kenttää", "account_edit.field_edit_modal.edit_title": "Muokkaa mukautettua kenttää",
"account_edit.field_edit_modal.limit_header": "Suositeltu merkkiraja ylitetty", "account_edit.field_edit_modal.limit_header": "Suositeltu merkkiraja ylitetty",
"account_edit.field_edit_modal.limit_message": "Mobiilikäyttäjät eivät välttämättä näe kenttää kokonaan.",
"account_edit.field_edit_modal.link_emoji_warning": "Emme suosittele käyttämään mukautettuja emojeita URL-osoitteiden kanssa. Molempia sisältävät mukautetut kentät näkyvät vain tekstinä linkin sijaan, jotta estetään käyttäjien sekaannus.",
"account_edit.field_edit_modal.name_hint": "Esim. ”Henkilökohtainen verkkosivusto”", "account_edit.field_edit_modal.name_hint": "Esim. ”Henkilökohtainen verkkosivusto”",
"account_edit.field_edit_modal.name_label": "Nimike", "account_edit.field_edit_modal.name_label": "Nimike",
"account_edit.field_edit_modal.value_hint": "Esim. ”example.me”",
"account_edit.field_edit_modal.value_label": "Arvo", "account_edit.field_edit_modal.value_label": "Arvo",
"account_edit.field_reorder_modal.drag_cancel": "Veto peruttu. Kenttää ”{item}” ei siirretty.",
"account_edit.field_reorder_modal.drag_end": "Kenttä ”{item}” pudotettu.",
"account_edit.field_reorder_modal.drag_instructions": "Siirrä mukautettuja kenttiä painamalla välilyöntiä tai Enter-näppäintä. Raahatessa siirrä kenttää ylös tai alas nuolinäppäimillä. Pudota kenttä uuteen kohtaansa painamalla uudelleen välilyöntiä tai Enter-näppäintä, tai peru painamalla Escape-näppäintä.",
"account_edit.field_reorder_modal.drag_move": "Kenttä ”{item}” siirretty.",
"account_edit.field_reorder_modal.drag_over": "Kenttä ”{item}” siirretty kentän ”{over}” päälle.",
"account_edit.field_reorder_modal.drag_start": "Valittu kenttä ”{item}”.",
"account_edit.field_reorder_modal.handle_label": "Siirrä kenttää ”{item}”",
"account_edit.field_reorder_modal.title": "Järjestele kenttiä",
"account_edit.name_modal.add_title": "Lisää näyttönimi", "account_edit.name_modal.add_title": "Lisää näyttönimi",
"account_edit.name_modal.edit_title": "Muokkaa näyttönimeä", "account_edit.name_modal.edit_title": "Muokkaa näyttönimeä",
"account_edit.profile_tab.button_label": "Mukauta", "account_edit.profile_tab.button_label": "Mukauta",
@@ -186,7 +198,12 @@
"account_edit.profile_tab.title": "Profiilin välilehtien asetukset", "account_edit.profile_tab.title": "Profiilin välilehtien asetukset",
"account_edit.save": "Tallenna", "account_edit.save": "Tallenna",
"account_edit.verified_modal.details": "Lisää Mastodon-profiiliisi uskottavuutta vahvistamalla linkit henkilökohtaisiin verkkosivustoihin. Näin se toimii:", "account_edit.verified_modal.details": "Lisää Mastodon-profiiliisi uskottavuutta vahvistamalla linkit henkilökohtaisiin verkkosivustoihin. Näin se toimii:",
"account_edit.verified_modal.invisible_link.details": "Lisää linkki HTML:n head-osaan. Tärkeä kohta on rel=\"me\", joka estää toiseksi tekeytymisen sivustoilla, joilla on käyttäjien luomaa sisältöä. Voit jopa käyttää link-tunnistetta sivun head-osassa {tag}-tunnisteen sijaan, mutta HTML:n tulee olla saatavilla suorittamatta JavaScriptia.",
"account_edit.verified_modal.invisible_link.summary": "Miten teen linkistä näkymättömän?",
"account_edit.verified_modal.step1.header": "Kopioi alla oleva HTML-koodi ja liitä se verkkosivustosi head-osaan",
"account_edit.verified_modal.step2.details": "Jos olet jo lisännyt verkkosivustosi mukautettuna kenttänä, sinun tulee poistaa ja lisätä se uudelleen, jotta voit käynnistää vahvistuksen.",
"account_edit.verified_modal.step2.header": "Lisää verkkosivustosi mukautettuna kenttänä", "account_edit.verified_modal.step2.header": "Lisää verkkosivustosi mukautettuna kenttänä",
"account_edit.verified_modal.title": "Miten lisätä vahvistettu linkki",
"account_edit_tags.add_tag": "Lisää #{tagName}", "account_edit_tags.add_tag": "Lisää #{tagName}",
"account_edit_tags.column_title": "Muokkaa esiteltäviä aihetunnisteita", "account_edit_tags.column_title": "Muokkaa esiteltäviä aihetunnisteita",
"account_edit_tags.help_text": "Esiteltävät aihetunnisteet auttavat käyttäjiä löytämään profiilisi ja olemaan vuorovaikutuksessa sen kanssa. Ne näkyvät suodattimina profiilisivusi Toiminta-näkymässä.", "account_edit_tags.help_text": "Esiteltävät aihetunnisteet auttavat käyttäjiä löytämään profiilisi ja olemaan vuorovaikutuksessa sen kanssa. Ne näkyvät suodattimina profiilisivusi Toiminta-näkymässä.",
@@ -321,12 +338,14 @@
"collections.create_collection": "Luo kokoelma", "collections.create_collection": "Luo kokoelma",
"collections.delete_collection": "Poista kokoelma", "collections.delete_collection": "Poista kokoelma",
"collections.description_length_hint": "100 merkin rajoitus", "collections.description_length_hint": "100 merkin rajoitus",
"collections.detail.accept_inclusion": "Selvä",
"collections.detail.accounts_heading": "Tilit", "collections.detail.accounts_heading": "Tilit",
"collections.detail.author_added_you": "{author} lisäsi sinut tähän kokoelmaan", "collections.detail.author_added_you": "{author} lisäsi sinut tähän kokoelmaan",
"collections.detail.curated_by_author": "Koonnut {author}", "collections.detail.curated_by_author": "Koonnut {author}",
"collections.detail.curated_by_you": "Itse kokoamasi", "collections.detail.curated_by_you": "Itse kokoamasi",
"collections.detail.loading": "Ladataan kokoelmaa…", "collections.detail.loading": "Ladataan kokoelmaa…",
"collections.detail.other_accounts_in_collection": "Muut tässä kokoelmassa:", "collections.detail.other_accounts_in_collection": "Muut tässä kokoelmassa:",
"collections.detail.revoke_inclusion": "Poista minut",
"collections.detail.sensitive_note": "Tämä kokoelma sisältää tilejä ja sisältöä, jotka saattavat olla arkaluonteisia joillekin käyttäjille.", "collections.detail.sensitive_note": "Tämä kokoelma sisältää tilejä ja sisältöä, jotka saattavat olla arkaluonteisia joillekin käyttäjille.",
"collections.detail.share": "Jaa tämä kokoelma", "collections.detail.share": "Jaa tämä kokoelma",
"collections.edit_details": "Muokkaa tietoja", "collections.edit_details": "Muokkaa tietoja",
@@ -342,6 +361,9 @@
"collections.old_last_post_note": "Julkaissut viimeksi yli viikko sitten", "collections.old_last_post_note": "Julkaissut viimeksi yli viikko sitten",
"collections.remove_account": "Poista tämä tili", "collections.remove_account": "Poista tämä tili",
"collections.report_collection": "Raportoi tämä kokoelma", "collections.report_collection": "Raportoi tämä kokoelma",
"collections.revoke_collection_inclusion": "Poista itseni tästä kokoelmasta",
"collections.revoke_inclusion.confirmation": "Sinut on poistettu kokoelmasta ”{collection}”",
"collections.revoke_inclusion.error": "Tapahtui virhe yritä myöhemmin uudelleen.",
"collections.search_accounts_label": "Hae lisättäviä tilejä…", "collections.search_accounts_label": "Hae lisättäviä tilejä…",
"collections.search_accounts_max_reached": "Olet lisännyt enimmäismäärän tilejä", "collections.search_accounts_max_reached": "Olet lisännyt enimmäismäärän tilejä",
"collections.sensitive": "Arkaluonteinen", "collections.sensitive": "Arkaluonteinen",
@@ -465,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Poista seuraaja", "confirmations.remove_from_followers.confirm": "Poista seuraaja",
"confirmations.remove_from_followers.message": "{name} lakkaa seuraamasta sinua. Haluatko varmasti jatkaa?", "confirmations.remove_from_followers.message": "{name} lakkaa seuraamasta sinua. Haluatko varmasti jatkaa?",
"confirmations.remove_from_followers.title": "Poistetaanko seuraaja?", "confirmations.remove_from_followers.title": "Poistetaanko seuraaja?",
"confirmations.revoke_collection_inclusion.confirm": "Poista minut",
"confirmations.revoke_collection_inclusion.message": "Tämä toimi on pysyvä, eikä kokoaja pysty lisäämään sinua kokoelmaan myöhemmin uudelleen.",
"confirmations.revoke_collection_inclusion.title": "Poistetaanko itsesi tästä kokoelmasta?",
"confirmations.revoke_quote.confirm": "Poista julkaisu", "confirmations.revoke_quote.confirm": "Poista julkaisu",
"confirmations.revoke_quote.message": "Tätä toimea ei voi peruuttaa.", "confirmations.revoke_quote.message": "Tätä toimea ei voi peruuttaa.",
"confirmations.revoke_quote.title": "Poistetaanko julkaisu?", "confirmations.revoke_quote.title": "Poistetaanko julkaisu?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Cruthaigh bailiúchán", "collections.create_collection": "Cruthaigh bailiúchán",
"collections.delete_collection": "Scrios bailiúchán", "collections.delete_collection": "Scrios bailiúchán",
"collections.description_length_hint": "Teorainn 100 carachtar", "collections.description_length_hint": "Teorainn 100 carachtar",
"collections.detail.accept_inclusion": "Ceart go leor",
"collections.detail.accounts_heading": "Cuntais", "collections.detail.accounts_heading": "Cuntais",
"collections.detail.author_added_you": "Chuir {author} leis an mbailiúchán seo thú", "collections.detail.author_added_you": "Chuir {author} leis an mbailiúchán seo thú",
"collections.detail.curated_by_author": "Curtha i dtoll a chéile ag {author}", "collections.detail.curated_by_author": "Curtha i dtoll a chéile ag {author}",
"collections.detail.curated_by_you": "Curtha i dtoll a chéile agatsa", "collections.detail.curated_by_you": "Curtha i dtoll a chéile agatsa",
"collections.detail.loading": "Ag lódáil an bhailiúcháin…", "collections.detail.loading": "Ag lódáil an bhailiúcháin…",
"collections.detail.other_accounts_in_collection": "Daoine eile sa bhailiúchán seo:", "collections.detail.other_accounts_in_collection": "Daoine eile sa bhailiúchán seo:",
"collections.detail.revoke_inclusion": "Bain mé",
"collections.detail.sensitive_note": "Tá cuntais agus ábhar sa bhailiúchán seo a d'fhéadfadh a bheith íogair do roinnt úsáideoirí.", "collections.detail.sensitive_note": "Tá cuntais agus ábhar sa bhailiúchán seo a d'fhéadfadh a bheith íogair do roinnt úsáideoirí.",
"collections.detail.share": "Comhroinn an bailiúchán seo", "collections.detail.share": "Comhroinn an bailiúchán seo",
"collections.edit_details": "Cuir sonraí in eagar", "collections.edit_details": "Cuir sonraí in eagar",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Postáilte go deireanach breis agus seachtain ó shin", "collections.old_last_post_note": "Postáilte go deireanach breis agus seachtain ó shin",
"collections.remove_account": "Bain an cuntas seo", "collections.remove_account": "Bain an cuntas seo",
"collections.report_collection": "Tuairiscigh an bailiúchán seo", "collections.report_collection": "Tuairiscigh an bailiúchán seo",
"collections.revoke_collection_inclusion": "Bain mé féin as an mbailiúchán seo",
"collections.revoke_inclusion.confirmation": "Baineadh as \"{collection}\" thú",
"collections.revoke_inclusion.error": "Tharla earráid, déan iarracht arís ar ball.",
"collections.search_accounts_label": "Cuardaigh cuntais le cur leis…", "collections.search_accounts_label": "Cuardaigh cuntais le cur leis…",
"collections.search_accounts_max_reached": "Tá an líon uasta cuntas curtha leis agat", "collections.search_accounts_max_reached": "Tá an líon uasta cuntas curtha leis agat",
"collections.sensitive": "Íogair", "collections.sensitive": "Íogair",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Bain leantóir", "confirmations.remove_from_followers.confirm": "Bain leantóir",
"confirmations.remove_from_followers.message": "Scoirfidh {name} de bheith ag leanúint leat. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?", "confirmations.remove_from_followers.message": "Scoirfidh {name} de bheith ag leanúint leat. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?",
"confirmations.remove_from_followers.title": "Bain an leantóir?", "confirmations.remove_from_followers.title": "Bain an leantóir?",
"confirmations.revoke_collection_inclusion.confirm": "Bain mé",
"confirmations.revoke_collection_inclusion.message": "Is gníomh buan é seo, agus ní bheidh an coimeádaí in ann tú a chur leis an mbailiúchán arís níos déanaí.",
"confirmations.revoke_collection_inclusion.title": "Bain tú féin den bhailiúchán seo?",
"confirmations.revoke_quote.confirm": "Bain postáil", "confirmations.revoke_quote.confirm": "Bain postáil",
"confirmations.revoke_quote.message": "Ní féidir an gníomh seo a chealú.", "confirmations.revoke_quote.message": "Ní féidir an gníomh seo a chealú.",
"confirmations.revoke_quote.title": "Bain postáil?", "confirmations.revoke_quote.title": "Bain postáil?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Crear colección", "collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección", "collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Límite de 100 caracteres", "collections.description_length_hint": "Límite de 100 caracteres",
"collections.detail.accept_inclusion": "Vale",
"collections.detail.accounts_heading": "Contas", "collections.detail.accounts_heading": "Contas",
"collections.detail.author_added_you": "{author} engadíute a esta colección", "collections.detail.author_added_you": "{author} engadíute a esta colección",
"collections.detail.curated_by_author": "Seleccionadas por {author}", "collections.detail.curated_by_author": "Seleccionadas por {author}",
"collections.detail.curated_by_you": "Seleccionadas por ti", "collections.detail.curated_by_you": "Seleccionadas por ti",
"collections.detail.loading": "Cargando colección…", "collections.detail.loading": "Cargando colección…",
"collections.detail.other_accounts_in_collection": "Outras contas na colección:", "collections.detail.other_accounts_in_collection": "Outras contas na colección:",
"collections.detail.revoke_inclusion": "Non quero",
"collections.detail.sensitive_note": "Esta colección presenta contas e contido que poderían ser sensibles para algunhas persoas.", "collections.detail.sensitive_note": "Esta colección presenta contas e contido que poderían ser sensibles para algunhas persoas.",
"collections.detail.share": "Compartir esta colección", "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar detalles", "collections.edit_details": "Editar detalles",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Hai máis dunha semana da última publicación", "collections.old_last_post_note": "Hai máis dunha semana da última publicación",
"collections.remove_account": "Retirar esta conta", "collections.remove_account": "Retirar esta conta",
"collections.report_collection": "Denunciar esta colección", "collections.report_collection": "Denunciar esta colección",
"collections.revoke_collection_inclusion": "Sácame desta colección",
"collections.revoke_inclusion.confirmation": "Quitámoste da colección \"{collection}\"",
"collections.revoke_inclusion.error": "Algo fallou, inténtao outra vez máis tarde.",
"collections.search_accounts_label": "Buscar contas para engadir…", "collections.search_accounts_label": "Buscar contas para engadir…",
"collections.search_accounts_max_reached": "Acadaches o máximo de contas permitidas", "collections.search_accounts_max_reached": "Acadaches o máximo de contas permitidas",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Quitar seguidora", "confirmations.remove_from_followers.confirm": "Quitar seguidora",
"confirmations.remove_from_followers.message": "{name} vai deixar de seguirte. É isto o que queres?", "confirmations.remove_from_followers.message": "{name} vai deixar de seguirte. É isto o que queres?",
"confirmations.remove_from_followers.title": "Quitar seguidora?", "confirmations.remove_from_followers.title": "Quitar seguidora?",
"confirmations.revoke_collection_inclusion.confirm": "Quítame",
"confirmations.revoke_collection_inclusion.message": "A acción é definitiva, a creadora da colección non poderá volver a engadirte máis adiante.",
"confirmations.revoke_collection_inclusion.title": "Queres que non te inclúan nesta colección?",
"confirmations.revoke_quote.confirm": "Eliminar publicación", "confirmations.revoke_quote.confirm": "Eliminar publicación",
"confirmations.revoke_quote.message": "Esta acción non se pode desfacer.", "confirmations.revoke_quote.message": "Esta acción non se pode desfacer.",
"confirmations.revoke_quote.title": "Eliminar publicación?", "confirmations.revoke_quote.title": "Eliminar publicación?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "יצירת אוסף", "collections.create_collection": "יצירת אוסף",
"collections.delete_collection": "מחיקת האוסף", "collections.delete_collection": "מחיקת האוסף",
"collections.description_length_hint": "מגבלה של 100 תווים", "collections.description_length_hint": "מגבלה של 100 תווים",
"collections.detail.accept_inclusion": "אישור",
"collections.detail.accounts_heading": "חשבונות", "collections.detail.accounts_heading": "חשבונות",
"collections.detail.author_added_you": "{author} הוסיפו אותך לאוסף", "collections.detail.author_added_you": "{author} הוסיפו אותך לאוסף",
"collections.detail.curated_by_author": "נאצר על ידי {author}", "collections.detail.curated_by_author": "נאצר על ידי {author}",
"collections.detail.curated_by_you": "נאצר על ידיך", "collections.detail.curated_by_you": "נאצר על ידיך",
"collections.detail.loading": "טוען אוסף…", "collections.detail.loading": "טוען אוסף…",
"collections.detail.other_accounts_in_collection": "אחרים באוסף:", "collections.detail.other_accounts_in_collection": "אחרים באוסף:",
"collections.detail.revoke_inclusion": "הסירוני",
"collections.detail.sensitive_note": "האוסף מכיל חשבונות ותכנים שאולי יחשבו רגישים לחלק מהמשתמשים.", "collections.detail.sensitive_note": "האוסף מכיל חשבונות ותכנים שאולי יחשבו רגישים לחלק מהמשתמשים.",
"collections.detail.share": "שיתוף אוסף", "collections.detail.share": "שיתוף אוסף",
"collections.edit_details": "עריכת פרטים", "collections.edit_details": "עריכת פרטים",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "פרסמו לאחרונה לפני יותר משבוע", "collections.old_last_post_note": "פרסמו לאחרונה לפני יותר משבוע",
"collections.remove_account": "הסר חשבון זה", "collections.remove_account": "הסר חשבון זה",
"collections.report_collection": "דיווח על אוסף זה", "collections.report_collection": "דיווח על אוסף זה",
"collections.revoke_collection_inclusion": "הסירוני מאוסף זה",
"collections.revoke_inclusion.confirmation": "הוסרת מֿ\"{collection}\"",
"collections.revoke_inclusion.error": "הייתה שגיאה. נסו שוב מאוחר יותר.",
"collections.search_accounts_label": "לחפש חשבונות להוספה…", "collections.search_accounts_label": "לחפש חשבונות להוספה…",
"collections.search_accounts_max_reached": "הגעת למספר החשבונות המירבי", "collections.search_accounts_max_reached": "הגעת למספר החשבונות המירבי",
"collections.sensitive": "רגיש", "collections.sensitive": "רגיש",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "הסרת עוקב", "confirmations.remove_from_followers.confirm": "הסרת עוקב",
"confirmations.remove_from_followers.message": "{name} יוסר/תוסר ממעקב אחריך. האם להמשיך?", "confirmations.remove_from_followers.message": "{name} יוסר/תוסר ממעקב אחריך. האם להמשיך?",
"confirmations.remove_from_followers.title": "להסיר עוקב/עוקבת?", "confirmations.remove_from_followers.title": "להסיר עוקב/עוקבת?",
"confirmations.revoke_collection_inclusion.confirm": "הסירוני",
"confirmations.revoke_collection_inclusion.message": "פעולה זו היא סופית, והאוצרים לא יוכלו להוסיף אותך יותר לאוסף בעתיד.",
"confirmations.revoke_collection_inclusion.title": "להסירך מאוסף זה?",
"confirmations.revoke_quote.confirm": "הסרת הודעה", "confirmations.revoke_quote.confirm": "הסרת הודעה",
"confirmations.revoke_quote.message": "פעולה זו אינה הפיכה.", "confirmations.revoke_quote.message": "פעולה זו אינה הפיכה.",
"confirmations.revoke_quote.title": "הסרת הודעה?", "confirmations.revoke_quote.title": "הסרת הודעה?",

View File

@@ -153,20 +153,33 @@
"account_edit.column_title": "Profil szerkesztése", "account_edit.column_title": "Profil szerkesztése",
"account_edit.custom_fields.name": "mező", "account_edit.custom_fields.name": "mező",
"account_edit.custom_fields.placeholder": "Add meg a névmásaidat, külső hivatkozásaidat vagy bármi mást, amelyet megosztanál.", "account_edit.custom_fields.placeholder": "Add meg a névmásaidat, külső hivatkozásaidat vagy bármi mást, amelyet megosztanál.",
"account_edit.custom_fields.reorder_button": "Mezők átrendezése",
"account_edit.custom_fields.tip_content": "Könnyedén nagyobb hitelességet adhatsz a Mastodon-fiókodnak a saját weboldalaidra mutató hivatkozások megerősítésével.",
"account_edit.custom_fields.tip_title": "Tipp: Ellenőrzött hivatkozások hozzáadása",
"account_edit.custom_fields.title": "Egyéni mezők", "account_edit.custom_fields.title": "Egyéni mezők",
"account_edit.custom_fields.verified_hint": "Hogyan kell ellenőrzött hivatkozást hozzáadni?",
"account_edit.display_name.placeholder": "A megjelenítendő név az, ahogy a neved megjelenik a profilodon és az idővonalakon.", "account_edit.display_name.placeholder": "A megjelenítendő név az, ahogy a neved megjelenik a profilodon és az idővonalakon.",
"account_edit.display_name.title": "Megjelenítendő név", "account_edit.display_name.title": "Megjelenítendő név",
"account_edit.featured_hashtags.item": "hashtagek", "account_edit.featured_hashtags.item": "hashtagek",
"account_edit.featured_hashtags.placeholder": "Segíts másoknak, hogy azonosíthassák a kedvenc témáid, és gyorsan elérjék azokat.", "account_edit.featured_hashtags.placeholder": "Segíts másoknak, hogy azonosíthassák a kedvenc témáid, és gyorsan elérjék azokat.",
"account_edit.featured_hashtags.title": "Kiemelt hashtagek", "account_edit.featured_hashtags.title": "Kiemelt hashtagek",
"account_edit.field_delete_modal.confirm": "Biztos, hogy töröld ezt az egyéni mezőt? Ez a művelet nem vonható vissza.",
"account_edit.field_delete_modal.delete_button": "Törlés", "account_edit.field_delete_modal.delete_button": "Törlés",
"account_edit.field_delete_modal.title": "Egyéni mező törlése?", "account_edit.field_delete_modal.title": "Egyéni mező törlése?",
"account_edit.field_edit_modal.add_title": "Egyéni mező hozzáadása", "account_edit.field_edit_modal.add_title": "Egyéni mező hozzáadása",
"account_edit.field_edit_modal.edit_title": "Egyéni mező szerkesztése", "account_edit.field_edit_modal.edit_title": "Egyéni mező szerkesztése",
"account_edit.field_edit_modal.limit_header": "Az ajánlott karakterkorlát túllépve",
"account_edit.field_edit_modal.limit_message": "A mobilos felhasználók lehet, hogy nem fogják a teljes mezőt látni.",
"account_edit.field_edit_modal.link_emoji_warning": "Nem javasoljuk az egyéni emodzsik és webcímek együttes használatát. A mindkettőt tartalmazó egyéni mezők a felhasználók megzavarásának elkerülése érdekében csak szövegként jelennek meg, nem hivatkozásként.",
"account_edit.field_edit_modal.name_hint": "Például „Személyes webhely”", "account_edit.field_edit_modal.name_hint": "Például „Személyes webhely”",
"account_edit.field_edit_modal.name_label": "Címke", "account_edit.field_edit_modal.name_label": "Címke",
"account_edit.field_edit_modal.value_hint": "Például „example.me”", "account_edit.field_edit_modal.value_hint": "Például „example.me”",
"account_edit.field_edit_modal.value_label": "Érték", "account_edit.field_edit_modal.value_label": "Érték",
"account_edit.field_reorder_modal.drag_cancel": "Az áthúzás megszakítva. A(z) „{item}” mező el lett dobva.",
"account_edit.field_reorder_modal.drag_end": "A(z) „{item}” mező el lett dobva.",
"account_edit.field_reorder_modal.drag_move": "A(z) „{item}” mező át lett helyezve.",
"account_edit.field_reorder_modal.handle_label": "A(z) „{item}” mező húzása",
"account_edit.field_reorder_modal.title": "Mezők átrendezése",
"account_edit.name_modal.add_title": "Megjelenítendő név hozzáadása", "account_edit.name_modal.add_title": "Megjelenítendő név hozzáadása",
"account_edit.name_modal.edit_title": "Megjelenítendő név szerkesztése", "account_edit.name_modal.edit_title": "Megjelenítendő név szerkesztése",
"account_edit.profile_tab.button_label": "Testreszabás", "account_edit.profile_tab.button_label": "Testreszabás",
@@ -181,6 +194,9 @@
"account_edit.profile_tab.subtitle": "Szabd testre a profilodon látható lapokat, és a megjelenített tartalmukat.", "account_edit.profile_tab.subtitle": "Szabd testre a profilodon látható lapokat, és a megjelenített tartalmukat.",
"account_edit.profile_tab.title": "Profil lap beállításai", "account_edit.profile_tab.title": "Profil lap beállításai",
"account_edit.save": "Mentés", "account_edit.save": "Mentés",
"account_edit.verified_modal.invisible_link.summary": "Hogyan lehet egy hivatkozás láthatatlanná tenni?",
"account_edit.verified_modal.step1.header": "Másold a lenti HTML-kódot és illeszd be a webhelyed fejlécébe",
"account_edit.verified_modal.step2.details": "Ha már egyéni mezőként hozzáadtad a webhelyedet, akkor törölnöd kell, újból hozzá kell adnod, hogy újra ellenőrizve legyen.",
"account_edit.verified_modal.step2.header": "Saját webhely hozzáadása egyéni mezőként", "account_edit.verified_modal.step2.header": "Saját webhely hozzáadása egyéni mezőként",
"account_edit.verified_modal.title": "Hogyan kell ellenőrzött hivatkozást hozzáadni", "account_edit.verified_modal.title": "Hogyan kell ellenőrzött hivatkozást hozzáadni",
"account_edit_tags.add_tag": "#{tagName} hozzáadása", "account_edit_tags.add_tag": "#{tagName} hozzáadása",
@@ -317,12 +333,14 @@
"collections.create_collection": "Gyűjtemény létrehozása", "collections.create_collection": "Gyűjtemény létrehozása",
"collections.delete_collection": "Gyűjtemény törlése", "collections.delete_collection": "Gyűjtemény törlése",
"collections.description_length_hint": "100 karakteres korlát", "collections.description_length_hint": "100 karakteres korlát",
"collections.detail.accept_inclusion": "Rendben",
"collections.detail.accounts_heading": "Fiókok", "collections.detail.accounts_heading": "Fiókok",
"collections.detail.author_added_you": "{author} hozzáadott ehhez a gyűjteményhez", "collections.detail.author_added_you": "{author} hozzáadott ehhez a gyűjteményhez",
"collections.detail.curated_by_author": "Válogatta: {author}", "collections.detail.curated_by_author": "Válogatta: {author}",
"collections.detail.curated_by_you": "Te válogattad", "collections.detail.curated_by_you": "Te válogattad",
"collections.detail.loading": "Gyűjtemény betöltése…", "collections.detail.loading": "Gyűjtemény betöltése…",
"collections.detail.other_accounts_in_collection": "Mások ebben a gyűjteményben:", "collections.detail.other_accounts_in_collection": "Mások ebben a gyűjteményben:",
"collections.detail.revoke_inclusion": "Saját magam eltávolítása",
"collections.detail.sensitive_note": "Ebben a gyűjteményben egyesek számára érzékeny fiókok és tartalmak vannak.", "collections.detail.sensitive_note": "Ebben a gyűjteményben egyesek számára érzékeny fiókok és tartalmak vannak.",
"collections.detail.share": "Gyűjtemény megosztása", "collections.detail.share": "Gyűjtemény megosztása",
"collections.edit_details": "Részletek szerkesztése", "collections.edit_details": "Részletek szerkesztése",
@@ -338,6 +356,9 @@
"collections.old_last_post_note": "Egy hete osztott meg legutóbb", "collections.old_last_post_note": "Egy hete osztott meg legutóbb",
"collections.remove_account": "Fiók eltávolítása", "collections.remove_account": "Fiók eltávolítása",
"collections.report_collection": "Gyűjtemény jelentése", "collections.report_collection": "Gyűjtemény jelentése",
"collections.revoke_collection_inclusion": "Saját magam eltávolítása ebből a gyűjteményből",
"collections.revoke_inclusion.confirmation": "El lettél távolítva innen: „{collection}”",
"collections.revoke_inclusion.error": "Hiba történt, próbáld újra később.",
"collections.search_accounts_label": "Hozzáadandó fiókok keresése…", "collections.search_accounts_label": "Hozzáadandó fiókok keresése…",
"collections.search_accounts_max_reached": "Elérte a hozzáadott fiókok maximális számát", "collections.search_accounts_max_reached": "Elérte a hozzáadott fiókok maximális számát",
"collections.sensitive": "Érzékeny", "collections.sensitive": "Érzékeny",
@@ -461,6 +482,9 @@
"confirmations.remove_from_followers.confirm": "Követő eltávolítása", "confirmations.remove_from_followers.confirm": "Követő eltávolítása",
"confirmations.remove_from_followers.message": "{name} követ téged. Biztos, hogy folytatod?", "confirmations.remove_from_followers.message": "{name} követ téged. Biztos, hogy folytatod?",
"confirmations.remove_from_followers.title": "Követő eltávolítása?", "confirmations.remove_from_followers.title": "Követő eltávolítása?",
"confirmations.revoke_collection_inclusion.confirm": "Saját magam eltávolítása",
"confirmations.revoke_collection_inclusion.message": "Ez a művelet végleges, és a kurátor nem fog tudni újra hozzáadni ehhez a gyűjteményhez.",
"confirmations.revoke_collection_inclusion.title": "Eltávolítod magadat ebből a gyűjteményből?",
"confirmations.revoke_quote.confirm": "Bejegyzés eltávolítása", "confirmations.revoke_quote.confirm": "Bejegyzés eltávolítása",
"confirmations.revoke_quote.message": "Ez a művelet nem vonható vissza.", "confirmations.revoke_quote.message": "Ez a művelet nem vonható vissza.",
"confirmations.revoke_quote.title": "Bejegyzés eltávolítása?", "confirmations.revoke_quote.title": "Bejegyzés eltávolítása?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Búa til safn", "collections.create_collection": "Búa til safn",
"collections.delete_collection": "Eyða safni", "collections.delete_collection": "Eyða safni",
"collections.description_length_hint": "100 stafa takmörk", "collections.description_length_hint": "100 stafa takmörk",
"collections.detail.accept_inclusion": "Í lagi",
"collections.detail.accounts_heading": "Aðgangar", "collections.detail.accounts_heading": "Aðgangar",
"collections.detail.author_added_you": "{author} bætti þér í þetta safn", "collections.detail.author_added_you": "{author} bætti þér í þetta safn",
"collections.detail.curated_by_author": "Safnað saman af {author}", "collections.detail.curated_by_author": "Safnað saman af {author}",
"collections.detail.curated_by_you": "Safnað saman af þér", "collections.detail.curated_by_you": "Safnað saman af þér",
"collections.detail.loading": "Hleð inn safni…", "collections.detail.loading": "Hleð inn safni…",
"collections.detail.other_accounts_in_collection": "Aðrir í þessu safni:", "collections.detail.other_accounts_in_collection": "Aðrir í þessu safni:",
"collections.detail.revoke_inclusion": "Fjarlægja mig",
"collections.detail.sensitive_note": "Þetta safn inniheldur aðganga og efni sem sumir notendur gætu verið viðkvæmir fyrir.", "collections.detail.sensitive_note": "Þetta safn inniheldur aðganga og efni sem sumir notendur gætu verið viðkvæmir fyrir.",
"collections.detail.share": "Deila þessu safni", "collections.detail.share": "Deila þessu safni",
"collections.edit_details": "Breyta ítarupplýsingum", "collections.edit_details": "Breyta ítarupplýsingum",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Birti síðast fyrir meira en viku síðan", "collections.old_last_post_note": "Birti síðast fyrir meira en viku síðan",
"collections.remove_account": "Fjarlægja þennan aðgang", "collections.remove_account": "Fjarlægja þennan aðgang",
"collections.report_collection": "Kæra þetta safn", "collections.report_collection": "Kæra þetta safn",
"collections.revoke_collection_inclusion": "Fjarlægja mig úr þessu safni",
"collections.revoke_inclusion.confirmation": "Þú varst fjarlægð/ur úr \"{collection}\"",
"collections.revoke_inclusion.error": "Upp kom villa, reyndu aftur síðar.",
"collections.search_accounts_label": "Leita að aðgöngum til að bæta við…", "collections.search_accounts_label": "Leita að aðgöngum til að bæta við…",
"collections.search_accounts_max_reached": "Þú hefur þegar bætt við leyfilegum hámarksfjölda aðganga", "collections.search_accounts_max_reached": "Þú hefur þegar bætt við leyfilegum hámarksfjölda aðganga",
"collections.sensitive": "Viðkvæmt", "collections.sensitive": "Viðkvæmt",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Fjarlægja fylgjanda", "confirmations.remove_from_followers.confirm": "Fjarlægja fylgjanda",
"confirmations.remove_from_followers.message": "{name} mun hætta að fylgjast með þér. Ertu viss um að þú viljir halda áfram?", "confirmations.remove_from_followers.message": "{name} mun hætta að fylgjast með þér. Ertu viss um að þú viljir halda áfram?",
"confirmations.remove_from_followers.title": "Fjarlægja fylgjanda?", "confirmations.remove_from_followers.title": "Fjarlægja fylgjanda?",
"confirmations.revoke_collection_inclusion.confirm": "Fjarlægja mig",
"confirmations.revoke_collection_inclusion.message": "Þessi aðgerð er varanleg og umsjónaraðili safnsins mun ekki geta bætt þér aftur við síðar.",
"confirmations.revoke_collection_inclusion.title": "Á að fjarlægja þig úr þessu safni?",
"confirmations.revoke_quote.confirm": "Fjarlægja færslu", "confirmations.revoke_quote.confirm": "Fjarlægja færslu",
"confirmations.revoke_quote.message": "Þessa aðgerð er ekki hægt að afturkalla.", "confirmations.revoke_quote.message": "Þessa aðgerð er ekki hægt að afturkalla.",
"confirmations.revoke_quote.title": "Fjarlægja færslu?", "confirmations.revoke_quote.title": "Fjarlægja færslu?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Crea la collezione", "collections.create_collection": "Crea la collezione",
"collections.delete_collection": "Cancella la collezione", "collections.delete_collection": "Cancella la collezione",
"collections.description_length_hint": "Limite di 100 caratteri", "collections.description_length_hint": "Limite di 100 caratteri",
"collections.detail.accept_inclusion": "Va bene",
"collections.detail.accounts_heading": "Account", "collections.detail.accounts_heading": "Account",
"collections.detail.author_added_you": "{author} ti ha aggiunto a questa collezione", "collections.detail.author_added_you": "{author} ti ha aggiunto a questa collezione",
"collections.detail.curated_by_author": "Curata da {author}", "collections.detail.curated_by_author": "Curata da {author}",
"collections.detail.curated_by_you": "Curata da te", "collections.detail.curated_by_you": "Curata da te",
"collections.detail.loading": "Caricamento della collezione…", "collections.detail.loading": "Caricamento della collezione…",
"collections.detail.other_accounts_in_collection": "Altri in questa collezione:", "collections.detail.other_accounts_in_collection": "Altri in questa collezione:",
"collections.detail.revoke_inclusion": "Rimuovimi",
"collections.detail.sensitive_note": "Questa collezione contiene account e contenuto che potrebbero essere sensibili ad alcuni utenti.", "collections.detail.sensitive_note": "Questa collezione contiene account e contenuto che potrebbero essere sensibili ad alcuni utenti.",
"collections.detail.share": "Condividi questa collezione", "collections.detail.share": "Condividi questa collezione",
"collections.edit_details": "Modifica i dettagli", "collections.edit_details": "Modifica i dettagli",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Ultimo post più di una settimana fa", "collections.old_last_post_note": "Ultimo post più di una settimana fa",
"collections.remove_account": "Rimuovi questo account", "collections.remove_account": "Rimuovi questo account",
"collections.report_collection": "Segnala questa collezione", "collections.report_collection": "Segnala questa collezione",
"collections.revoke_collection_inclusion": "Rimuovimi da questa collezione",
"collections.revoke_inclusion.confirmation": "Sei stato/a rimosso/a da \"{collection}\"",
"collections.revoke_inclusion.error": "Si è verificato un errore, si prega di riprovare più tardi.",
"collections.search_accounts_label": "Cerca account da aggiungere…", "collections.search_accounts_label": "Cerca account da aggiungere…",
"collections.search_accounts_max_reached": "Hai aggiunto il numero massimo di account", "collections.search_accounts_max_reached": "Hai aggiunto il numero massimo di account",
"collections.sensitive": "Sensibile", "collections.sensitive": "Sensibile",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Rimuovi il follower", "confirmations.remove_from_followers.confirm": "Rimuovi il follower",
"confirmations.remove_from_followers.message": "{name} smetterà di seguirti. Si è sicuri di voler procedere?", "confirmations.remove_from_followers.message": "{name} smetterà di seguirti. Si è sicuri di voler procedere?",
"confirmations.remove_from_followers.title": "Rimuovere il follower?", "confirmations.remove_from_followers.title": "Rimuovere il follower?",
"confirmations.revoke_collection_inclusion.confirm": "Rimuovimi",
"confirmations.revoke_collection_inclusion.message": "Questa azione è permanente e l'utente responsabile della collezione non sarà in grado di aggiungerti nuovamente ad essa in seguito.",
"confirmations.revoke_collection_inclusion.title": "Rimuovere te stesso/a da questa collezione?",
"confirmations.revoke_quote.confirm": "Elimina il post", "confirmations.revoke_quote.confirm": "Elimina il post",
"confirmations.revoke_quote.message": "Questa azione non può essere annullata.", "confirmations.revoke_quote.message": "Questa azione non può essere annullata.",
"confirmations.revoke_quote.title": "Rimuovere il post?", "confirmations.revoke_quote.title": "Rimuovere il post?",

View File

@@ -151,13 +151,38 @@
"account_edit.button.edit": "{item} bewerken", "account_edit.button.edit": "{item} bewerken",
"account_edit.column_button": "Klaar", "account_edit.column_button": "Klaar",
"account_edit.column_title": "Profiel bewerken", "account_edit.column_title": "Profiel bewerken",
"account_edit.custom_fields.name": "veld",
"account_edit.custom_fields.placeholder": "Voeg je voornaamwoorden, externe links of iets anders toe dat je wilt delen.", "account_edit.custom_fields.placeholder": "Voeg je voornaamwoorden, externe links of iets anders toe dat je wilt delen.",
"account_edit.custom_fields.reorder_button": "Velden opnieuw ordenen",
"account_edit.custom_fields.tip_content": "Je kunt gemakkelijk geloofwaardigheid toevoegen aan je Mastodon account door links te controleren naar websites die je bezit.",
"account_edit.custom_fields.tip_title": "Tip: Geverifieerde links toevoegen",
"account_edit.custom_fields.title": "Extra velden", "account_edit.custom_fields.title": "Extra velden",
"account_edit.custom_fields.verified_hint": "Hoe voeg ik een geverifieerde link toe?",
"account_edit.display_name.placeholder": "Je weergavenaam wordt op jouw profiel en op tijdlijnen weergegeven.", "account_edit.display_name.placeholder": "Je weergavenaam wordt op jouw profiel en op tijdlijnen weergegeven.",
"account_edit.display_name.title": "Weergavenaam", "account_edit.display_name.title": "Weergavenaam",
"account_edit.featured_hashtags.item": "hashtags", "account_edit.featured_hashtags.item": "hashtags",
"account_edit.featured_hashtags.placeholder": "Geef anderen een overzicht van en snel toegang tot je favoriete onderwerpen.", "account_edit.featured_hashtags.placeholder": "Geef anderen een overzicht van en snel toegang tot je favoriete onderwerpen.",
"account_edit.featured_hashtags.title": "Uitgelichte hashtags", "account_edit.featured_hashtags.title": "Uitgelichte hashtags",
"account_edit.field_delete_modal.confirm": "Weet je zeker dat je dit aangepaste veld wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.",
"account_edit.field_delete_modal.delete_button": "Verwijderen",
"account_edit.field_delete_modal.title": "Aangepast veld verwijderen?",
"account_edit.field_edit_modal.add_title": "Aangepast veld toevoegen",
"account_edit.field_edit_modal.edit_title": "Aangepast veld bewerken",
"account_edit.field_edit_modal.limit_header": "Aanbevolen tekenlimiet overschreden",
"account_edit.field_edit_modal.limit_message": "Mobiele gebruikers zien mogelijk het veld niet volledig.",
"account_edit.field_edit_modal.link_emoji_warning": "We raden aan om aangepaste emoji in combinatie met urls te gebruiken. Aangepaste velden die beide bevatten worden alleen als tekst weergegeven in plaats van als een link, om verwarring van de gebruiker te voorkomen.",
"account_edit.field_edit_modal.name_hint": "Bijv. \"Persoonlijke website\"",
"account_edit.field_edit_modal.name_label": "Label",
"account_edit.field_edit_modal.value_hint": "Bijv. \"voorbeeld.me\"",
"account_edit.field_edit_modal.value_label": "Waarde",
"account_edit.field_reorder_modal.drag_cancel": "Slepen is geannuleerd. Veld \"{item}\" is weggevallen.",
"account_edit.field_reorder_modal.drag_end": "Veld \"{item}\" was weggevallen.",
"account_edit.field_reorder_modal.drag_instructions": "Druk op spatie of enter om aangepaste velden te herschikken. Gebruik de pijltjestoetsen om het veld omhoog of omlaag te verplaatsen. Druk opnieuw op spatie of enter om het veld in zijn nieuwe positie te laten vallen, of druk op escape om te annuleren.",
"account_edit.field_reorder_modal.drag_move": "Veld \"{item}\" is verplaatst.",
"account_edit.field_reorder_modal.drag_over": "Veld \"{item}\" is over \"{over} \" verplaatst.",
"account_edit.field_reorder_modal.drag_start": "Opgepakt veld \"{item}\".",
"account_edit.field_reorder_modal.handle_label": "Veld \"{item}\" slepen",
"account_edit.field_reorder_modal.title": "Velden herschikken",
"account_edit.name_modal.add_title": "Weergavenaam toevoegen", "account_edit.name_modal.add_title": "Weergavenaam toevoegen",
"account_edit.name_modal.edit_title": "Weergavenaam bewerken", "account_edit.name_modal.edit_title": "Weergavenaam bewerken",
"account_edit.profile_tab.button_label": "Aanpassen", "account_edit.profile_tab.button_label": "Aanpassen",
@@ -172,6 +197,13 @@
"account_edit.profile_tab.subtitle": "De tabbladen op je profiel aanpassen en wat er op wordt weergegeven.", "account_edit.profile_tab.subtitle": "De tabbladen op je profiel aanpassen en wat er op wordt weergegeven.",
"account_edit.profile_tab.title": "Instellingen voor tabblad Profiel", "account_edit.profile_tab.title": "Instellingen voor tabblad Profiel",
"account_edit.save": "Opslaan", "account_edit.save": "Opslaan",
"account_edit.verified_modal.details": "Voeg geloofwaardigheid toe aan je Mastodonprofiel door links naar persoonlijke websites te verifiëren. Zo werkt het:",
"account_edit.verified_modal.invisible_link.details": "Voeg de link toe aan uw header. Het belangrijke onderdeel is rel=\"me\" om te voorkomen dat websites impersoneren met door de gebruiker gegenereerde inhoud. Je kunt zelfs een linktag gebruiken in de kop van de pagina in plaats van {tag}, maar de HTML moet toegankelijk zijn zonder JavaScript uit te voeren.",
"account_edit.verified_modal.invisible_link.summary": "Hoe maak ik de link onzichtbaar?",
"account_edit.verified_modal.step1.header": "Kopieer de onderstaande HTML-code en plak deze in de koptekst van je website",
"account_edit.verified_modal.step2.details": "Als je je website al als een aangepast veld hebt toegevoegd, moet je deze verwijderen en opnieuw toevoegen om de verificatie te activeren.",
"account_edit.verified_modal.step2.header": "Voeg je website toe als een aangepast veld",
"account_edit.verified_modal.title": "Hoe voeg je een geverifieerde link toe",
"account_edit_tags.add_tag": "#{tagName} toevoegen", "account_edit_tags.add_tag": "#{tagName} toevoegen",
"account_edit_tags.column_title": "Uitgelichte hashtags bewerken", "account_edit_tags.column_title": "Uitgelichte hashtags bewerken",
"account_edit_tags.help_text": "Uitgelichte hashtags helpen gebruikers je profiel te ontdekken en om er interactie mee te communiceren. Ze verschijnen als filters op je Profielpagina onder het tabblad Activiteit.", "account_edit_tags.help_text": "Uitgelichte hashtags helpen gebruikers je profiel te ontdekken en om er interactie mee te communiceren. Ze verschijnen als filters op je Profielpagina onder het tabblad Activiteit.",
@@ -275,6 +307,8 @@
"callout.dismiss": "Afwijzen", "callout.dismiss": "Afwijzen",
"carousel.current": "<sr>Bericht</sr> {current, number} / {max, number}", "carousel.current": "<sr>Bericht</sr> {current, number} / {max, number}",
"carousel.slide": "Bericht {current, number} van {max, number}", "carousel.slide": "Bericht {current, number} van {max, number}",
"character_counter.recommended": "{currentLength}/{maxLength} aanbevolen tekens",
"character_counter.required": "{currentLength}/{maxLength} tekens",
"closed_registrations.other_server_instructions": "Omdat Mastodon gedecentraliseerd is, kun je op een andere server een account registreren en vanaf daar nog steeds met deze server communiceren.", "closed_registrations.other_server_instructions": "Omdat Mastodon gedecentraliseerd is, kun je op een andere server een account registreren en vanaf daar nog steeds met deze server communiceren.",
"closed_registrations_modal.description": "Momenteel is het niet mogelijk om op {domain} een account aan te maken. Hou echter in gedachte dat om Mastodon te kunnen gebruiken het niet een vereiste is om op {domain} een account te hebben.", "closed_registrations_modal.description": "Momenteel is het niet mogelijk om op {domain} een account aan te maken. Hou echter in gedachte dat om Mastodon te kunnen gebruiken het niet een vereiste is om op {domain} een account te hebben.",
"closed_registrations_modal.find_another_server": "Een andere server zoeken", "closed_registrations_modal.find_another_server": "Een andere server zoeken",
@@ -304,10 +338,15 @@
"collections.create_collection": "Verzameling aanmaken", "collections.create_collection": "Verzameling aanmaken",
"collections.delete_collection": "Verzameling verwijderen", "collections.delete_collection": "Verzameling verwijderen",
"collections.description_length_hint": "Maximaal 100 karakters", "collections.description_length_hint": "Maximaal 100 karakters",
"collections.detail.accept_inclusion": "Oké",
"collections.detail.accounts_heading": "Accounts", "collections.detail.accounts_heading": "Accounts",
"collections.detail.author_added_you": "{author} heeft je aan deze verzameling toegevoegd",
"collections.detail.curated_by_author": "Samengesteld door {author}", "collections.detail.curated_by_author": "Samengesteld door {author}",
"collections.detail.curated_by_you": "Samengesteld door jou", "collections.detail.curated_by_you": "Samengesteld door jou",
"collections.detail.loading": "Verzameling laden…", "collections.detail.loading": "Verzameling laden…",
"collections.detail.other_accounts_in_collection": "Anderen in deze verzameling:",
"collections.detail.revoke_inclusion": "Verwijder mij",
"collections.detail.sensitive_note": "Deze verzameling bevat accounts en inhoud die mogelijk gevoelig zijn voor sommige gebruikers.",
"collections.detail.share": "Deze verzameling delen", "collections.detail.share": "Deze verzameling delen",
"collections.edit_details": "Gegevens bewerken", "collections.edit_details": "Gegevens bewerken",
"collections.error_loading_collections": "Er is een fout opgetreden bij het laden van je verzamelingen.", "collections.error_loading_collections": "Er is een fout opgetreden bij het laden van je verzamelingen.",
@@ -322,6 +361,9 @@
"collections.old_last_post_note": "Meer dan een week geleden voor het laatst een bericht geplaatst", "collections.old_last_post_note": "Meer dan een week geleden voor het laatst een bericht geplaatst",
"collections.remove_account": "Dit account verwijderen", "collections.remove_account": "Dit account verwijderen",
"collections.report_collection": "Deze verzameling rapporteren", "collections.report_collection": "Deze verzameling rapporteren",
"collections.revoke_collection_inclusion": "Verwijder mezelf uit deze collectie",
"collections.revoke_inclusion.confirmation": "Je bent verwijderd uit \"{collection}\"",
"collections.revoke_inclusion.error": "Er is een fout opgetreden. Probeer het later opnieuw.",
"collections.search_accounts_label": "Naar accounts zoeken om toe te voegen…", "collections.search_accounts_label": "Naar accounts zoeken om toe te voegen…",
"collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd", "collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd",
"collections.sensitive": "Gevoelig", "collections.sensitive": "Gevoelig",
@@ -445,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Volger verwijderen", "confirmations.remove_from_followers.confirm": "Volger verwijderen",
"confirmations.remove_from_followers.message": "{name} zal je niet meer volgen. Weet je zeker dat je wilt doorgaan?", "confirmations.remove_from_followers.message": "{name} zal je niet meer volgen. Weet je zeker dat je wilt doorgaan?",
"confirmations.remove_from_followers.title": "Volger verwijderen?", "confirmations.remove_from_followers.title": "Volger verwijderen?",
"confirmations.revoke_collection_inclusion.confirm": "Verwijder mij",
"confirmations.revoke_collection_inclusion.message": "Deze actie is definitief en de curator kan je later niet opnieuw aan de verzameling toevoegen.",
"confirmations.revoke_collection_inclusion.title": "Verwijder jezelf van deze collectie?",
"confirmations.revoke_quote.confirm": "Bericht verwijderen", "confirmations.revoke_quote.confirm": "Bericht verwijderen",
"confirmations.revoke_quote.message": "Deze actie kan niet ongedaan worden gemaakt.", "confirmations.revoke_quote.message": "Deze actie kan niet ongedaan worden gemaakt.",
"confirmations.revoke_quote.title": "Bericht verwijderen?", "confirmations.revoke_quote.title": "Bericht verwijderen?",
@@ -767,6 +812,7 @@
"navigation_bar.automated_deletion": "Automatisch berichten verwijderen", "navigation_bar.automated_deletion": "Automatisch berichten verwijderen",
"navigation_bar.blocks": "Geblokkeerde gebruikers", "navigation_bar.blocks": "Geblokkeerde gebruikers",
"navigation_bar.bookmarks": "Bladwijzers", "navigation_bar.bookmarks": "Bladwijzers",
"navigation_bar.collections": "Verzamelingen",
"navigation_bar.direct": "Privéberichten", "navigation_bar.direct": "Privéberichten",
"navigation_bar.domain_blocks": "Geblokkeerde servers", "navigation_bar.domain_blocks": "Geblokkeerde servers",
"navigation_bar.favourites": "Favorieten", "navigation_bar.favourites": "Favorieten",

View File

@@ -2,12 +2,12 @@
"about.blocks": "Servidores moderados", "about.blocks": "Servidores moderados",
"about.contact": "Contacto:", "about.contact": "Contacto:",
"about.default_locale": "Padrão", "about.default_locale": "Padrão",
"about.disclaimer": "O Mastodon é um software livre, de código aberto e uma marca registada de Mastodon gGmbH.", "about.disclaimer": "O Mastodon é um 'software' livre, de código aberto e marca registada de Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Motivo não disponível", "about.domain_blocks.no_reason_available": "Motivo não disponível",
"about.domain_blocks.preamble": "O Mastodon ver e interagir com o conteúdo de utilizadores de qualquer outra instância no fediverso. Estas são as exceções desta instância em específico.", "about.domain_blocks.preamble": "O Mastodon, geralmente, permite-lhe ver conteúdo e interagir com utilizadores de qualquer outro servidor na fediverso. Estas são as exceções aplicadas neste servidor em particular.",
"about.domain_blocks.silenced.explanation": "Normalmente não verás perfis e conteúdos deste servidor, a não ser que os procures explicitamente ou optes por segui-los.", "about.domain_blocks.silenced.explanation": "Normalmente não verá perfis e conteúdos deste servidor, a não ser que os procures explicitamente ou opte por segui-los.",
"about.domain_blocks.silenced.title": "Limitados", "about.domain_blocks.silenced.title": "Limitados",
"about.domain_blocks.suspended.explanation": "Nenhum dado deste servidor será processado, armazenado ou trocado, tornando impossível qualquer interação ou comunicação com os utilizadores a partir deste servidor.", "about.domain_blocks.suspended.explanation": "Nenhum dado deste servidor será processado, armazenado ou trocado, impossibilitando qualquer interação ou comunicação com os utilizadores a partir deste servidor.",
"about.domain_blocks.suspended.title": "Suspensos", "about.domain_blocks.suspended.title": "Suspensos",
"about.language_label": "Idioma", "about.language_label": "Idioma",
"about.not_available": "Esta informação não foi disponibilizada neste servidor.", "about.not_available": "Esta informação não foi disponibilizada neste servidor.",
@@ -132,7 +132,7 @@
"account.show_reblogs": "Mostrar partilhas de @{name}", "account.show_reblogs": "Mostrar partilhas de @{name}",
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", "account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
"account.timeline.pinned": "Fixado", "account.timeline.pinned": "Fixado",
"account.timeline.pinned.view_all": "Ver todos as publicações fixadas", "account.timeline.pinned.view_all": "Ver todas as publicações fixadas",
"account.unblock": "Desbloquear @{name}", "account.unblock": "Desbloquear @{name}",
"account.unblock_domain": "Desbloquear o domínio {domain}", "account.unblock_domain": "Desbloquear o domínio {domain}",
"account.unblock_domain_short": "Desbloquear", "account.unblock_domain_short": "Desbloquear",
@@ -142,7 +142,7 @@
"account.unmute": "Desocultar @{name}", "account.unmute": "Desocultar @{name}",
"account.unmute_notifications_short": "Desocultar notificações", "account.unmute_notifications_short": "Desocultar notificações",
"account.unmute_short": "Desocultar", "account.unmute_short": "Desocultar",
"account_edit.bio.placeholder": "Adicione uma breve introdução para ajudar à sua identificação por outros.", "account_edit.bio.placeholder": "Adicione uma breve apresentação para ajudar os outros a identificá-lo.",
"account_edit.bio.title": "Bio", "account_edit.bio.title": "Bio",
"account_edit.bio_modal.add_title": "Adicionar biografia", "account_edit.bio_modal.add_title": "Adicionar biografia",
"account_edit.bio_modal.edit_title": "Editar biografia", "account_edit.bio_modal.edit_title": "Editar biografia",
@@ -155,15 +155,26 @@
"account_edit.custom_fields.placeholder": "Adicione os seus pronomes, hiperligações externas ou qualquer outra coisa que queira partilhar.", "account_edit.custom_fields.placeholder": "Adicione os seus pronomes, hiperligações externas ou qualquer outra coisa que queira partilhar.",
"account_edit.custom_fields.reorder_button": "Reordenar campos", "account_edit.custom_fields.reorder_button": "Reordenar campos",
"account_edit.custom_fields.tip_content": "Pode adicionar facilmente credibilidade à sua conta Mastodon, verificando ligações para qualquer website que possua.", "account_edit.custom_fields.tip_content": "Pode adicionar facilmente credibilidade à sua conta Mastodon, verificando ligações para qualquer website que possua.",
"account_edit.custom_fields.tip_title": "Dica: Adicionando links verificados",
"account_edit.custom_fields.title": "Campos personalizados", "account_edit.custom_fields.title": "Campos personalizados",
"account_edit.display_name.placeholder": "Como o seu nome vai aparecer no seu perfil e nas linhas do tempo.", "account_edit.custom_fields.verified_hint": "Como adiciono um link verificado?",
"account_edit.display_name.placeholder": "O seu nome de exibição é como o seu nome aparece no seu perfil e nas linhas do tempo.",
"account_edit.display_name.title": "Nome a mostrar", "account_edit.display_name.title": "Nome a mostrar",
"account_edit.featured_hashtags.item": "etiquetas", "account_edit.featured_hashtags.item": "etiquetas",
"account_edit.featured_hashtags.placeholder": "Ajude à sua identificação por outros e tenha acesso rápido aos seus tópicos favoritos.", "account_edit.featured_hashtags.placeholder": "Ajude à sua identificação por outros e tenha acesso rápido aos seus tópicos favoritos.",
"account_edit.featured_hashtags.title": "Etiquetas em destaque", "account_edit.featured_hashtags.title": "Etiquetas em destaque",
"account_edit.field_delete_modal.confirm": "Tem certeza de que deseja excluir este campo personalizado? Esta ação não pode ser desfeita.",
"account_edit.field_delete_modal.delete_button": "Excluir",
"account_edit.field_delete_modal.title": "Excluir campo personalizado?",
"account_edit.field_edit_modal.add_title": "Adicionar campo personalizado",
"account_edit.field_edit_modal.edit_title": "Editar campo personalizado",
"account_edit.field_edit_modal.limit_header": "Limite de caracteres recomendado excedido", "account_edit.field_edit_modal.limit_header": "Limite de caracteres recomendado excedido",
"account_edit.field_edit_modal.limit_message": "Os utilizadores de dispositivos móveis podem não conseguir ver o seu campo na totalidade.", "account_edit.field_edit_modal.limit_message": "Os utilizadores de dispositivos móveis podem não conseguir ver o seu campo na totalidade.",
"account_edit.field_edit_modal.link_emoji_warning": "Recomendamos que não utilize emojis personalizados em conjunto com URLs. Os campos personalizados que contenham ambos serão exibidos apenas como texto em vez de uma hiperligação, de modo a evitar a confusão dos utilizadores.", "account_edit.field_edit_modal.link_emoji_warning": "Não recomendamos o uso de emojis personalizados em combinação com URLs. Campos personalizados que contenham ambos serão exibidos apenas como texto, em vez de como hiperligação, para evitar confusão aos utilizadores.",
"account_edit.field_edit_modal.name_hint": "Ex.: \"Site pessoal\"",
"account_edit.field_edit_modal.name_label": "Rótulo",
"account_edit.field_edit_modal.value_hint": "Ex.: “exemplo.me”",
"account_edit.field_edit_modal.value_label": "Valor",
"account_edit.field_reorder_modal.drag_cancel": "O arrastamento foi cancelado. O campo \"{item}\" foi largado.", "account_edit.field_reorder_modal.drag_cancel": "O arrastamento foi cancelado. O campo \"{item}\" foi largado.",
"account_edit.field_reorder_modal.drag_end": "O campo \"{item}\" foi largado.", "account_edit.field_reorder_modal.drag_end": "O campo \"{item}\" foi largado.",
"account_edit.field_reorder_modal.drag_instructions": "Para reorganizar os campos personalizados, prima a tecla de espaço ou enter. Enquanto arrasta, utilize as teclas de setas para mover o campo para cima ou para baixo. Prima novamente a tecla de espaço ou enter para largar o campo na nova posição, ou prima escape para cancelar.", "account_edit.field_reorder_modal.drag_instructions": "Para reorganizar os campos personalizados, prima a tecla de espaço ou enter. Enquanto arrasta, utilize as teclas de setas para mover o campo para cima ou para baixo. Prima novamente a tecla de espaço ou enter para largar o campo na nova posição, ou prima escape para cancelar.",
@@ -177,7 +188,21 @@
"account_edit.profile_tab.button_label": "Personalizar", "account_edit.profile_tab.button_label": "Personalizar",
"account_edit.profile_tab.hint.description": "Estas configurações personalizam o que os utilizadores veem no {server} nas aplicações oficiais, mas podem não se aplicar aos utilizadores de outros servidores nem aplicações de terceiros.", "account_edit.profile_tab.hint.description": "Estas configurações personalizam o que os utilizadores veem no {server} nas aplicações oficiais, mas podem não se aplicar aos utilizadores de outros servidores nem aplicações de terceiros.",
"account_edit.profile_tab.hint.title": "A apresentação ainda pode variar", "account_edit.profile_tab.hint.title": "A apresentação ainda pode variar",
"account_edit.profile_tab.show_featured.description": "\"Destaques\" é uma aba opcional onde pode mostrar outras contas.",
"account_edit.profile_tab.show_featured.title": "Exibir aba “Destaques”",
"account_edit.profile_tab.show_media.description": "\"Mídia\" é uma aba opcional que mostra as suas publicações contendo imagens ou vídeos.",
"account_edit.profile_tab.show_media.title": "Exibir aba \"Mídia\"",
"account_edit.profile_tab.show_media_replies.description": "Quando ativada, a aba \"Mídia\" exibe tanto as suas publicações quanto as suas respostas às publicações de outras pessoas.",
"account_edit.profile_tab.subtitle": "Personalize as abas do seu perfil e o que elas exibem.",
"account_edit.profile_tab.title": "Configurações da aba do perfil",
"account_edit.save": "Guardar", "account_edit.save": "Guardar",
"account_edit.verified_modal.details": "Adicione credibilidade ao seu perfil no Mastodon verificando links para sites pessoais. Veja como funciona:",
"account_edit.verified_modal.invisible_link.details": "Adicione o link ao seu cabeçalho. A parte importante é rel=\"me\", que evita a personificação em sites com conteúdo gerado por utilizadores. Você também pode usar uma tag de link no cabeçalho da página em vez de {tag}, mas o HTML deve ser acessível sem executar JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Como faço para tornar o link invisível?",
"account_edit.verified_modal.step1.header": "Copie o código HTML abaixo e cole no cabeçalho do seu site",
"account_edit.verified_modal.step2.details": "Se já adicionou o seu site como um campo personalizado, será necessário excluí-lo e adicioná-lo novamente para acionar a verificação.",
"account_edit.verified_modal.step2.header": "Adicione o seu site como um campo personalizado",
"account_edit.verified_modal.title": "Como adicionar um link verificado",
"account_edit_tags.add_tag": "Adicionar #{tagName}", "account_edit_tags.add_tag": "Adicionar #{tagName}",
"account_edit_tags.column_title": "Editar etiquetas em destaque", "account_edit_tags.column_title": "Editar etiquetas em destaque",
"account_edit_tags.help_text": "As etiquetas destacadas ajudam os utilizadores a descobrir e interagir com o seu perfil. Aparecem como filtros na vista de atividade da sua página de perfil.", "account_edit_tags.help_text": "As etiquetas destacadas ajudam os utilizadores a descobrir e interagir com o seu perfil. Aparecem como filtros na vista de atividade da sua página de perfil.",
@@ -210,13 +235,13 @@
"annual_report.announcement.action_build": "Criar o meu Wrapstodon", "annual_report.announcement.action_build": "Criar o meu Wrapstodon",
"annual_report.announcement.action_dismiss": "Não, obrigado", "annual_report.announcement.action_dismiss": "Não, obrigado",
"annual_report.announcement.action_view": "Ver o meu Wrapstodon", "annual_report.announcement.action_view": "Ver o meu Wrapstodon",
"annual_report.announcement.description": "Descobre mais sobre o teu envolvimento com o Mastodon durante o último ano.", "annual_report.announcement.description": "Descubra mais sobre a sua interação no Mastodon ao longo do último ano.",
"annual_report.announcement.title": "Chegou o Wrapstodon {year}", "annual_report.announcement.title": "Chegou o Wrapstodon {year}",
"annual_report.nav_item.badge": "Novo", "annual_report.nav_item.badge": "Novo",
"annual_report.shared_page.donate": "Doar", "annual_report.shared_page.donate": "Doar",
"annual_report.shared_page.footer": "Gerado com {heart} pela equipa do Mastodon", "annual_report.shared_page.footer": "Gerado com {heart} pela equipa do Mastodon",
"annual_report.shared_page.footer_server_info": "{username} utiliza {domain}, uma das muitas comunidades baseadas no Mastodon.", "annual_report.shared_page.footer_server_info": "{username} utiliza {domain}, uma das muitas comunidades baseadas no Mastodon.",
"annual_report.summary.archetype.booster.desc_public": "{name} permaneceu à procura de publicações para partilhar, promovendo outros criadores com uma precisão perfeita.", "annual_report.summary.archetype.booster.desc_public": "{name} manteve a procura de publicações para impulsionar, amplificando outros criadores com precisão perfeita.",
"annual_report.summary.archetype.booster.desc_self": "Permaneceu à procura de publicações para partilhar, promovendo outros criadores com uma precisão perfeita.", "annual_report.summary.archetype.booster.desc_self": "Permaneceu à procura de publicações para partilhar, promovendo outros criadores com uma precisão perfeita.",
"annual_report.summary.archetype.booster.name": "O Arqueiro", "annual_report.summary.archetype.booster.name": "O Arqueiro",
"annual_report.summary.archetype.die_drei_fragezeichen": "???", "annual_report.summary.archetype.die_drei_fragezeichen": "???",
@@ -233,7 +258,7 @@
"annual_report.summary.archetype.replier.desc_self": "Respondeu frequentemente às publicações de outras pessoas, polinizando o Mastodon com novas discussões.", "annual_report.summary.archetype.replier.desc_self": "Respondeu frequentemente às publicações de outras pessoas, polinizando o Mastodon com novas discussões.",
"annual_report.summary.archetype.replier.name": "A Borboleta", "annual_report.summary.archetype.replier.name": "A Borboleta",
"annual_report.summary.archetype.reveal": "Revelar o meu arquétipo", "annual_report.summary.archetype.reveal": "Revelar o meu arquétipo",
"annual_report.summary.archetype.reveal_description": "Obrigado por fazer parte do Mastodon! É hora de descobrir qual arquétipo você encarnou em {year}.", "annual_report.summary.archetype.reveal_description": "Obrigado por fazer parte do Mastodon! É hora de descobrir qual arquétipo foi incorporado em {year}.",
"annual_report.summary.archetype.title_public": "Arquétipo de {name}", "annual_report.summary.archetype.title_public": "Arquétipo de {name}",
"annual_report.summary.archetype.title_self": "O seu arquétipo", "annual_report.summary.archetype.title_self": "O seu arquétipo",
"annual_report.summary.close": "Fechar", "annual_report.summary.close": "Fechar",
@@ -255,7 +280,7 @@
"annual_report.summary.share_on_mastodon": "Partilhar no Mastodon", "annual_report.summary.share_on_mastodon": "Partilhar no Mastodon",
"attachments_list.unprocessed": "(não processado)", "attachments_list.unprocessed": "(não processado)",
"audio.hide": "Ocultar áudio", "audio.hide": "Ocultar áudio",
"block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a tua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As publicações públicas podem continuar a ser visíveis para utilizadores não autenticados.", "block_modal.remote_users_caveat": "Solicitaremos ao servidor {domain} que respeite a sua decisão. No entanto, o cumprimento não é garantido, sendo que alguns servidores podem gerir bloqueios de forma diferente. As publicações públicas podem continuar visíveis para utilizadores não autenticados.",
"block_modal.show_less": "Mostrar menos", "block_modal.show_less": "Mostrar menos",
"block_modal.show_more": "Mostrar mais", "block_modal.show_more": "Mostrar mais",
"block_modal.they_cant_mention": "Ele não o pode mencionar nem seguir.", "block_modal.they_cant_mention": "Ele não o pode mencionar nem seguir.",
@@ -269,7 +294,7 @@
"bundle_column_error.copy_stacktrace": "Copiar relatório de erros", "bundle_column_error.copy_stacktrace": "Copiar relatório de erros",
"bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.", "bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.",
"bundle_column_error.error.title": "Ó, não!", "bundle_column_error.error.title": "Ó, não!",
"bundle_column_error.network.body": "Houve um erro ao tentar carregar esta página. Isto pode ocorrer devido a um problema temporário com a tua conexão à internet ou a este servidor.", "bundle_column_error.network.body": "Ocorreu um erro ao tentar carregar esta página. Isto poderá dever-se a um problema temporário na tua ligação à Internet ou neste servidor.",
"bundle_column_error.network.title": "Erro de rede", "bundle_column_error.network.title": "Erro de rede",
"bundle_column_error.retry": "Tenta de novo", "bundle_column_error.retry": "Tenta de novo",
"bundle_column_error.return": "Voltar à página inicial", "bundle_column_error.return": "Voltar à página inicial",
@@ -284,10 +309,11 @@
"character_counter.recommended": "{currentLength}/{maxLength} caracteres recomendados", "character_counter.recommended": "{currentLength}/{maxLength} caracteres recomendados",
"character_counter.required": "{currentLength}/{maxLength} caracteres", "character_counter.required": "{currentLength}/{maxLength} caracteres",
"closed_registrations.other_server_instructions": "Visto que o Mastodon é descentralizado, podes criar uma conta noutro servidor e interagir com este na mesma.", "closed_registrations.other_server_instructions": "Visto que o Mastodon é descentralizado, podes criar uma conta noutro servidor e interagir com este na mesma.",
"closed_registrations_modal.description": "Neste momento não é possível criar uma conta em {domain}, mas lembramos que não é preciso ter uma conta especificamente em {domain} para usar o Mastodon.", "closed_registrations_modal.description": "Criar uma conta em {domain} não é atualmente possível, mas tenha em atenção que não é necessário ter uma conta especificamente em {domain} para usar o Mastodon.",
"closed_registrations_modal.find_another_server": "Procurar outro servidor", "closed_registrations_modal.find_another_server": "Procurar outro servidor",
"closed_registrations_modal.preamble": "O Mastodon é descentralizado, por isso não importa onde a tua conta é criada, pois continuarás a poder acompanhar e interagir com qualquer um neste servidor. Podes até alojar o teu próprio servidor!", "closed_registrations_modal.preamble": "O Mastodon é descentralizado, por isso, não importa onde crie a sua conta: poderá seguir e interagir com qualquer utilizador neste servidor. Pode até alojá-lo você próprio!",
"closed_registrations_modal.title": "Criar uma conta no Mastodon", "closed_registrations_modal.title": "Criar uma conta no Mastodon",
"collection.share_modal.share_link_label": "Link de convite para partilha",
"collection.share_modal.share_via_post": "Publicar no Mastodon", "collection.share_modal.share_via_post": "Publicar no Mastodon",
"collection.share_modal.share_via_system": "Compartilhar com…", "collection.share_modal.share_via_system": "Compartilhar com…",
"collection.share_modal.title": "Partilhar coleção", "collection.share_modal.title": "Partilhar coleção",
@@ -311,10 +337,15 @@
"collections.create_collection": "Criar coleção", "collections.create_collection": "Criar coleção",
"collections.delete_collection": "Eliminar coleção", "collections.delete_collection": "Eliminar coleção",
"collections.description_length_hint": "Limite de 100 caracteres", "collections.description_length_hint": "Limite de 100 caracteres",
"collections.detail.accept_inclusion": "OK / Aceitar",
"collections.detail.accounts_heading": "Contas", "collections.detail.accounts_heading": "Contas",
"collections.detail.author_added_you": "{author} adicionou-o a esta coleção",
"collections.detail.curated_by_author": "Curado por {author}", "collections.detail.curated_by_author": "Curado por {author}",
"collections.detail.curated_by_you": "Curado por si", "collections.detail.curated_by_you": "Curado por si",
"collections.detail.loading": "A carregar a coleção…", "collections.detail.loading": "A carregar a coleção…",
"collections.detail.other_accounts_in_collection": "Outros nesta coleção:",
"collections.detail.revoke_inclusion": "Remover-me",
"collections.detail.sensitive_note": "Esta coleção contém contas e conteúdos que podem ser sensíveis para alguns utilizadores.",
"collections.detail.share": "Partilhar esta coleção", "collections.detail.share": "Partilhar esta coleção",
"collections.edit_details": "Editar detalhes", "collections.edit_details": "Editar detalhes",
"collections.error_loading_collections": "Ocorreu um erro ao tentar carregar as suas coleções.", "collections.error_loading_collections": "Ocorreu um erro ao tentar carregar as suas coleções.",
@@ -329,6 +360,9 @@
"collections.old_last_post_note": "Última publicação há mais de uma semana", "collections.old_last_post_note": "Última publicação há mais de uma semana",
"collections.remove_account": "Remover esta conta", "collections.remove_account": "Remover esta conta",
"collections.report_collection": "Denunciar esta coleção", "collections.report_collection": "Denunciar esta coleção",
"collections.revoke_collection_inclusion": "Remover-me desta coleção",
"collections.revoke_inclusion.confirmation": "Foi removido da coleção \"{collection}\"",
"collections.revoke_inclusion.error": "Ocorreu um erro, por favor tente novamente mais tarde.",
"collections.search_accounts_label": "Procurar contas para adicionar…", "collections.search_accounts_label": "Procurar contas para adicionar…",
"collections.search_accounts_max_reached": "Já adicionou o máximo de contas", "collections.search_accounts_max_reached": "Já adicionou o máximo de contas",
"collections.sensitive": "Sensível", "collections.sensitive": "Sensível",
@@ -342,7 +376,7 @@
"collections.visibility_unlisted_hint": "Visível para qualquer pessoa com uma hiperligação. Não aparece nos resultados de pesquisa e recomendações.", "collections.visibility_unlisted_hint": "Visível para qualquer pessoa com uma hiperligação. Não aparece nos resultados de pesquisa e recomendações.",
"column.about": "Sobre", "column.about": "Sobre",
"column.blocks": "Utilizadores bloqueados", "column.blocks": "Utilizadores bloqueados",
"column.bookmarks": "Marcadores", "column.bookmarks": "Favoritos",
"column.collections": "As minhas coleções", "column.collections": "As minhas coleções",
"column.community": "Cronologia local", "column.community": "Cronologia local",
"column.create_list": "Criar lista", "column.create_list": "Criar lista",
@@ -452,6 +486,9 @@
"confirmations.remove_from_followers.confirm": "Remover seguidor", "confirmations.remove_from_followers.confirm": "Remover seguidor",
"confirmations.remove_from_followers.message": "{name} vai parar de seguir-te. Tens a certeza que prentedes continuar?", "confirmations.remove_from_followers.message": "{name} vai parar de seguir-te. Tens a certeza que prentedes continuar?",
"confirmations.remove_from_followers.title": "Remover seguidor?", "confirmations.remove_from_followers.title": "Remover seguidor?",
"confirmations.revoke_collection_inclusion.confirm": "Remover-me",
"confirmations.revoke_collection_inclusion.message": "Esta ação é permanente, e o curador não poderá adicioná-lo novamente à coleção mais tarde.",
"confirmations.revoke_collection_inclusion.title": "Remover-se desta coleção?",
"confirmations.revoke_quote.confirm": "Remover publicação", "confirmations.revoke_quote.confirm": "Remover publicação",
"confirmations.revoke_quote.message": "Esta ação é irreversível.", "confirmations.revoke_quote.message": "Esta ação é irreversível.",
"confirmations.revoke_quote.title": "Remover publicação?", "confirmations.revoke_quote.title": "Remover publicação?",
@@ -469,6 +506,7 @@
"conversation.open": "Ver conversa", "conversation.open": "Ver conversa",
"conversation.with": "Com {names}", "conversation.with": "Com {names}",
"copy_icon_button.copied": "Copiado para a área de transferência", "copy_icon_button.copied": "Copiado para a área de transferência",
"copy_icon_button.copy_this_text": "Copiar link para a área de transferência",
"copypaste.copied": "Copiado", "copypaste.copied": "Copiado",
"copypaste.copy_to_clipboard": "Copiar para a área de transferência", "copypaste.copy_to_clipboard": "Copiar para a área de transferência",
"directory.federated": "Do fediverso conhecido", "directory.federated": "Do fediverso conhecido",
@@ -686,6 +724,7 @@
"keyboard_shortcuts.direct": "Abrir coluna de menções privadas", "keyboard_shortcuts.direct": "Abrir coluna de menções privadas",
"keyboard_shortcuts.down": "mover para baixo na lista", "keyboard_shortcuts.down": "mover para baixo na lista",
"keyboard_shortcuts.enter": "abrir publicação", "keyboard_shortcuts.enter": "abrir publicação",
"keyboard_shortcuts.explore": "Abrir linha do tempo em destaque",
"keyboard_shortcuts.favourite": "assinalar como favorita", "keyboard_shortcuts.favourite": "assinalar como favorita",
"keyboard_shortcuts.favourites": "abrir lista de favoritos", "keyboard_shortcuts.favourites": "abrir lista de favoritos",
"keyboard_shortcuts.federated": "abrir a cronologia federada", "keyboard_shortcuts.federated": "abrir a cronologia federada",
@@ -772,6 +811,7 @@
"navigation_bar.automated_deletion": "Eliminação automática de publicações", "navigation_bar.automated_deletion": "Eliminação automática de publicações",
"navigation_bar.blocks": "Utilizadores bloqueados", "navigation_bar.blocks": "Utilizadores bloqueados",
"navigation_bar.bookmarks": "Itens salvos", "navigation_bar.bookmarks": "Itens salvos",
"navigation_bar.collections": "Coleções",
"navigation_bar.direct": "Menções privadas", "navigation_bar.direct": "Menções privadas",
"navigation_bar.domain_blocks": "Domínios escondidos", "navigation_bar.domain_blocks": "Domínios escondidos",
"navigation_bar.favourites": "Favoritos", "navigation_bar.favourites": "Favoritos",
@@ -808,7 +848,7 @@
"notification.annual_report.view": "Ver #Wrapstodon", "notification.annual_report.view": "Ver #Wrapstodon",
"notification.favourite": "{name} assinalou a tua publicação como favorita", "notification.favourite": "{name} assinalou a tua publicação como favorita",
"notification.favourite.name_and_others_with_link": "{name} e <a>{count, plural, one {# outro} other {# outros}}</a> assinalaram a tua publicação como favorita", "notification.favourite.name_and_others_with_link": "{name} e <a>{count, plural, one {# outro} other {# outros}}</a> assinalaram a tua publicação como favorita",
"notification.favourite_pm": "{name} assinalou como favorita a tua menção privada", "notification.favourite_pm": "{name} assinalou como favorita a sua menção privada",
"notification.favourite_pm.name_and_others_with_link": "{name} e <a>{count, plural, one {# outro favoritou} other {# outros favoritaram}}</a> a tua menção privada", "notification.favourite_pm.name_and_others_with_link": "{name} e <a>{count, plural, one {# outro favoritou} other {# outros favoritaram}}</a> a tua menção privada",
"notification.follow": "{name} começou a seguir-te", "notification.follow": "{name} começou a seguir-te",
"notification.follow.name_and_others": "{name} e <a>{count, plural, one {# outro seguiram-te} other {# outros seguiram-te}}</a>", "notification.follow.name_and_others": "{name} e <a>{count, plural, one {# outro seguiram-te} other {# outros seguiram-te}}</a>",
@@ -1003,7 +1043,7 @@
"report.forward": "Reencaminhar para {target}", "report.forward": "Reencaminhar para {target}",
"report.forward_hint": "A conta pertence a outro servidor. Enviar uma cópia anónima da denúncia para esse servidor também?", "report.forward_hint": "A conta pertence a outro servidor. Enviar uma cópia anónima da denúncia para esse servidor também?",
"report.mute": "Ocultar", "report.mute": "Ocultar",
"report.mute_explanation": "Não verás as publicações dele. Ele não poderá ver as tuas publicações nem seguir-te. Ele não saberá que o ocultaste.", "report.mute_explanation": "Não verá as publicações dele. Ele não poderá ver as suas publicações nem segui-lo. Ele não saberá que o ocultou.",
"report.next": "Seguinte", "report.next": "Seguinte",
"report.placeholder": "Comentários adicionais", "report.placeholder": "Comentários adicionais",
"report.reasons.dislike": "Não gosto disto", "report.reasons.dislike": "Não gosto disto",
@@ -1075,6 +1115,9 @@
"sign_in_banner.mastodon_is": "O Mastodon é a melhor maneira de acompanhar o que está a acontecer.", "sign_in_banner.mastodon_is": "O Mastodon é a melhor maneira de acompanhar o que está a acontecer.",
"sign_in_banner.sign_in": "Iniciar sessão", "sign_in_banner.sign_in": "Iniciar sessão",
"sign_in_banner.sso_redirect": "Inicia a sessão ou cria uma conta", "sign_in_banner.sso_redirect": "Inicia a sessão ou cria uma conta",
"skip_links.hotkey": "<span>Tecla de atalho</span> {hotkey}",
"skip_links.skip_to_content": "Ir para o conteúdo principal",
"skip_links.skip_to_navigation": "Ir para a navegação principal",
"status.admin_account": "Abrir a interface de moderação para @{name}", "status.admin_account": "Abrir a interface de moderação para @{name}",
"status.admin_domain": "Abrir interface de moderação para {domain}", "status.admin_domain": "Abrir interface de moderação para {domain}",
"status.admin_status": "Abrir esta publicação na interface de moderação", "status.admin_status": "Abrir esta publicação na interface de moderação",
@@ -1147,7 +1190,7 @@
"status.reblogs.empty": "Ainda ninguém partilhou esta publicação. Quando alguém o fizer, aparecerá aqui.", "status.reblogs.empty": "Ainda ninguém partilhou esta publicação. Quando alguém o fizer, aparecerá aqui.",
"status.reblogs_count": "{count, plural, one {{counter} partilha} other {{counter} partilhas}}", "status.reblogs_count": "{count, plural, one {{counter} partilha} other {{counter} partilhas}}",
"status.redraft": "Eliminar e reescrever", "status.redraft": "Eliminar e reescrever",
"status.remove_bookmark": "Retirar dos marcadores", "status.remove_bookmark": "Remover marcador",
"status.remove_favourite": "Remover dos favoritos", "status.remove_favourite": "Remover dos favoritos",
"status.remove_quote": "Remover", "status.remove_quote": "Remover",
"status.replied_in_thread": "Responder na conversa", "status.replied_in_thread": "Responder na conversa",

View File

@@ -339,6 +339,7 @@
"collections.detail.curated_by_you": "Nën kujdesin tuaj", "collections.detail.curated_by_you": "Nën kujdesin tuaj",
"collections.detail.loading": "Po ngarkohet koleksion…", "collections.detail.loading": "Po ngarkohet koleksion…",
"collections.detail.other_accounts_in_collection": "Të tjerë në këtë koleksion:", "collections.detail.other_accounts_in_collection": "Të tjerë në këtë koleksion:",
"collections.detail.revoke_inclusion": "Hiqmëni",
"collections.detail.sensitive_note": "Ky koleksion përmban llogari dhe lëndë që mund të jetë me spec për disa përdorues.", "collections.detail.sensitive_note": "Ky koleksion përmban llogari dhe lëndë që mund të jetë me spec për disa përdorues.",
"collections.detail.share": "Ndajeni këtë koleksion me të tjerë", "collections.detail.share": "Ndajeni këtë koleksion me të tjerë",
"collections.edit_details": "Përpunoni hollësi", "collections.edit_details": "Përpunoni hollësi",
@@ -354,6 +355,9 @@
"collections.old_last_post_note": "Të postuarat e fundit gjatë një jave më parë", "collections.old_last_post_note": "Të postuarat e fundit gjatë një jave më parë",
"collections.remove_account": "Hiqe këtë llogari", "collections.remove_account": "Hiqe këtë llogari",
"collections.report_collection": "Raportojeni këtë koleksion", "collections.report_collection": "Raportojeni këtë koleksion",
"collections.revoke_collection_inclusion": "Hiqmëni nga ky koleksion",
"collections.revoke_inclusion.confirmation": "U hoqët nga “{collection}”",
"collections.revoke_inclusion.error": "Pati një gabim, ju lutemi, riprovoni më vonë.",
"collections.search_accounts_label": "Kërkoni për llogari për shtim…", "collections.search_accounts_label": "Kërkoni për llogari për shtim…",
"collections.search_accounts_max_reached": "Keni shtuar numrin maksimum të llogarive", "collections.search_accounts_max_reached": "Keni shtuar numrin maksimum të llogarive",
"collections.sensitive": "Rezervat", "collections.sensitive": "Rezervat",
@@ -477,6 +481,9 @@
"confirmations.remove_from_followers.confirm": "Hiqe ndjekësin", "confirmations.remove_from_followers.confirm": "Hiqe ndjekësin",
"confirmations.remove_from_followers.message": "{name} do të reshtë së ndjekuri ju. Jeni i sigurt se doni të vazhdohet?", "confirmations.remove_from_followers.message": "{name} do të reshtë së ndjekuri ju. Jeni i sigurt se doni të vazhdohet?",
"confirmations.remove_from_followers.title": "Të hiqet ndjekësi?", "confirmations.remove_from_followers.title": "Të hiqet ndjekësi?",
"confirmations.revoke_collection_inclusion.confirm": "Hiqmëni",
"confirmations.revoke_collection_inclusion.message": "Ky veprim është i përhershëm dhe mirëmbajtësi sdo të jetë në gjendje tju rishtojë te koleksioni më vonë.",
"confirmations.revoke_collection_inclusion.title": "Të hiqeni nga ky koleksion?",
"confirmations.revoke_quote.confirm": "Hiqe postimin", "confirmations.revoke_quote.confirm": "Hiqe postimin",
"confirmations.revoke_quote.message": "Ky veprim smund të zhbëhet.", "confirmations.revoke_quote.message": "Ky veprim smund të zhbëhet.",
"confirmations.revoke_quote.title": "Të hiqet postimi?", "confirmations.revoke_quote.title": "Të hiqet postimi?",

View File

@@ -275,11 +275,14 @@
"collections.create_a_collection_hint": "Skapa en samling för att rekommendera eller dela dina favoritkonton med andra.", "collections.create_a_collection_hint": "Skapa en samling för att rekommendera eller dela dina favoritkonton med andra.",
"collections.create_collection": "Skapa samling", "collections.create_collection": "Skapa samling",
"collections.delete_collection": "Radera samling", "collections.delete_collection": "Radera samling",
"collections.detail.accept_inclusion": "Okej",
"collections.detail.accounts_heading": "Konton", "collections.detail.accounts_heading": "Konton",
"collections.detail.revoke_inclusion": "Ta bort mig",
"collections.error_loading_collections": "Det uppstod ett fel när dina samlingar skulle laddas.", "collections.error_loading_collections": "Det uppstod ett fel när dina samlingar skulle laddas.",
"collections.hints.accounts_counter": "{count} / {max} konton", "collections.hints.accounts_counter": "{count} / {max} konton",
"collections.no_collections_yet": "Inga samlingar än.", "collections.no_collections_yet": "Inga samlingar än.",
"collections.remove_account": "Ta bort detta konto", "collections.remove_account": "Ta bort detta konto",
"collections.revoke_inclusion.error": "Ett fel uppstod, försök igen senare.",
"collections.search_accounts_label": "Sök efter konton för att lägga till…", "collections.search_accounts_label": "Sök efter konton för att lägga till…",
"collections.search_accounts_max_reached": "Du har lagt till maximalt antal konton", "collections.search_accounts_max_reached": "Du har lagt till maximalt antal konton",
"collections.view_collection": "Visa samling", "collections.view_collection": "Visa samling",
@@ -384,6 +387,7 @@
"confirmations.remove_from_followers.confirm": "Ta bort följare", "confirmations.remove_from_followers.confirm": "Ta bort följare",
"confirmations.remove_from_followers.message": "{name} kommer att sluta följa dig. Är du säker på att du vill fortsätta?", "confirmations.remove_from_followers.message": "{name} kommer att sluta följa dig. Är du säker på att du vill fortsätta?",
"confirmations.remove_from_followers.title": "Ta bort följare?", "confirmations.remove_from_followers.title": "Ta bort följare?",
"confirmations.revoke_collection_inclusion.confirm": "Ta bort mig",
"confirmations.revoke_quote.confirm": "Ta bort inlägg", "confirmations.revoke_quote.confirm": "Ta bort inlägg",
"confirmations.revoke_quote.message": "Denna åtgärd kan inte ångras.", "confirmations.revoke_quote.message": "Denna åtgärd kan inte ångras.",
"confirmations.revoke_quote.title": "Ta bort inlägg?", "confirmations.revoke_quote.title": "Ta bort inlägg?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "Tạo gói khởi đầu", "collections.create_collection": "Tạo gói khởi đầu",
"collections.delete_collection": "Xóa gói khởi đầu", "collections.delete_collection": "Xóa gói khởi đầu",
"collections.description_length_hint": "Giới hạn 100 ký tự", "collections.description_length_hint": "Giới hạn 100 ký tự",
"collections.detail.accept_inclusion": "Okay",
"collections.detail.accounts_heading": "Tài khoản", "collections.detail.accounts_heading": "Tài khoản",
"collections.detail.author_added_you": "{author} đã thêm bạn vào gói khởi đầu này", "collections.detail.author_added_you": "{author} đã thêm bạn vào gói khởi đầu này",
"collections.detail.curated_by_author": "Tuyển chọn bởi {author}", "collections.detail.curated_by_author": "Tuyển chọn bởi {author}",
"collections.detail.curated_by_you": "Tuyển chọn bởi bạn", "collections.detail.curated_by_you": "Tuyển chọn bởi bạn",
"collections.detail.loading": "Đang tải gói khởi đầu…", "collections.detail.loading": "Đang tải gói khởi đầu…",
"collections.detail.other_accounts_in_collection": "Những người khác trong gói khởi đầu này:", "collections.detail.other_accounts_in_collection": "Những người khác trong gói khởi đầu này:",
"collections.detail.revoke_inclusion": "Xóa tôi",
"collections.detail.sensitive_note": "Gói khởi đầu này chứa các tài khoản và nội dung có thể nhạy cảm đối với một số người.", "collections.detail.sensitive_note": "Gói khởi đầu này chứa các tài khoản và nội dung có thể nhạy cảm đối với một số người.",
"collections.detail.share": "Chia sẻ gói khởi đầu này", "collections.detail.share": "Chia sẻ gói khởi đầu này",
"collections.edit_details": "Sửa chi tiết", "collections.edit_details": "Sửa chi tiết",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "Đăng lần cuối hơn một tuần trước", "collections.old_last_post_note": "Đăng lần cuối hơn một tuần trước",
"collections.remove_account": "Gỡ tài khoản này", "collections.remove_account": "Gỡ tài khoản này",
"collections.report_collection": "Báo cáo gói khởi đầu này", "collections.report_collection": "Báo cáo gói khởi đầu này",
"collections.revoke_collection_inclusion": "Xóa tôi khỏi gói khởi đầu này",
"collections.revoke_inclusion.confirmation": "Bạn đã được gỡ khỏi \"{collection}\"",
"collections.revoke_inclusion.error": "Đã có lỗi, xin vui lòng thử lại.",
"collections.search_accounts_label": "Tìm tài khoản để thêm…", "collections.search_accounts_label": "Tìm tài khoản để thêm…",
"collections.search_accounts_max_reached": "Bạn đã đạt đến số lượng tài khoản tối đa", "collections.search_accounts_max_reached": "Bạn đã đạt đến số lượng tài khoản tối đa",
"collections.sensitive": "Nhạy cảm", "collections.sensitive": "Nhạy cảm",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "Xóa người theo dõi", "confirmations.remove_from_followers.confirm": "Xóa người theo dõi",
"confirmations.remove_from_followers.message": "{name} sẽ không còn theo dõi bạn.Bạn có chắc tiếp tục?", "confirmations.remove_from_followers.message": "{name} sẽ không còn theo dõi bạn.Bạn có chắc tiếp tục?",
"confirmations.remove_from_followers.title": "Xóa người theo dõi?", "confirmations.remove_from_followers.title": "Xóa người theo dõi?",
"confirmations.revoke_collection_inclusion.confirm": "Xóa tôi",
"confirmations.revoke_collection_inclusion.message": "Thao tác này là vĩnh viễn, người tuyển chọn sẽ không thể thêm lại bạn về sau này.",
"confirmations.revoke_collection_inclusion.title": "Xóa bạn khỏi gói khởi đầu này?",
"confirmations.revoke_quote.confirm": "Gỡ tút", "confirmations.revoke_quote.confirm": "Gỡ tút",
"confirmations.revoke_quote.message": "Hành động này không thể hoàn tác.", "confirmations.revoke_quote.message": "Hành động này không thể hoàn tác.",
"confirmations.revoke_quote.title": "Gỡ tút?", "confirmations.revoke_quote.title": "Gỡ tút?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "创建收藏列表", "collections.create_collection": "创建收藏列表",
"collections.delete_collection": "删除收藏列表", "collections.delete_collection": "删除收藏列表",
"collections.description_length_hint": "100字限制", "collections.description_length_hint": "100字限制",
"collections.detail.accept_inclusion": "确定",
"collections.detail.accounts_heading": "账号", "collections.detail.accounts_heading": "账号",
"collections.detail.author_added_you": "{author} 将你添加到了此收藏列表", "collections.detail.author_added_you": "{author} 将你添加到了此收藏列表",
"collections.detail.curated_by_author": "由 {author} 精心挑选", "collections.detail.curated_by_author": "由 {author} 精心挑选",
"collections.detail.curated_by_you": "由你精心挑选", "collections.detail.curated_by_you": "由你精心挑选",
"collections.detail.loading": "正在加载收藏列表…", "collections.detail.loading": "正在加载收藏列表…",
"collections.detail.other_accounts_in_collection": "此收藏列表中的其他人:", "collections.detail.other_accounts_in_collection": "此收藏列表中的其他人:",
"collections.detail.revoke_inclusion": "移除我",
"collections.detail.sensitive_note": "此收藏列表可能包含某些对部分用户而言为敏感内容的账号或内容。", "collections.detail.sensitive_note": "此收藏列表可能包含某些对部分用户而言为敏感内容的账号或内容。",
"collections.detail.share": "分享此收藏列表", "collections.detail.share": "分享此收藏列表",
"collections.edit_details": "编辑详情", "collections.edit_details": "编辑详情",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "上次发言于一周多以前", "collections.old_last_post_note": "上次发言于一周多以前",
"collections.remove_account": "移除此账号", "collections.remove_account": "移除此账号",
"collections.report_collection": "举报此收藏列表", "collections.report_collection": "举报此收藏列表",
"collections.revoke_collection_inclusion": "将自己从此收藏列表中移除",
"collections.revoke_inclusion.confirmation": "你已被从“{collection}”中移除",
"collections.revoke_inclusion.error": "出现错误,请稍后重试。",
"collections.search_accounts_label": "搜索要添加的账号…", "collections.search_accounts_label": "搜索要添加的账号…",
"collections.search_accounts_max_reached": "你添加的账号数量已达上限", "collections.search_accounts_max_reached": "你添加的账号数量已达上限",
"collections.sensitive": "敏感内容", "collections.sensitive": "敏感内容",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "移除关注者", "confirmations.remove_from_followers.confirm": "移除关注者",
"confirmations.remove_from_followers.message": "{name} 将停止关注你。你确定要继续吗?", "confirmations.remove_from_followers.message": "{name} 将停止关注你。你确定要继续吗?",
"confirmations.remove_from_followers.title": "移除关注者?", "confirmations.remove_from_followers.title": "移除关注者?",
"confirmations.revoke_collection_inclusion.confirm": "移除我",
"confirmations.revoke_collection_inclusion.message": "此操作是永久的,且此收藏列表的制作者之后将无法再将你添加到其中。",
"confirmations.revoke_collection_inclusion.title": "将自己从此收藏列表中移除吗?",
"confirmations.revoke_quote.confirm": "移除嘟文", "confirmations.revoke_quote.confirm": "移除嘟文",
"confirmations.revoke_quote.message": "此操作无法撤销。", "confirmations.revoke_quote.message": "此操作无法撤销。",
"confirmations.revoke_quote.title": "移除嘟文?", "confirmations.revoke_quote.title": "移除嘟文?",

View File

@@ -338,12 +338,14 @@
"collections.create_collection": "建立收藏名單", "collections.create_collection": "建立收藏名單",
"collections.delete_collection": "刪除收藏名單", "collections.delete_collection": "刪除收藏名單",
"collections.description_length_hint": "100 字限制", "collections.description_length_hint": "100 字限制",
"collections.detail.accept_inclusion": "Okay",
"collections.detail.accounts_heading": "帳號", "collections.detail.accounts_heading": "帳號",
"collections.detail.author_added_you": "{author} 將您加入至此收藏名單", "collections.detail.author_added_you": "{author} 將您加入至此收藏名單",
"collections.detail.curated_by_author": "由 {author} 精選", "collections.detail.curated_by_author": "由 {author} 精選",
"collections.detail.curated_by_you": "由您精選", "collections.detail.curated_by_you": "由您精選",
"collections.detail.loading": "讀取收藏名單中...", "collections.detail.loading": "讀取收藏名單中...",
"collections.detail.other_accounts_in_collection": "此收藏名單中其他人:", "collections.detail.other_accounts_in_collection": "此收藏名單中其他人:",
"collections.detail.revoke_inclusion": "移除我",
"collections.detail.sensitive_note": "此收藏名單可能包含對某些使用者敏感之帳號或內容。", "collections.detail.sensitive_note": "此收藏名單可能包含對某些使用者敏感之帳號或內容。",
"collections.detail.share": "分享此收藏名單", "collections.detail.share": "分享此收藏名單",
"collections.edit_details": "編輯詳細資料", "collections.edit_details": "編輯詳細資料",
@@ -359,6 +361,9 @@
"collections.old_last_post_note": "上次發表嘟文已超過一週", "collections.old_last_post_note": "上次發表嘟文已超過一週",
"collections.remove_account": "移除此帳號", "collections.remove_account": "移除此帳號",
"collections.report_collection": "檢舉此收藏名單", "collections.report_collection": "檢舉此收藏名單",
"collections.revoke_collection_inclusion": "將我自此收藏名單中移除",
"collections.revoke_inclusion.confirmation": "您已自「{collection}」中被移除",
"collections.revoke_inclusion.error": "發生錯誤,請稍候重試。",
"collections.search_accounts_label": "搜尋帳號以加入...", "collections.search_accounts_label": "搜尋帳號以加入...",
"collections.search_accounts_max_reached": "您新增之帳號數已達上限", "collections.search_accounts_max_reached": "您新增之帳號數已達上限",
"collections.sensitive": "敏感內容", "collections.sensitive": "敏感內容",
@@ -482,6 +487,9 @@
"confirmations.remove_from_followers.confirm": "移除跟隨者", "confirmations.remove_from_followers.confirm": "移除跟隨者",
"confirmations.remove_from_followers.message": "{name} 將停止跟隨您。您確定要繼續嗎?", "confirmations.remove_from_followers.message": "{name} 將停止跟隨您。您確定要繼續嗎?",
"confirmations.remove_from_followers.title": "是否移除該跟隨者?", "confirmations.remove_from_followers.title": "是否移除該跟隨者?",
"confirmations.revoke_collection_inclusion.confirm": "移除我",
"confirmations.revoke_collection_inclusion.message": "此操作永久有效,且該收藏名單之擁有者無法稍候將您再次加入至此收藏名單。",
"confirmations.revoke_collection_inclusion.title": "是否將您自此收藏名單中移除?",
"confirmations.revoke_quote.confirm": "移除嘟文", "confirmations.revoke_quote.confirm": "移除嘟文",
"confirmations.revoke_quote.message": "此動作無法復原。", "confirmations.revoke_quote.message": "此動作無法復原。",
"confirmations.revoke_quote.title": "是否移除該嘟文?", "confirmations.revoke_quote.title": "是否移除該嘟文?",

View File

@@ -5,7 +5,8 @@
# Table name: collections # Table name: collections
# #
# id :bigint(8) not null, primary key # id :bigint(8) not null, primary key
# description :text not null # description :text
# description_html :text
# discoverable :boolean not null # discoverable :boolean not null
# item_count :integer default(0), not null # item_count :integer default(0), not null
# language :string # language :string
@@ -30,7 +31,10 @@ class Collection < ApplicationRecord
has_many :collection_reports, dependent: :delete_all has_many :collection_reports, dependent: :delete_all
validates :name, presence: true validates :name, presence: true
validates :description, presence: true validates :description, presence: true,
if: :local?
validates :description_html, presence: true,
if: :remote?
validates :local, inclusion: [true, false] validates :local, inclusion: [true, false]
validates :sensitive, inclusion: [true, false] validates :sensitive, inclusion: [true, false]
validates :discoverable, inclusion: [true, false] validates :discoverable, inclusion: [true, false]

View File

@@ -209,8 +209,10 @@ class User < ApplicationRecord
increment(:sign_in_count) if new_sign_in increment(:sign_in_count) if new_sign_in
save(validate: false) unless new_record? unless new_record?
prepare_returning_user! save(validate: false)
prepare_returning_user!
end
end end
def pending? def pending?

View File

@@ -13,6 +13,10 @@ class REST::CollectionSerializer < ActiveModel::Serializer
object.id.to_s object.id.to_s
end end
def description
object.local? ? object.description : object.description_html
end
def items def items
object.items_for(current_user&.account) object.items_for(current_user&.account)
end end

View File

@@ -22,6 +22,8 @@ class WebfingerSerializer < ActiveModel::Serializer
{ rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: profile_page_href }, { rel: 'http://webfinger.net/rel/profile-page', type: 'text/html', href: profile_page_href },
{ rel: 'self', type: 'application/activity+json', href: self_href }, { rel: 'self', type: 'application/activity+json', href: self_href },
{ rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" }, { rel: 'http://ostatus.org/schema/1.0/subscribe', template: "#{authorize_interaction_url}?uri={uri}" },
{ rel: 'https://w3id.org/fep/3b86/Create', template: "#{share_url}?text={content}" },
{ rel: 'https://w3id.org/fep/3b86/Object', template: "#{authorize_interaction_url}?uri={object}" },
].tap do |x| ].tap do |x|
x << { rel: 'http://webfinger.net/rel/avatar', type: object.avatar.content_type, href: full_asset_url(object.avatar_original_url) } if show_avatar? x << { rel: 'http://webfinger.net/rel/avatar', type: object.avatar.content_type, href: full_asset_url(object.avatar_original_url) } if show_avatar?
end end

View File

@@ -841,10 +841,10 @@ el:
desc: Όταν οι χρήστες σου κάνουν κλικ συνδέσμους σε εξωτερικές ιστοσελίδες, το πρόγραμμα περιήγησής τους μπορεί να στείλει τη διεύθυνση του διακομιστή σας Mastodon ως αναφέρων. Απενεργοποίησέ το αν αυτό θα αναγνώριζε μοναδικά τους χρήστες σου, π.χ. αν αυτός είναι ένας προσωπικός διακομιστής Mastodon. desc: Όταν οι χρήστες σου κάνουν κλικ συνδέσμους σε εξωτερικές ιστοσελίδες, το πρόγραμμα περιήγησής τους μπορεί να στείλει τη διεύθυνση του διακομιστή σας Mastodon ως αναφέρων. Απενεργοποίησέ το αν αυτό θα αναγνώριζε μοναδικά τους χρήστες σου, π.χ. αν αυτός είναι ένας προσωπικός διακομιστής Mastodon.
title: Να επιτρέπεται σε εξωτερικούς ιστότοπους να βλέπουν τον διακομιστή Mastodon σου ως πηγή κίνησης title: Να επιτρέπεται σε εξωτερικούς ιστότοπους να βλέπουν τον διακομιστή Mastodon σου ως πηγή κίνησης
appearance: appearance:
preamble: Προσάρμοσε την ιστοσελίδα του Mastodon. preamble: Προσάρμοσε τη διεπαφή ιστού του Mastodon.
title: Εμφάνιση title: Εμφάνιση
branding: branding:
preamble: Η ταυτότητα του διακομιστή σου, τον διαφοροποιεί από άλλους διακομιστές του δικτύου. Αυτές οι πληροφορίες μπορεί να εμφανίζονται σε διάφορα περιβάλλοντα, όπως η ιστοσελίδα του Mastodon, εγγενείς εφαρμογές, σε προεπισκοπήσεις συνδέσμου σε άλλους ιστότοπους και εντός εφαρμογών μηνυμάτων και ούτω καθεξής. Γι' αυτό, είναι καλύτερο να διατηρούνται αυτές οι πληροφορίες σαφείς, σύντομες και συνοπτικές. preamble: Η ταυτότητα του διακομιστή σου, τον διαφοροποιεί από άλλους διακομιστές του δικτύου. Αυτές οι πληροφορίες μπορεί να εμφανίζονται σε διάφορα περιβάλλοντα, όπως η διεπαφή ιστού του Mastodon, εγγενείς εφαρμογές, σε προεπισκοπήσεις συνδέσμου σε άλλους ιστότοπους και εντός εφαρμογών μηνυμάτων και ούτω καθεξής. Γι' αυτό, είναι καλύτερο να διατηρούνται αυτές οι πληροφορίες σαφείς, σύντομες και συνοπτικές.
title: Ταυτότητα title: Ταυτότητα
captcha_enabled: captcha_enabled:
desc_html: Αυτό βασίζεται σε εξωτερικά scripts από το hCaptcha, όπου υπάρχει ανησυχία πέρι ασφάλειας και ιδιωτηκότητας. Επιπρόσθετα, <strong> μπορεί να κάνει τη διαδικασία εγγραφής πολύ λιγότερο προσβάσιμη για κάποια άτομα (ειδικά αυτά με αναπηρίες)</strong>. Για αυτούς τους λόγους, παρακαλώ σκέψου άλλου τρόπους εγγραφής όπως με αποδοχή ή με πρόσκληση. desc_html: Αυτό βασίζεται σε εξωτερικά scripts από το hCaptcha, όπου υπάρχει ανησυχία πέρι ασφάλειας και ιδιωτηκότητας. Επιπρόσθετα, <strong> μπορεί να κάνει τη διαδικασία εγγραφής πολύ λιγότερο προσβάσιμη για κάποια άτομα (ειδικά αυτά με αναπηρίες)</strong>. Για αυτούς τους λόγους, παρακαλώ σκέψου άλλου τρόπους εγγραφής όπως με αποδοχή ή με πρόσκληση.
@@ -1433,7 +1433,7 @@ el:
content: Λυπούμαστε, κάτι πήγε στραβά από τη δική μας μεριά. content: Λυπούμαστε, κάτι πήγε στραβά από τη δική μας μεριά.
title: Η σελίδα αυτή δεν είναι σωστή title: Η σελίδα αυτή δεν είναι σωστή
'503': Η σελίδα δε μπόρεσε να εμφανιστεί λόγω προσωρινού σφάλματος του διακομιστή. '503': Η σελίδα δε μπόρεσε να εμφανιστεί λόγω προσωρινού σφάλματος του διακομιστή.
noscript_html: Για να χρησιμοποιήσεις τη δικτυακή εφαρμογή του Mastodon, ενεργοποίησε την Javascript. Εναλλακτικά, δοκίμασε μια από τις <a href="%{apps_path}">εφαρμογές</a> για το Mastodon για την πλατφόρμα σου. noscript_html: Για να χρησιμοποιήσεις την εφαρμογή ιστού του Mastodon, παρακαλούμε ενεργοποίησε την Javascript. Εναλλακτικά, δοκίμασε μια από τις <a href="%{apps_path}">εφαρμογές</a> για το Mastodon για την πλατφόρμα σου.
existing_username_validator: existing_username_validator:
not_found: δεν βρέθηκε τοπικός χρήστης με αυτό το όνομα not_found: δεν βρέθηκε τοπικός χρήστης με αυτό το όνομα
not_found_multiple: δεν βρέθηκε %{usernames} not_found_multiple: δεν βρέθηκε %{usernames}
@@ -1471,7 +1471,7 @@ el:
statuses_hint_html: Αυτό το φίλτρο εφαρμόζεται για την επιλογή μεμονωμένων αναρτήσεων, ανεξάρτητα από το αν αντιστοιχούν με τις λέξεις-κλειδιά παρακάτω. <a href="%{path}">Επισκόπηση ή αφαίρεση αναρτήσεων από το φίλτρο</a>. statuses_hint_html: Αυτό το φίλτρο εφαρμόζεται για την επιλογή μεμονωμένων αναρτήσεων, ανεξάρτητα από το αν αντιστοιχούν με τις λέξεις-κλειδιά παρακάτω. <a href="%{path}">Επισκόπηση ή αφαίρεση αναρτήσεων από το φίλτρο</a>.
title: Επεξεργασία φίλτρου title: Επεξεργασία φίλτρου
errors: errors:
deprecated_api_multiple_keywords: Αυτές οι παράμετροι δεν μπορούν να αλλάξουν από αυτήν την εφαρμογή επειδή ισχύουν για περισσότερες από μία λέξεις-κλειδιά φίλτρου. Χρησιμοποίησε μια πιο πρόσφατη εφαρμογή ή την ιστοσελίδα. deprecated_api_multiple_keywords: Αυτές οι παράμετροι δεν μπορούν να αλλάξουν από αυτήν την εφαρμογή επειδή ισχύουν για περισσότερες από μία λέξεις-κλειδιά φίλτρου. Χρησιμοποίησε μια πιο πρόσφατη εφαρμογή ή τη διεπαφή ιστού.
invalid_context: Δόθηκε κενό ή μη έγκυρο περιεχόμενο invalid_context: Δόθηκε κενό ή μη έγκυρο περιεχόμενο
index: index:
contexts: Φίλτρα σε %{contexts} contexts: Φίλτρα σε %{contexts}
@@ -1497,7 +1497,7 @@ el:
batch: batch:
remove: Αφαίρεση από φίλτρο remove: Αφαίρεση από φίλτρο
index: index:
hint: Αυτό το φίλτρο ισχύει για την επιλογή μεμονωμένων αναρτήσεων ανεξάρτητα από άλλα κριτήρια. Μπορείς να προσθέσεις περισσότερες αναρτήσεις σε αυτό το φίλτρο από την ιστοσελίδα. hint: Αυτό το φίλτρο ισχύει για την επιλογή μεμονωμένων αναρτήσεων ανεξάρτητα από άλλα κριτήρια. Μπορείς να προσθέσεις περισσότερες αναρτήσεις σε αυτό το φίλτρο από τη διεπαφή ιστού.
title: Φιλτραρισμένες αναρτήσεις title: Φιλτραρισμένες αναρτήσεις
generic: generic:
all: Όλα all: Όλα

View File

@@ -91,7 +91,7 @@ el:
bootstrap_timeline_accounts: Αυτοί οι λογαριασμοί θα καρφιτσωθούν στην κορυφή των προτεινόμενων ακολουθήσεων για νέους χρήστες. Παρέχετε μια λίστα λογαριασμών χωρισμένη με κόμμα. bootstrap_timeline_accounts: Αυτοί οι λογαριασμοί θα καρφιτσωθούν στην κορυφή των προτεινόμενων ακολουθήσεων για νέους χρήστες. Παρέχετε μια λίστα λογαριασμών χωρισμένη με κόμμα.
closed_registrations_message: Εμφανίζεται όταν κλείνουν οι εγγραφές closed_registrations_message: Εμφανίζεται όταν κλείνουν οι εγγραφές
content_cache_retention_period: Όλες οι αναρτήσεις από άλλους διακομιστές (συμπεριλαμβανομένων των ενισχύσεων και απαντήσεων) θα διαγραφούν μετά τον καθορισμένο αριθμό ημερών, χωρίς να λαμβάνεται υπόψη οποιαδήποτε αλληλεπίδραση τοπικού χρήστη με αυτές τις αναρτήσεις. Αυτό περιλαμβάνει αναρτήσεις όπου ένας τοπικός χρήστης την έχει χαρακτηρίσει ως σελιδοδείκτη ή αγαπημένη. Θα χαθούν επίσης ιδιωτικές επισημάνσεις μεταξύ χρηστών από διαφορετικές οντότητες και θα είναι αδύνατο να αποκατασταθούν. Η χρήση αυτής της ρύθμισης προορίζεται για οντότητες ειδικού σκοπού και χαλάει πολλές προσδοκίες του χρήστη όταν εφαρμόζεται για χρήση γενική σκοπού. content_cache_retention_period: Όλες οι αναρτήσεις από άλλους διακομιστές (συμπεριλαμβανομένων των ενισχύσεων και απαντήσεων) θα διαγραφούν μετά τον καθορισμένο αριθμό ημερών, χωρίς να λαμβάνεται υπόψη οποιαδήποτε αλληλεπίδραση τοπικού χρήστη με αυτές τις αναρτήσεις. Αυτό περιλαμβάνει αναρτήσεις όπου ένας τοπικός χρήστης την έχει χαρακτηρίσει ως σελιδοδείκτη ή αγαπημένη. Θα χαθούν επίσης ιδιωτικές επισημάνσεις μεταξύ χρηστών από διαφορετικές οντότητες και θα είναι αδύνατο να αποκατασταθούν. Η χρήση αυτής της ρύθμισης προορίζεται για οντότητες ειδικού σκοπού και χαλάει πολλές προσδοκίες του χρήστη όταν εφαρμόζεται για χρήση γενική σκοπού.
custom_css: Μπορείς να εφαρμόσεις προσαρμοσμένα στυλ στην έκδοση ιστοσελίδας του Mastodon. custom_css: Μπορείς να εφαρμόσεις προσαρμοσμένα στυλ στην έκδοση ιστού του Mastodon.
favicon: WEBP, PNG, GIF ή JPG. Παρακάμπτει το προεπιλεγμένο favicon του Mastodon με ένα προσαρμοσμένο εικονίδιο. favicon: WEBP, PNG, GIF ή JPG. Παρακάμπτει το προεπιλεγμένο favicon του Mastodon με ένα προσαρμοσμένο εικονίδιο.
landing_page: Επιλέγει ποια σελίδα βλέπουν οι νέοι επισκέπτες όταν φτάνουν για πρώτη φορά στο διακομιστή σας. Αν επιλέξετε "Τάσεις", τότε οι τάσεις πρέπει να είναι ενεργοποιημένες στις Ρυθμίσεις Ανακάλυψης. Αν επιλέξετε "Τοπική ροή", τότε το "Πρόσβαση σε ζωντανές ροές με τοπικές αναρτήσεις" πρέπει να οριστεί σε "Όλοι" στις Ρυθμίσεις Ανακάλυψης. landing_page: Επιλέγει ποια σελίδα βλέπουν οι νέοι επισκέπτες όταν φτάνουν για πρώτη φορά στο διακομιστή σας. Αν επιλέξετε "Τάσεις", τότε οι τάσεις πρέπει να είναι ενεργοποιημένες στις Ρυθμίσεις Ανακάλυψης. Αν επιλέξετε "Τοπική ροή", τότε το "Πρόσβαση σε ζωντανές ροές με τοπικές αναρτήσεις" πρέπει να οριστεί σε "Όλοι" στις Ρυθμίσεις Ανακάλυψης.
mascot: Παρακάμπτει την εικονογραφία στην προηγμένη διεπαφή ιστού. mascot: Παρακάμπτει την εικονογραφία στην προηγμένη διεπαφή ιστού.
@@ -236,7 +236,7 @@ el:
otp_attempt: Κωδικός δυο παραγόντων otp_attempt: Κωδικός δυο παραγόντων
password: Συνθηματικό password: Συνθηματικό
phrase: Λέξη-κλειδί ή φράση phrase: Λέξη-κλειδί ή φράση
setting_advanced_layout: Ενεργοποίηση προηγμένης λειτουργίας χρήσης setting_advanced_layout: Ενεργοποίηση προηγμένης διεπαφής ιστού
setting_aggregate_reblogs: Ομαδοποίηση προωθήσεων στις ροές setting_aggregate_reblogs: Ομαδοποίηση προωθήσεων στις ροές
setting_always_send_emails: Πάντα να αποστέλλονται ειδοποίησεις μέσω email setting_always_send_emails: Πάντα να αποστέλλονται ειδοποίησεις μέσω email
setting_auto_play_gif: Αυτόματη αναπαραγωγή των GIF setting_auto_play_gif: Αυτόματη αναπαραγωγή των GIF

View File

@@ -0,0 +1,13 @@
# frozen_string_literal: true
class AddDescriptionHtmlToCollections < ActiveRecord::Migration[8.1]
def change
add_column :collections, :description_html, :text
reversible do |direction|
direction.up { change_column :collections, :description, :text, null: true }
direction.down { change_column :collections, :description, :text, null: false }
end
end
end

View File

@@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[8.1].define(version: 2026_03_03_144409) do ActiveRecord::Schema[8.1].define(version: 2026_03_10_095021) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "pg_catalog.plpgsql" enable_extension "pg_catalog.plpgsql"
@@ -387,7 +387,8 @@ ActiveRecord::Schema[8.1].define(version: 2026_03_03_144409) do
create_table "collections", id: :bigint, default: -> { "timestamp_id('collections'::text)" }, force: :cascade do |t| create_table "collections", id: :bigint, default: -> { "timestamp_id('collections'::text)" }, force: :cascade do |t|
t.bigint "account_id", null: false t.bigint "account_id", null: false
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.text "description", null: false t.text "description"
t.text "description_html"
t.boolean "discoverable", null: false t.boolean "discoverable", null: false
t.integer "item_count", default: 0, null: false t.integer "item_count", default: 0, null: false
t.string "language" t.string "language"

View File

@@ -3,7 +3,7 @@
## Overview ## Overview
Before starting local development, read the [CONTRIBUTING] guide to understand Before starting local development, read the [CONTRIBUTING] guide to understand
what changes are desirable and what general processes to use. what changes are desirable and what general processes to use. You should also read the project's [AI Contribution Policy] to understand how we approach AI-assisted contributions.
## Environments ## Environments
@@ -103,3 +103,4 @@ development environment configured with the software needed for this project.
[GitHub Codespaces]: https://docs.github.com/en/codespaces [GitHub Codespaces]: https://docs.github.com/en/codespaces
[Homebrew]: https://brew.sh [Homebrew]: https://brew.sh
[Mastodon docs]: https://docs.joinmastodon.org/dev/setup/#working-with-emails-in-development [Mastodon docs]: https://docs.joinmastodon.org/dev/setup/#working-with-emails-in-development
[AI Contribution Policy]: https://github.com/mastodon/.github/blob/main/AI_POLICY.md

View File

@@ -0,0 +1,45 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe InstancesIndex do
context 'when elasticsearch is enabled', :search do
describe 'indexing records' do
before do
Fabricate :account, domain: 'host.example'
Instance.refresh
end
it 'indexes records from scope' do
expect { described_class.import }
.to change(described_class, :count).by(1)
end
end
end
describe 'Searching the index' do
before do
mock_elasticsearch_response(described_class, raw_response)
end
it 'returns results from a query' do
results = described_class.query(match: { name: 'account' })
expect(results).to eq []
end
end
def raw_response
{
took: 3,
hits: {
hits: [
{
_id: '0',
_score: 1.6375021,
},
],
},
}
end
end

View File

@@ -12,6 +12,8 @@ end
Fabricator(:remote_collection, from: :collection) do Fabricator(:remote_collection, from: :collection) do
account { Fabricate.build(:remote_account) } account { Fabricate.build(:remote_account) }
local false local false
description nil
description_html '<p>People to follow</p>'
uri { sequence(:uri) { |i| "https://example.com/collections/#{i}" } } uri { sequence(:uri) { |i| "https://example.com/collections/#{i}" } }
original_number_of_items 0 original_number_of_items 0
end end

View File

@@ -23,6 +23,10 @@ RSpec.describe Collection do
context 'when collection is remote' do context 'when collection is remote' do
subject { Fabricate.build :collection, local: false } subject { Fabricate.build :collection, local: false }
it { is_expected.to_not validate_presence_of(:description) }
it { is_expected.to validate_presence_of(:description_html) }
it { is_expected.to validate_presence_of(:uri) } it { is_expected.to validate_presence_of(:uri) }
it { is_expected.to validate_presence_of(:original_number_of_items) } it { is_expected.to validate_presence_of(:original_number_of_items) }

View File

@@ -208,9 +208,13 @@ RSpec.describe User do
context 'with a new user' do context 'with a new user' do
let(:user) { Fabricate.build :user } let(:user) { Fabricate.build :user }
before { allow(ActivityTracker).to receive(:record) }
it 'does not persist the user' do it 'does not persist the user' do
expect { user.update_sign_in! } expect { user.update_sign_in! }
.to_not change(user, :persisted?).from(false) .to_not change(user, :persisted?).from(false)
expect(ActivityTracker)
.to_not have_received(:record).with('activity:logins', anything)
end end
end end
end end

View File

@@ -138,12 +138,6 @@ RSpec.configure do |config|
example.run example.run
end end
config.around(:each, type: :search) do |example|
Chewy.settings[:enabled] = true
example.run
Chewy.settings[:enabled] = false
end
config.before :each, type: :cli do config.before :each, type: :cli do
stub_reset_connection_pools stub_reset_connection_pools
end end

View File

@@ -3,48 +3,48 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe Account::Search do RSpec.describe Account::Search do
describe 'a non-discoverable account becoming discoverable' do describe 'Callbacks for discoverable changes' do
let(:account) { Account.find_by(username: 'search_test_account_1') } let(:results) { AccountsIndex.filter(term: { username: account.username }) }
context 'when picking a non-discoverable account' do context 'with a non-discoverable account' do
it 'its bio is not in the AccountsIndex' do let(:account) { Fabricate :account, discoverable: false, note: 'Account note' }
results = AccountsIndex.filter(term: { username: account.username })
expect(results.count).to eq(1) context 'when looking for the non discoverable account' do
expect(results.first.text).to be_nil it 'is missing account bio in the AccountsIndex' do
expect(results.count)
.to eq(1)
expect(results.first.text)
.to be_nil
end
end
context 'when the account becomes discoverable' do
it 'has an account bio in the AccountsIndex' do
expect { account.update! discoverable: true }
.to change { results.first.text }.from(be_blank).to(account.note)
.and not_change(results, :count).from(1)
end
end end
end end
context 'when the non-discoverable account becomes discoverable' do describe 'with a discoverable account' do
it 'its bio is added to the AccountsIndex' do let(:account) { Fabricate :account, discoverable: true }
account.discoverable = true
account.save!
results = AccountsIndex.filter(term: { username: account.username }) context 'when looking for the account' do
expect(results.count).to eq(1) it 'is present in the AccountsIndex' do
expect(results.first.text).to eq(account.note) expect(results.count)
.to eq(1)
expect(results.first.text)
.to eq(account.note)
end
end end
end
end
describe 'a discoverable account becoming non-discoverable' do context 'when the account becomes non-discoverable' do
let(:account) { Account.find_by(username: 'search_test_account_0') } it 'is missing from the AccountsIndex' do
expect { account.update! discoverable: false }
context 'when picking an discoverable account' do .to change { results.first.text }.from(account.note).to(be_blank)
it 'has its bio in the AccountsIndex' do .and not_change(results, :count).from(1)
results = AccountsIndex.filter(term: { username: account.username }) end
expect(results.count).to eq(1)
expect(results.first.text).to eq(account.note)
end
end
context 'when the discoverable account becomes non-discoverable' do
it 'its bio is removed from the AccountsIndex' do
account.discoverable = false
account.save!
results = AccountsIndex.filter(term: { username: account.username })
expect(results.count).to eq(1)
expect(results.first.text).to be_nil
end end
end end
end end

View File

@@ -3,50 +3,55 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe Account::StatusesSearch, :inline_jobs do RSpec.describe Account::StatusesSearch, :inline_jobs do
describe 'a non-indexable account becoming indexable' do describe 'Callbacks for indexable changes' do
let(:account) { Account.find_by(username: 'search_test_account_1') } let(:account) { Fabricate :account, indexable: }
let(:public_statuses_results) { PublicStatusesIndex.filter(term: { account_id: account.id }) }
let(:statuses_results) { StatusesIndex.filter(term: { account_id: account.id }) }
context 'when picking a non-indexable account' do before do
it 'has no statuses in the PublicStatusesIndex' do Fabricate :status, account:, visibility: :private
expect(PublicStatusesIndex.filter(term: { account_id: account.id }).count).to eq(0) Fabricate :status, account:, visibility: :public
end
context 'with a non-indexable account' do
let(:indexable) { false }
context 'when looking for statuses from the account' do
it 'does not have public index statuses' do
expect(public_statuses_results.count)
.to eq(0)
expect(statuses_results.count)
.to eq(account.statuses.count)
end
end end
it 'has statuses in the StatusesIndex' do context 'when the non-indexable account becomes indexable' do
expect(StatusesIndex.filter(term: { account_id: account.id }).count).to eq(account.statuses.count) it 'does have public index statuses' do
expect { account.update! indexable: true }
.to change(public_statuses_results, :count).to(account.statuses.public_visibility.count)
.and not_change(statuses_results, :count).from(account.statuses.count)
end
end end
end end
context 'when the non-indexable account becomes indexable' do describe 'with an indexable account' do
it 'adds the public statuses to the PublicStatusesIndex' do let(:indexable) { true }
account.indexable = true
account.save!
expect(PublicStatusesIndex.filter(term: { account_id: account.id }).count).to eq(account.statuses.public_visibility.count) context 'when picking an indexable account' do
expect(StatusesIndex.filter(term: { account_id: account.id }).count).to eq(account.statuses.count) it 'does have public index statuses' do
end expect(public_statuses_results.count)
end .to eq(account.statuses.public_visibility.count)
end expect(statuses_results.count)
.to eq(account.statuses.count)
describe 'an indexable account becoming non-indexable' do end
let(:account) { Account.find_by(username: 'search_test_account_0') }
context 'when picking an indexable account' do
it 'has statuses in the PublicStatusesIndex' do
expect(PublicStatusesIndex.filter(term: { account_id: account.id }).count).to eq(account.statuses.public_visibility.count)
end end
it 'has statuses in the StatusesIndex' do context 'when the indexable account becomes non-indexable' do
expect(StatusesIndex.filter(term: { account_id: account.id }).count).to eq(account.statuses.count) it 'does not have public index statuses' do
end expect { account.update! indexable: false }
end .to change(public_statuses_results, :count).to(0)
.and not_change(statuses_results, :count).from(account.statuses.count)
context 'when the indexable account becomes non-indexable' do end
it 'removes the statuses from the PublicStatusesIndex' do
account.indexable = false
account.save!
expect(PublicStatusesIndex.filter(term: { account_id: account.id }).count).to eq(0)
expect(StatusesIndex.filter(term: { account_id: account.id }).count).to eq(account.statuses.count)
end end
end end
end end

View File

@@ -43,4 +43,13 @@ RSpec.describe REST::CollectionSerializer do
'items' => [] 'items' => []
) )
end end
context 'when the collection is remote' do
let(:collection) { Fabricate(:remote_collection, description_html: '<p>remote</p>') }
it 'includes the html description' do
expect(subject)
.to include('description' => '<p>remote</p>')
end
end
end end

33
spec/support/search.rb Normal file
View File

@@ -0,0 +1,33 @@
# frozen_string_literal: true
RSpec.configure do |config|
config.before :suite do
if search_examples_present?
Chewy.settings[:enabled] = true
# Configure chewy to use `urgent` strategy to index documents immediately
Chewy.strategy(:urgent)
else
Chewy.settings[:enabled] = false
end
end
config.after :each, :search do
search_indices.each(&:delete)
end
private
def search_indices
[
AccountsIndex,
InstancesIndex,
PublicStatusesIndex,
StatusesIndex,
TagsIndex,
]
end
def search_examples_present?
RSpec.world.filtered_examples.values.flatten.any? { |example| example.metadata[:search] == true }
end
end

View File

@@ -1,81 +0,0 @@
# frozen_string_literal: true
class SearchDataManager
def prepare_test_data
4.times do |i|
username = "search_test_account_#{i}"
account = Fabricate.create(:account, username: username, indexable: i.even?, discoverable: i.even?, note: "Lover of #{i}.")
2.times do |j|
Fabricate.create(:status, account: account, text: "#{username}'s #{j} post", visibility: j.even? ? :public : :private)
end
end
3.times do |i|
Fabricate.create(:tag, name: "search_test_tag_#{i}")
end
end
def indexes
[
AccountsIndex,
PublicStatusesIndex,
StatusesIndex,
TagsIndex,
]
end
def populate_indexes
indexes.each do |index_class|
index_class.purge!
index_class.import!
end
end
def remove_indexes
indexes.each(&:delete!)
end
def cleanup_test_data
Status.destroy_all
Account.destroy_all
Tag.destroy_all
end
end
RSpec.configure do |config|
config.before :suite do
if search_examples_present?
Chewy.settings[:enabled] = true
# Configure chewy to use `urgent` strategy to index documents
Chewy.strategy(:urgent)
# Create search data
search_data_manager.prepare_test_data
else
Chewy.settings[:enabled] = false
end
end
config.after :suite do
if search_examples_present?
# Clean up after search data
search_data_manager.cleanup_test_data
end
end
config.around :each, :search do |example|
search_data_manager.populate_indexes
example.run
search_data_manager.remove_indexes
end
private
def search_data_manager
@search_data_manager ||= SearchDataManager.new
end
def search_examples_present?
RSpec.world.filtered_examples.values.flatten.any? { |example| example.metadata[:search] == true }
end
end

View File

@@ -7,7 +7,17 @@ RSpec.describe Scheduler::InstanceRefreshScheduler do
describe 'perform' do describe 'perform' do
it 'runs without error' do it 'runs without error' do
expect { worker.perform }.to_not raise_error expect { worker.perform }
.to_not raise_error
end
end
context 'with elasticsearch enabled', :search do
before { Fabricate :remote_account }
it 'updates search indexes' do
expect { worker.perform }
.to change(InstancesIndex, :count).by(1)
end end
end end
end end