Merge tag 'v4.5.0-beta.2' into chinwag-next

This commit is contained in:
Mike Barnes 2025-10-26 10:18:58 +11:00
commit 99461d3357
392 changed files with 1481 additions and 806 deletions

View file

@ -63,7 +63,7 @@ export const AnimateEmojiProvider = polymorphicForwardRef<
// If there's a parent context or GIFs autoplay, we don't need handlers.
const parentContext = useContext(AnimateEmojiContext);
if (parentContext !== null || autoPlayGif === true) {
if (parentContext !== null) {
return (
<Wrapper
{...props}

View file

@ -139,24 +139,24 @@ export const Default = {
Last pressed hotkey: <output>{matchedHotkey ?? 'None'}</output>
</p>
<p>
Click within the dashed border and press the &quot;<kbd>n</kbd>
&quot; or &quot;<kbd>/</kbd>&quot; key. Press &quot;
<kbd>Backspace</kbd>&quot; to clear the displayed hotkey.
Click within the dashed border and press the <kbd>n</kbd>
or <kbd>/</kbd> key. Press
<kbd>Backspace</kbd> to clear the displayed hotkey.
</p>
<p>
Try typing a sequence, like &quot;<kbd>g</kbd>&quot; shortly
followed by &quot;<kbd>h</kbd>&quot;, &quot;<kbd>n</kbd>&quot;, or
&quot;<kbd>f</kbd>&quot;
Try typing a sequence, like <kbd>g</kbd> shortly followed by{' '}
<kbd>h</kbd>, <kbd>n</kbd>, or
<kbd>f</kbd>
</p>
<p>
Note that this playground doesn&apos;t support all hotkeys we use in
the app.
</p>
<p>
When a <button>Button</button> is focused, &quot;
When a <button>Button</button> is focused,
<kbd>Enter</kbd>
&quot; should not trigger &quot;open&quot;, but &quot;<kbd>o</kbd>
&quot; should.
should not trigger open, but <kbd>o</kbd>
should.
</p>
<p>
When an input element is focused, hotkeys should not interfere with

View file

@ -1,5 +1,5 @@
import { useCallback, useMemo } from 'react';
import type { FC, KeyboardEvent, MouseEvent } from 'react';
import type { FC, KeyboardEvent, MouseEvent, MouseEventHandler } from 'react';
import { useIntl } from 'react-intl';
@ -8,6 +8,7 @@ import classNames from 'classnames';
import { quoteComposeById } from '@/mastodon/actions/compose_typed';
import { toggleReblog } from '@/mastodon/actions/interactions';
import { openModal } from '@/mastodon/actions/modal';
import { quickBoosting } from '@/mastodon/initial_state';
import type { ActionMenuItem } from '@/mastodon/models/dropdown_menu';
import type { Status } from '@/mastodon/models/status';
import { useAppDispatch, useAppSelector } from '@/mastodon/store';
@ -24,6 +25,55 @@ import {
selectStatusState,
} from './boost_button_utils';
const StandaloneBoostButton: FC<ReblogButtonProps> = ({ status, counters }) => {
const intl = useIntl();
const dispatch = useAppDispatch();
const statusState = useAppSelector((state) =>
selectStatusState(state, status),
);
const { title, meta, iconComponent, disabled } = useMemo(
() => boostItemState(statusState),
[statusState],
);
const handleClick: MouseEventHandler = useCallback(
(event) => {
if (statusState.isLoggedIn) {
dispatch(toggleReblog(status.get('id') as string, event.shiftKey));
} else {
dispatch(
openModal({
modalType: 'INTERACTION',
modalProps: {
accountId: status.getIn(['account', 'id']),
url: status.get('uri'),
},
}),
);
}
},
[dispatch, status, statusState.isLoggedIn],
);
return (
<IconButton
disabled={disabled}
active={!!status.get('reblogged')}
title={intl.formatMessage(meta ?? title)}
icon='retweet'
iconComponent={iconComponent}
onClick={!disabled ? handleClick : undefined}
counter={
counters
? (status.get('reblogs_count') as number) +
(status.get('quotes_count') as number)
: undefined
}
/>
);
};
const renderMenuItem: RenderItemFn<ActionMenuItem> = (
item,
index,
@ -46,7 +96,7 @@ interface ReblogButtonProps {
type ActionMenuItemWithIcon = SomeRequired<ActionMenuItem, 'icon'>;
export const BoostButton: FC<ReblogButtonProps> = ({ status, counters }) => {
const BoostOrQuoteMenu: FC<ReblogButtonProps> = ({ status, counters }) => {
const intl = useIntl();
const dispatch = useAppDispatch();
const statusState = useAppSelector((state) =>
@ -188,3 +238,9 @@ const ReblogMenuItem: FC<ReblogMenuItemProps> = ({
</li>
);
};
// Switch between the standalone boost button or the
// "Boost or quote" menu based on the quickBoosting preference
export const BoostButton = quickBoosting
? StandaloneBoostButton
: BoostOrQuoteMenu;

View file

@ -20,11 +20,12 @@ import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
import { Dropdown } from 'mastodon/components/dropdown_menu';
import { me } from '../../initial_state';
import { me, quickBoosting } from '../../initial_state';
import { IconButton } from '../icon_button';
import { BoostButton } from '../status/boost_button';
import { RemoveQuoteHint } from './remove_quote_hint';
import { quoteItemState, selectStatusState } from '../status/boost_button_utils';
const messages = defineMessages({
delete: { id: 'status.delete', defaultMessage: 'Delete' },
@ -68,6 +69,7 @@ const mapStateToProps = (state, { status }) => {
return ({
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
statusQuoteState: selectStatusState(state, status),
});
};
@ -76,6 +78,7 @@ class StatusActionBar extends ImmutablePureComponent {
identity: identityContextPropShape,
status: ImmutablePropTypes.map.isRequired,
relationship: ImmutablePropTypes.record,
statusQuoteState: PropTypes.object,
quotedAccountId: PropTypes.string,
contextType: PropTypes.string,
onReply: PropTypes.func,
@ -125,6 +128,10 @@ class StatusActionBar extends ImmutablePureComponent {
}
};
handleQuoteClick = () => {
this.props.onQuote(this.props.status);
};
handleShareClick = () => {
navigator.share({
url: this.props.status.get('url'),
@ -241,7 +248,7 @@ class StatusActionBar extends ImmutablePureComponent {
};
render () {
const { status, relationship, quotedAccountId, contextType, intl, withDismiss, withCounters, scrollKey } = this.props;
const { status, relationship, statusQuoteState, quotedAccountId, contextType, intl, withDismiss, withCounters, scrollKey } = this.props;
const { signedIn, permissions } = this.props.identity;
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
@ -270,6 +277,19 @@ class StatusActionBar extends ImmutablePureComponent {
menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
}
if (quickBoosting && signedIn) {
const quoteItem = quoteItemState(statusQuoteState);
menu.push(null);
menu.push({
text: intl.formatMessage(quoteItem.title),
description: quoteItem.meta
? intl.formatMessage(quoteItem.meta)
: undefined,
disabled: quoteItem.disabled,
action: this.handleQuoteClick,
});
}
if (signedIn) {
menu.push(null);

View file

@ -269,7 +269,7 @@ class StatusContent extends PureComponent {
lang={language}
htmlString={content}
extraEmojis={status.get('emojis')}
onElement={this.handleElement.bind(this)}
onElement={this.handleElement}
/>
{poll}
@ -287,7 +287,7 @@ class StatusContent extends PureComponent {
lang={language}
htmlString={content}
extraEmojis={status.get('emojis')}
onElement={this.handleElement.bind(this)}
onElement={this.handleElement}
/>
{poll}

View file

@ -12,6 +12,7 @@ import type { Status } from 'mastodon/models/status';
import type { RootState } from 'mastodon/store';
import { useAppDispatch, useAppSelector } from 'mastodon/store';
import { fetchRelationships } from '../actions/accounts';
import { revealAccount } from '../actions/accounts_typed';
import { fetchStatus } from '../actions/statuses';
import { makeGetStatusWithExtraInfo } from '../selectors';
@ -148,6 +149,10 @@ export const QuotedStatus: React.FC<QuotedStatusProps> = ({
}
}, [shouldFetchQuote, quotedStatusId, parentQuotePostId, dispatch]);
useEffect(() => {
if (accountId && hiddenAccount) dispatch(fetchRelationships([accountId]));
}, [accountId, hiddenAccount, dispatch]);
const isFilteredAndHidden = loadingState === 'filtered';
let quoteError: React.ReactNode = null;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -9,7 +9,7 @@ import { EMOJI_MODE_NATIVE } from './constants';
import EmojiData from './emoji_data.json';
import { useEmojiAppState } from './mode';
const backgroundImageFnDefault = () => `${assetHost}/emoji/sheet_15_1.png`;
const backgroundImageFnDefault = () => `${assetHost}/emoji/sheet_16_0.png`;
const Emoji = ({
set = 'twitter',

View file

@ -76,7 +76,7 @@ function testEmojiSupport(text: string) {
return compareFeatures(feature1, feature2);
}
const EMOJI_VERSION_TEST_EMOJI = '🫨'; // shaking head, from v15
const EMOJI_VERSION_TEST_EMOJI = '🫩'; // face with bags under eyes, from Unicode 16.0.
const EMOJI_FLAG_TEST_EMOJI = '🇨🇭';
export function determineEmojiMode(style: string): EmojiMode {

View file

@ -142,7 +142,7 @@ class HashtagTimeline extends PureComponent {
const { params, local } = this.props;
const { id, tags } = prevProps.params;
if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, params.local)) {
if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, prevProps.local)) {
this._unload();
this._load();
}

View file

@ -46,11 +46,15 @@ export const EmbeddedStatusContent: React.FC<{
() => (status.get('mentions') as List<Mention>).toJS(),
[status],
);
const htmlHandlers = useElementHandledLink({
hashtagAccountId: status.get('account') as string | undefined,
hrefToMention(href) {
const hrefToMention = useCallback(
(href: string) => {
return mentions.find((item) => item.url === href);
},
[mentions],
);
const htmlHandlers = useElementHandledLink({
hashtagAccountId: status.get('account') as string | undefined,
hrefToMention,
});
const handleContentRef = useCallback(

View file

@ -18,8 +18,9 @@ import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/
import { IconButton } from '../../../components/icon_button';
import { Dropdown } from 'mastodon/components/dropdown_menu';
import { me } from '../../../initial_state';
import { me, quickBoosting } from '../../../initial_state';
import { BoostButton } from '@/mastodon/components/status/boost_button';
import { quoteItemState, selectStatusState } from '@/mastodon/components/status/boost_button_utils';
const messages = defineMessages({
delete: { id: 'status.delete', defaultMessage: 'Delete' },
@ -60,6 +61,7 @@ const mapStateToProps = (state, { status }) => {
return ({
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
statusQuoteState: selectStatusState(state, status),
});
};
@ -68,6 +70,7 @@ class ActionBar extends PureComponent {
identity: identityContextPropShape,
status: ImmutablePropTypes.map.isRequired,
relationship: ImmutablePropTypes.record,
statusQuoteState: PropTypes.object,
quotedAccountId: ImmutablePropTypes.string,
onReply: PropTypes.func.isRequired,
onReblog: PropTypes.func.isRequired,
@ -116,6 +119,10 @@ class ActionBar extends PureComponent {
this.props.onRevokeQuote(this.props.status);
};
handleQuoteClick = () => {
this.props.onQuote(this.props.status);
};
handleQuotePolicyChange = () => {
this.props.onQuotePolicyChange(this.props.status);
};
@ -200,7 +207,7 @@ class ActionBar extends PureComponent {
};
render () {
const { status, relationship, quotedAccountId, intl } = this.props;
const { status, relationship, statusQuoteState, quotedAccountId, intl } = this.props;
const { signedIn, permissions } = this.props.identity;
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
@ -226,6 +233,19 @@ class ActionBar extends PureComponent {
menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });
}
if (quickBoosting && signedIn) {
const quoteItem = quoteItemState(statusQuoteState);
menu.push(null);
menu.push({
text: intl.formatMessage(quoteItem.title),
description: quoteItem.meta
? intl.formatMessage(quoteItem.meta)
: undefined,
disabled: quoteItem.disabled,
action: this.handleQuoteClick,
});
}
if (signedIn) {
menu.push(null);

View file

@ -38,7 +38,7 @@ const messages = defineMessages({
},
success: {
id: 'status.context.loading_success',
defaultMessage: 'All replies loaded',
defaultMessage: 'New replies loaded',
},
error: {
id: 'status.context.loading_error',
@ -81,22 +81,38 @@ export const RefreshController: React.FC<{
useEffect(() => {
let timeoutId: ReturnType<typeof setTimeout>;
const scheduleRefresh = (refresh: AsyncRefreshHeader) => {
const scheduleRefresh = (
refresh: AsyncRefreshHeader,
iteration: number,
) => {
timeoutId = setTimeout(() => {
void apiGetAsyncRefresh(refresh.id).then((result) => {
// If the refresh status is not finished,
// schedule another refresh and exit
if (result.async_refresh.status !== 'finished') {
scheduleRefresh(refresh);
// At three scheduled refreshes, we consider the job
// long-running and attempt to fetch any new replies so far
const isLongRunning = iteration === 3;
const { status, result_count } = result.async_refresh;
// If the refresh status is not finished and not long-running,
// we just schedule another refresh and exit
if (status === 'running' && !isLongRunning) {
scheduleRefresh(refresh, iteration + 1);
return;
}
// Refresh status is finished. The action below will clear `refreshHeader`
dispatch(completeContextRefresh({ statusId }));
// If refresh status is finished, clear `refreshHeader`
// (we don't want to do this if it's just a long-running job)
if (status === 'finished') {
dispatch(completeContextRefresh({ statusId }));
}
// Exit if there's nothing to fetch
if (result.async_refresh.result_count === 0) {
setLoadingState('idle');
if (result_count === 0) {
if (status === 'finished') {
setLoadingState('idle');
} else {
scheduleRefresh(refresh, iteration + 1);
}
return;
}
@ -106,10 +122,15 @@ export const RefreshController: React.FC<{
// If so, they will populate `contexts.pendingReplies[statusId]`
void dispatch(fetchContext({ statusId, prefetchOnly: true }))
.then(() => {
// Reset loading state to `idle` but if the fetch
// has resulted in new pending replies, the `hasPendingReplies`
// Reset loading state to `idle`. If the fetch has
// resulted in new pending replies, the `hasPendingReplies`
// flag will switch the loading state to 'more-available'
setLoadingState('idle');
if (status === 'finished') {
setLoadingState('idle');
} else {
// Keep background fetch going if `isLongRunning` is true
scheduleRefresh(refresh, iteration + 1);
}
})
.catch(() => {
// Show an error if the fetch failed
@ -121,7 +142,7 @@ export const RefreshController: React.FC<{
// Initialise a refresh
if (refreshHeader && !wasDismissed) {
scheduleRefresh(refreshHeader);
scheduleRefresh(refreshHeader, 1);
setLoadingState('loading');
}
@ -135,7 +156,7 @@ export const RefreshController: React.FC<{
if (loadingState === 'success') {
const timeoutId = setTimeout(() => {
setLoadingState('idle');
}, 3000);
}, 2500);
return () => {
clearTimeout(timeoutId);

View file

@ -9,6 +9,7 @@ interface InitialStateMeta {
activity_api_enabled: boolean;
admin: string;
boost_modal?: boolean;
quick_boosting?: boolean;
delete_modal?: boolean;
missing_alt_text_modal?: boolean;
disable_swiping?: boolean;
@ -89,6 +90,7 @@ function getMeta<K extends keyof InitialStateMeta>(
export const activityApiEnabled = getMeta('activity_api_enabled');
export const autoPlayGif = getMeta('auto_play_gif');
export const boostModal = getMeta('boost_modal');
export const quickBoosting = getMeta('quick_boosting');
export const deleteModal = getMeta('delete_modal');
export const missingAltTextModal = getMeta('missing_alt_text_modal');
export const disableSwiping = getMeta('disable_swiping');

View file

@ -31,7 +31,7 @@
"account.edit_profile_short": "Рэдагаваць",
"account.enable_notifications": "Апавяшчаць мяне пра допісы @{name}",
"account.endorse": "Паказваць у профілі",
"account.familiar_followers_many": "Мае сярод падпісчыкаў {name1}, {name2}, і {othersCount, plural, one {яшчэ # чалавека, знаёмага вам} few {яшчэ # чалавекі, знаёмыя вам} many {яшчэ # чалавек, знаёмых вам} other {яшчэ # чалавекі, знаёмыя вам}}",
"account.familiar_followers_many": "Мае сярод падпісчыкаў {name1}, {name2}, і {othersCount, plural, one {яшчэ # чалавека, знаёмага Вам} few {яшчэ # чалавекі, знаёмыя Вам} many {яшчэ # чалавек, знаёмых Вам} other {яшчэ # чалавекі, знаёмыя Вам}}",
"account.familiar_followers_one": "Мае сярод падпісчыкаў {name1}",
"account.familiar_followers_two": "Мае сярод падпісчыкаў {name1} і {name2}",
"account.featured": "Рэкамендаванае",
@ -49,7 +49,7 @@
"account.followers": "Падпісчыкі",
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
"account.followers_you_know_counter": "{count, plural, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
"account.followers_you_know_counter": "{count, plural, one {{counter} знаёмы Вам} few {{counter} знаёмыя Вам} other {{counter} знаёмых Вам}}",
"account.following": "Падпіскі",
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
@ -249,7 +249,7 @@
"confirmations.quiet_post_quote_info.message": "Калі будзеце цытаваць ціхі публічны допіс, Ваш допіс будзе схаваны ад трэндавых стужак.",
"confirmations.quiet_post_quote_info.title": "Цытаванне ціхіх публічных допісаў",
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
"confirmations.redraft.message": "Вы ўпэўненыя, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
"confirmations.remove_from_followers.confirm": "Выдаліць падпісчыка",
"confirmations.remove_from_followers.message": "{name} больш не будзе падпісаны(-ая) на Вас. Упэўненыя, што хочаце працягнуць?",
@ -876,7 +876,7 @@
"status.contains_quote": "Утрымлівае цытату",
"status.context.loading": "Загружаюцца іншыя адказы",
"status.context.loading_error": "Немагчыма загрузіць новыя адказы",
"status.context.loading_success": "Усе адказы загружаныя",
"status.context.loading_success": "Новыя адказы загружаныя",
"status.context.more_replies_found": "Знойдзеныя іншыя адказы",
"status.context.retry": "Паспрабаваць зноў",
"status.context.show": "Паказаць",

View file

@ -871,7 +871,6 @@
"status.contains_quote": "Conté una cita",
"status.context.loading": "Es carreguen més respostes",
"status.context.loading_error": "No s'han pogut carregar respostes noves",
"status.context.loading_success": "S'han carregat totes les respostes",
"status.context.more_replies_found": "S'han trobat més respostes",
"status.context.retry": "Torna-ho a provar",
"status.context.show": "Mostra",

View file

@ -876,7 +876,6 @@
"status.contains_quote": "Obsahuje citaci",
"status.context.loading": "Načítání dalších odpovědí",
"status.context.loading_error": "Nelze načíst nové odpovědi",
"status.context.loading_success": "Všechny odpovědi načteny",
"status.context.more_replies_found": "Nalezeny další odpovědi",
"status.context.retry": "Zkusit znovu",
"status.context.show": "Zobrazit",

View file

@ -875,7 +875,6 @@
"status.contains_quote": "Yn cynnwys dyfyniad",
"status.context.loading": "Yn llwytho mwy o atebion",
"status.context.loading_error": "Wedi methu llwytho atebion newydd",
"status.context.loading_success": "Wedi llwytho'r holl atebion",
"status.context.more_replies_found": "Mwy o atebion wedi'u canfod",
"status.context.retry": "Ceisio eto",
"status.context.show": "Dangos",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Indeholder citat",
"status.context.loading": "Indlæser flere svar",
"status.context.loading_error": "Kunne ikke indlæse nye svar",
"status.context.loading_success": "Alle svar indlæst",
"status.context.loading_success": "Nye svar indlæst",
"status.context.more_replies_found": "Flere svar fundet",
"status.context.retry": "Prøv igen",
"status.context.show": "Vis",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Enthält Zitat",
"status.context.loading": "Weitere Antworten laden",
"status.context.loading_error": "Weitere Antworten konnten nicht geladen werden",
"status.context.loading_success": "Alle weiteren Antworten geladen",
"status.context.loading_success": "Neue Antworten geladen",
"status.context.more_replies_found": "Weitere Antworten verfügbar",
"status.context.retry": "Erneut versuchen",
"status.context.show": "Anzeigen",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Περιέχει παράθεση",
"status.context.loading": "Φόρτωση περισσότερων απαντήσεων",
"status.context.loading_error": "Αδυναμία φόρτωσης νέων απαντήσεων",
"status.context.loading_success": "Όλες οι απαντήσεις φορτώθηκαν",
"status.context.loading_success": "Νέες απαντήσεις φορτώθηκαν",
"status.context.more_replies_found": "Βρέθηκαν περισσότερες απαντήσεις",
"status.context.retry": "Επανάληψη",
"status.context.show": "Εμφάνιση",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Contains quote",
"status.context.loading": "Loading more replies",
"status.context.loading_error": "Couldn't load new replies",
"status.context.loading_success": "All replies loaded",
"status.context.loading_success": "New replies loaded",
"status.context.more_replies_found": "More replies found",
"status.context.retry": "Retry",
"status.context.show": "Show",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Contiene cita",
"status.context.loading": "Cargando más respuestas",
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
"status.context.loading_success": "Se cargaron todas las respuestas",
"status.context.loading_success": "Se cargaron nuevas respuestas",
"status.context.more_replies_found": "Se encontraron más respuestas",
"status.context.retry": "Reintentar",
"status.context.show": "Mostrar",

View file

@ -753,7 +753,7 @@
"privacy.unlisted.short": "Pública, pero discreta",
"privacy_policy.last_updated": "Actualizado por última vez {date}",
"privacy_policy.title": "Política de Privacidad",
"quote_error.edit": "No se pueden añadir citas mientras se edita una publicación.",
"quote_error.edit": "No se pueden añadir citas cuando se edita una publicación.",
"quote_error.poll": "No se permite citar encuestas.",
"quote_error.quote": "Solo se permite una cita a la vez.",
"quote_error.unauthorized": "No estás autorizado a citar esta publicación.",
@ -876,7 +876,7 @@
"status.contains_quote": "Contiene cita",
"status.context.loading": "Cargando más respuestas",
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
"status.context.loading_success": "Todas las respuestas cargadas",
"status.context.loading_success": "Cargadas nuevas respuestas",
"status.context.more_replies_found": "Se han encontrado más respuestas",
"status.context.retry": "Reintentar",
"status.context.show": "Mostrar",

View file

@ -753,7 +753,7 @@
"privacy.unlisted.short": "Pública silenciosa",
"privacy_policy.last_updated": "Actualizado por última vez {date}",
"privacy_policy.title": "Política de Privacidad",
"quote_error.edit": "No se pueden añadir citas mientras se edita una publicación.",
"quote_error.edit": "No se pueden añadir citas cuando se edita una publicación.",
"quote_error.poll": "No es posible citar encuestas.",
"quote_error.quote": "Solo se permite una cita a la vez.",
"quote_error.unauthorized": "No tienes permiso para citar esta publicación.",
@ -876,7 +876,7 @@
"status.contains_quote": "Contiene cita",
"status.context.loading": "Cargando más respuestas",
"status.context.loading_error": "No se pudieron cargar nuevas respuestas",
"status.context.loading_success": "Se cargaron todas las respuestas",
"status.context.loading_success": "Cargadas nuevas respuestas",
"status.context.more_replies_found": "Se encontraron más respuestas",
"status.context.retry": "Reintentar",
"status.context.show": "Mostrar",

View file

@ -753,6 +753,7 @@
"privacy.unlisted.short": "Vaikselt avalik",
"privacy_policy.last_updated": "Viimati uuendatud {date}",
"privacy_policy.title": "Isikuandmete kaitse",
"quote_error.edit": "Postituse muutmisel ei saa tsitaati lisada.",
"quote_error.poll": "Tsiteerimine pole küsitlustes lubatud.",
"quote_error.quote": "Korraga on lubatud vaid üks tsitaat.",
"quote_error.unauthorized": "Sul pole õigust seda postitust tsiteerida.",
@ -875,7 +876,7 @@
"status.contains_quote": "Sisaldab tsitaati",
"status.context.loading": "Laadin veel vastuseid",
"status.context.loading_error": "Uute vastuste laadimine ei õnnestunud",
"status.context.loading_success": "Kõik vastused on laaditud",
"status.context.loading_success": "Uued vastused on laaditud",
"status.context.more_replies_found": "Leidub veel vastuseid",
"status.context.retry": "Proovi uuesti",
"status.context.show": "Näita",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Sisältää lainauksen",
"status.context.loading": "Ladataan lisää vastauksia",
"status.context.loading_error": "Ei voitu ladata lisää vastauksia",
"status.context.loading_success": "Kaikki vastaukset ladattu",
"status.context.loading_success": "Uudet vastaukset ladattu",
"status.context.more_replies_found": "Löytyi lisää vastauksia",
"status.context.retry": "Yritä uudelleen",
"status.context.show": "Näytä",

View file

@ -55,7 +55,7 @@
"account.follows.empty": "Hesin brúkari fylgir ongum enn.",
"account.follows_you": "Fylgir tær",
"account.go_to_profile": "Far til vanga",
"account.hide_reblogs": "Fjal lyft frá @{name}",
"account.hide_reblogs": "Fjal stimbran frá @{name}",
"account.in_memoriam": "In memoriam.",
"account.joined_short": "Gjørdist limur",
"account.languages": "Broyt fylgd mál",
@ -79,7 +79,7 @@
"account.requested_follow": "{name} hevur biðið um at fylgja tær",
"account.requests_to_follow_you": "Umbønir um at fylgja tær",
"account.share": "Deil vanga @{name}'s",
"account.show_reblogs": "Vís lyft frá @{name}",
"account.show_reblogs": "Vís stimbran frá @{name}",
"account.statuses_counter": "{count, plural, one {{counter} postur} other {{counter} postar}}",
"account.unblock": "Banna ikki @{name}",
"account.unblock_domain": "Banna ikki økisnavnið {domain}",
@ -122,7 +122,7 @@
"annual_report.summary.followers.total": "{count} íalt",
"annual_report.summary.here_it_is": "Her er ein samandráttur av {year}:",
"annual_report.summary.highlighted_post.by_favourites": "mest dámdi postur",
"annual_report.summary.highlighted_post.by_reblogs": "oftast lyfti postur",
"annual_report.summary.highlighted_post.by_reblogs": "oftast stimbraði postur",
"annual_report.summary.highlighted_post.by_replies": "postur við flestum svarum",
"annual_report.summary.highlighted_post.possessive": "hjá {name}",
"annual_report.summary.most_used_app.most_used_app": "mest brúkta app",
@ -441,7 +441,7 @@
"hints.profiles.see_more_follows": "Sí fleiri, ið viðkomandi fylgir, á {domain}",
"hints.profiles.see_more_posts": "Sí fleiri postar á {domain}",
"home.column_settings.show_quotes": "Vís siteringar",
"home.column_settings.show_reblogs": "Vís lyft",
"home.column_settings.show_reblogs": "Vís stimbranir",
"home.column_settings.show_replies": "Vís svar",
"home.hide_announcements": "Fjal kunngerðir",
"home.pending_critical_update.body": "Vinarliga dagfør Mastodon ambætaran hjá tær so skjótt sum møguligt!",
@ -473,7 +473,7 @@
"intervals.full.minutes": "{number, plural, one {# minuttur} other {# minuttir}}",
"keyboard_shortcuts.back": "Bakka",
"keyboard_shortcuts.blocked": "Siggj listan við bannaðum brúkarum",
"keyboard_shortcuts.boost": "Lyft post",
"keyboard_shortcuts.boost": "Stimbra post",
"keyboard_shortcuts.column": "Fá teig í miðdepilin",
"keyboard_shortcuts.compose": "Fá skriviøkið í miðdeplin",
"keyboard_shortcuts.description": "Frágreiðing",
@ -626,7 +626,7 @@
"notification.own_poll": "Tín atkvøðugreiðsla er endað",
"notification.poll": "Ein atkvøðugreiðsla, har tú atkvøddi, er endað",
"notification.quoted_update": "{name} rættaði ein post, sum tú hevur siterað",
"notification.reblog": "{name} lyfti tín post",
"notification.reblog": "{name} stimbraði tín post",
"notification.reblog.name_and_others_with_link": "{name} og <a>{count, plural, one {# annar/onnur} other {# onnur}}</a> framhevjaðu tín post",
"notification.relationships_severance_event": "Mist sambond við {name}",
"notification.relationships_severance_event.account_suspension": "Ein umsitari frá {from} hevur gjørt {target} óvirkna, sum merkir, at tú ikki kanst móttaka dagføringar ella virka saman við teimum longur.",
@ -876,7 +876,7 @@
"status.contains_quote": "Inniheldur sitat",
"status.context.loading": "Tekur fleiri svar niður",
"status.context.loading_error": "Fekk ikki tikið nýggj svar niður",
"status.context.loading_success": "Øll svar tikin niður",
"status.context.loading_success": "Nýggj svar tikin niður",
"status.context.more_replies_found": "Fleiri svar funnin",
"status.context.retry": "Royn aftur",
"status.context.show": "Vís",

View file

@ -869,7 +869,6 @@
"status.contains_quote": "Contient la citation",
"status.context.loading": "Chargement de réponses supplémentaires",
"status.context.loading_error": "Impossible de charger les nouvelles réponses",
"status.context.loading_success": "Toutes les réponses sont chargées",
"status.context.more_replies_found": "Plus de réponses trouvées",
"status.context.retry": "Réessayer",
"status.context.show": "Montrer",

View file

@ -869,7 +869,6 @@
"status.contains_quote": "Contient la citation",
"status.context.loading": "Chargement de réponses supplémentaires",
"status.context.loading_error": "Impossible de charger les nouvelles réponses",
"status.context.loading_success": "Toutes les réponses sont chargées",
"status.context.more_replies_found": "Plus de réponses trouvées",
"status.context.retry": "Réessayer",
"status.context.show": "Montrer",

View file

@ -753,6 +753,7 @@
"privacy.unlisted.short": "Poiblí ciúin",
"privacy_policy.last_updated": "Nuashonraithe {date}",
"privacy_policy.title": "Polasaí príobháideachais",
"quote_error.edit": "Ní féidir Sleachta a chur leis agus post á chur in eagar.",
"quote_error.poll": "Ní cheadaítear lua le pobalbhreitheanna.",
"quote_error.quote": "Ní cheadaítear ach luachan amháin ag an am.",
"quote_error.unauthorized": "Níl údarás agat an post seo a lua.",
@ -875,7 +876,7 @@
"status.contains_quote": "Tá luachan ann",
"status.context.loading": "Ag lódáil tuilleadh freagraí",
"status.context.loading_error": "Níorbh fhéidir freagraí nua a lódáil",
"status.context.loading_success": "Luchtaithe na freagraí uile",
"status.context.loading_success": "Freagraí nua luchtaithe",
"status.context.more_replies_found": "Tuilleadh freagraí aimsithe",
"status.context.retry": "Déan iarracht arís",
"status.context.show": "Taispeáin",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Contén unha cita",
"status.context.loading": "Cargando máis respostas",
"status.context.loading_error": "Non se puideron mostrar novas respostas",
"status.context.loading_success": "Móstranse todas as respostas",
"status.context.loading_success": "Móstranse novas respostas",
"status.context.more_replies_found": "Existen máis respostas",
"status.context.retry": "Volver tentar",
"status.context.show": "Mostrar",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "הודעה מכילה ציטוט",
"status.context.loading": "נטענות תשובות נוספות",
"status.context.loading_error": "טעינת תשובות נוספות נכשלה",
"status.context.loading_success": "כל התשובות נטענו",
"status.context.loading_success": "תשובות חדשות נטענו",
"status.context.more_replies_found": "תשובות נוספות נמצאו",
"status.context.retry": "נסה שוב",
"status.context.show": "הצג",
@ -919,7 +919,7 @@
"status.quote_manual_review": "מחבר.ת ההודעה יחזרו אליך אחרי בדיקה",
"status.quote_noun": "ציטוט",
"status.quote_policy_change": "הגדרת הרשאה לציטוט הודעותיך",
"status.quote_post_author": "ההודעה צוטטה על ידי @{name}",
"status.quote_post_author": "ההודעה היא ציטוט של @{name}",
"status.quote_private": "הודעות פרטיות לא ניתנות לציטוט",
"status.quotes": "{count, plural,one {ציטוט}other {ציטוטים}}",
"status.quotes.empty": "עוד לא ציטטו את ההודעה הזו. כאשר זה יקרה, הציטוטים יופיעו כאן.",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Idézést tartalmaz",
"status.context.loading": "Több válasz betöltése",
"status.context.loading_error": "Az új válaszok nem tölthetőek be",
"status.context.loading_success": "Összes válasz betöltve",
"status.context.loading_success": "Új válaszok betöltve",
"status.context.more_replies_found": "Több válasz található",
"status.context.retry": "Újra",
"status.context.show": "Megjelenítés",
@ -914,7 +914,7 @@
"status.quote_error.not_available": "A bejegyzés nem érhető el",
"status.quote_error.pending_approval": "A bejegyzés függőben van",
"status.quote_error.pending_approval_popout.body": "A Mastodonon te mondod meg, hogy valaki idézhet-e. Ez a bejegyzés addig függőben marad, amíg az eredeti szerző nem engedélyezi azt.",
"status.quote_error.revoked": "A szerző eltávolítta a bejegyzést",
"status.quote_error.revoked": "A szerző eltávolította a bejegyzést",
"status.quote_followers_only": "Csak a követők idézhetik ezt a bejegyzést",
"status.quote_manual_review": "A szerző kézileg fogja jóváhagyni",
"status.quote_noun": "Idézés",

View file

@ -257,7 +257,12 @@
"confirmations.revoke_quote.confirm": "Remover message",
"confirmations.revoke_quote.message": "Iste action non pote esser disfacite.",
"confirmations.revoke_quote.title": "Remover message?",
"confirmations.unblock.confirm": "Disblocar",
"confirmations.unblock.title": "Disblocar {name}?",
"confirmations.unfollow.confirm": "Non plus sequer",
"confirmations.unfollow.title": "Cessar de sequer {name}?",
"confirmations.withdraw_request.confirm": "Retirar requesta",
"confirmations.withdraw_request.title": "Retirar le requesta de sequer {name}?",
"content_warning.hide": "Celar le message",
"content_warning.show": "Monstrar in omne caso",
"content_warning.show_more": "Monstrar plus",
@ -748,6 +753,7 @@
"privacy.unlisted.short": "Public, non listate",
"privacy_policy.last_updated": "Ultime actualisation {date}",
"privacy_policy.title": "Politica de confidentialitate",
"quote_error.edit": "Non es possibile adder citationes quando se modifica un message.",
"quote_error.poll": "Non es permittite citar sondages.",
"quote_error.quote": "Solmente un citation al vice es permittite.",
"quote_error.unauthorized": "Tu non es autorisate a citar iste message.",
@ -870,7 +876,7 @@
"status.contains_quote": "Contine un citation",
"status.context.loading": "Cargante plus responsas",
"status.context.loading_error": "Non poteva cargar nove responsas",
"status.context.loading_success": "Tote le responsas cargate",
"status.context.loading_success": "Nove responsas cargate",
"status.context.more_replies_found": "Plus responsas trovate",
"status.context.retry": "Tentar de novo",
"status.context.show": "Monstrar",
@ -917,6 +923,8 @@
"status.quote_private": "Le messages private non pote esser citate",
"status.quotes": "{count, plural, one {citation} other {citationes}}",
"status.quotes.empty": "Necuno ha ancora citate iste message. Quando alcuno lo face, illo apparera hic.",
"status.quotes.local_other_disclaimer": "Le citationes rejectate per le autor non essera monstrate.",
"status.quotes.remote_other_disclaimer": "Solmente le citationes de {domain} se garanti de esser monstrate hic. Citationes rejectate per le autor non essera monstrate.",
"status.read_more": "Leger plus",
"status.reblog": "Impulsar",
"status.reblog_or_quote": "Impulsar o citar",

View file

@ -312,9 +312,9 @@
"emoji_button.custom": "Sérsniðin",
"emoji_button.flags": "Flögg",
"emoji_button.food": "Matur og drykkur",
"emoji_button.label": "Setja inn tjáningartákn",
"emoji_button.label": "Setja inn lyndistákn",
"emoji_button.nature": "Náttúra",
"emoji_button.not_found": "Engin samsvarandi tjáningartákn fundust",
"emoji_button.not_found": "Engin samsvarandi lyndistákn fundust",
"emoji_button.objects": "Hlutir",
"emoji_button.people": "Fólk",
"emoji_button.recent": "Oft notuð",
@ -753,6 +753,7 @@
"privacy.unlisted.short": "Hljóðlátt opinbert",
"privacy_policy.last_updated": "Síðast uppfært {date}",
"privacy_policy.title": "Persónuverndarstefna",
"quote_error.edit": "Ekki er hægt að bæta við tilvitnunum þegar færslum er breytt.",
"quote_error.poll": "Ekki er leyft að vitna í kannanir.",
"quote_error.quote": "Einungis ein tilvitnun er leyfð í einu.",
"quote_error.unauthorized": "Þú hefur ekki heimild til að vitna í þessa færslu.",
@ -875,7 +876,7 @@
"status.contains_quote": "Inniheldur tilvitnun",
"status.context.loading": "Hleð inn fleiri svörum",
"status.context.loading_error": "Gat ekki hlaðið inn nýjum svörum",
"status.context.loading_success": "Öllum svörum hlaðið inn",
"status.context.loading_success": "Nýjum svörum hlaðið inn",
"status.context.more_replies_found": "Fleiri svör fundust",
"status.context.retry": "Reyna aftur",
"status.context.show": "Sýna",

View file

@ -753,6 +753,7 @@
"privacy.unlisted.short": "Pubblico silenzioso",
"privacy_policy.last_updated": "Ultimo aggiornamento {date}",
"privacy_policy.title": "Politica sulla Privacy",
"quote_error.edit": "Le citazioni non possono essere aggiunte quando si modifica un post.",
"quote_error.poll": "Nei sondaggi non sono consentite le citazioni.",
"quote_error.quote": "È consentita una sola citazione alla volta.",
"quote_error.unauthorized": "Non sei autorizzato a citare questo post.",
@ -875,7 +876,7 @@
"status.contains_quote": "Contiene una citazione",
"status.context.loading": "Caricamento di altre risposte",
"status.context.loading_error": "Impossibile caricare nuove risposte",
"status.context.loading_success": "Tutte le risposte caricate",
"status.context.loading_success": "Nuove risposte caricate",
"status.context.more_replies_found": "Sono state trovate altre risposte",
"status.context.retry": "Riprova",
"status.context.show": "Mostra",

View file

@ -742,7 +742,7 @@
"privacy_policy.title": "개인정보처리방침",
"quote_error.poll": "인용과 투표를 함께 사용할 수 없습니다.",
"quote_error.quote": "한 번의 인용만 허용됩니다.",
"quote_error.unauthorized": "이 을 인용할 권한이 없습니다.",
"quote_error.unauthorized": "이 게시물을 인용할 권한이 없습니다.",
"quote_error.upload": "인용과 미디어 첨부를 함께 사용할 수 없습니다.",
"recommended": "추천함",
"refresh": "새로고침",
@ -857,7 +857,9 @@
"status.block": "@{name} 차단",
"status.bookmark": "북마크",
"status.cancel_reblog_private": "부스트 취소",
"status.cannot_quote": "인용을 비허용하는 게시물",
"status.cannot_reblog": "이 게시물은 부스트 할 수 없습니다",
"status.contains_quote": "인용 포함",
"status.continued_thread": "이어지는 글타래",
"status.copy": "게시물 링크 복사",
"status.delete": "삭제",
@ -889,12 +891,13 @@
"status.quote_error.filtered": "필터에 의해 가려짐",
"status.quote_error.not_available": "게시물 사용 불가",
"status.quote_error.pending_approval": "게시물 대기중",
"status.quote_followers_only": "팔로워만 이 게시물을 인용할 수 있습니다",
"status.quote_followers_only": "팔로워만 인용할 수 있는 게시물",
"status.quote_manual_review": "작성자가 직접 검토합니다",
"status.quote_noun": "인용",
"status.quote_policy_change": "누가 인용할 수 있는지",
"status.quote_post_author": "인용된 @{name} 님의 게시물",
"status.quote_private": "비공개 게시물은 인용할 수 없습니다",
"status.quotes": "{count, plural, other {#}} 인용",
"status.quotes": "{count, plural, other {인용}}",
"status.quotes.empty": "아직 아무도 이 게시물을 인용하지 않았습니다. 누군가 인용한다면 여기에 표시됩니다.",
"status.read_more": "더 보기",
"status.reblog": "부스트",
@ -976,7 +979,8 @@
"video.volume_up": "음량 증가",
"visibility_modal.button_title": "공개범위 설정",
"visibility_modal.header": "공개범위와 반응",
"visibility_modal.helper.unlisted_quoting": "사람들이 나를 인용한 경우 그 게시물 또한 유행에서 제외됩니다.",
"visibility_modal.helper.unlisted_quoting": "사람들에게 인용된 경우, 인용한 게시물도 유행 타임라인에서 감추게 됩니다.",
"visibility_modal.instructions": "누가 이 게시물과 상호작용할 수 있는 지 제어합니다. 또한 <link>환경설정 > 게시물 기본설정</link>으로 이동해 향후 모든 게시물의 설정을 적용할 수 있습니다.",
"visibility_modal.privacy_label": "공개 범위",
"visibility_modal.quote_followers": "팔로워만",
"visibility_modal.quote_label": "인용할 수 있는 사람",

View file

@ -223,7 +223,7 @@
"empty_column.explore_statuses": "Tiştek niha di rojevê de tune. Paşê vegere!",
"empty_column.follow_requests": "Hê jî daxwaza şopandinê tunne ye. Dema daxwazek hat, yê li vir were nîşan kirin.",
"empty_column.hashtag": "Di vê hashtagê de hêj tiştekî tune.",
"empty_column.home": "Rojeva demnameya te vala ye! Ji bona tijîkirinê bêtir mirovan bişopîne. {suggestions}",
"empty_column.home": "Rojeva demnameya te vala ye! Bo tijîkirina wê bêtir mirovan bişopîne.",
"empty_column.list": "Di vê rêzokê de hîn tiştek tune ye. Gava ku endamên vê rêzokê peyamên nû biweşînin, ew ê li vir xuya bibin.",
"empty_column.mutes": "Te tu bikarhêner bêdeng nekiriye.",
"empty_column.notifications": "Hêj hişyariyên te tunene. Dema ku mirovên din bi we re têkilî danîn, hûn ê wê li vir bibînin.",

View file

@ -28,6 +28,7 @@
"account.disable_notifications": "Desha de avizarme sovre publikasyones de @{name}",
"account.domain_blocking": "Blokando el domeno",
"account.edit_profile": "Edita profil",
"account.edit_profile_short": "Edita",
"account.enable_notifications": "Avizame kuando @{name} publike",
"account.endorse": "Avalia en profil",
"account.featured.accounts": "Profiles",
@ -36,6 +37,9 @@
"account.featured_tags.last_status_never": "No ay publikasyones",
"account.follow": "Sige",
"account.follow_back": "Sige tamyen",
"account.follow_back_short": "Sige tambyen",
"account.follow_request_cancel_short": "Anula",
"account.follow_request_short": "Solisitud",
"account.followers": "Suivantes",
"account.followers.empty": "Por agora dingun no sige a este utilizador.",
"account.followers_counter": "{count, plural, one {{counter} suivante} other {{counter} suivantes}}",
@ -208,12 +212,19 @@
"confirmations.missing_alt_text.confirm": "Adjusta teksto alternativo",
"confirmations.missing_alt_text.title": "Adjustar teksto alternativo?",
"confirmations.mute.confirm": "Silensia",
"confirmations.quiet_post_quote_info.got_it": "Entyendo",
"confirmations.redraft.confirm": "Efasa i reeskrive",
"confirmations.redraft.message": "Estas siguro ke keres efasar esta publikasyon i reeskrivirla? Pedreras todos los favoritos i repartajasyones asosiados kon esta publikasyon i repuestas a eya seran guerfanadas.",
"confirmations.redraft.title": "Efasar i reeskrivir?",
"confirmations.remove_from_followers.confirm": "Kita suivante",
"confirmations.remove_from_followers.title": "Kitar suivante?",
"confirmations.revoke_quote.confirm": "Kita puvlikasyon",
"confirmations.revoke_quote.title": "Kitar puvlikasyon?",
"confirmations.unblock.confirm": "Dezbloka",
"confirmations.unblock.title": "Dezblokar a @{name}?",
"confirmations.unfollow.confirm": "Desige",
"confirmations.unfollow.title": "Desegir a @{name}?",
"confirmations.withdraw_request.confirm": "Anula solisitud",
"content_warning.hide": "Eskonde puvlikasyon",
"content_warning.show": "Amostra entanto",
"content_warning.show_more": "Amostra mas",
@ -245,6 +256,7 @@
"domain_pill.username": "Nombre de utilizador",
"domain_pill.whats_in_a_handle": "En ke konsiste el alias?",
"domain_pill.your_handle": "Tu alias:",
"dropdown.empty": "Eskoje una opsyon",
"embed.instructions": "Enkrusta esta publikasyon en tu sitio internetiko kopiando este kodiche.",
"embed.preview": "Paresera ansina:",
"emoji_button.activity": "Aktivita",
@ -384,6 +396,7 @@
"ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?",
"ignore_notifications_modal.private_mentions_title": "Ignorar avizos de mensyones privadas no solisitadas?",
"info_button.label": "Ayuda",
"interaction_modal.go": "Va",
"interaction_modal.on_another_server": "En otro sirvidor",
"interaction_modal.on_this_server": "En este sirvidor",
"interaction_modal.username_prompt": "Por enshemplo {example}",
@ -414,6 +427,7 @@
"keyboard_shortcuts.open_media": "Avre multimedia",
"keyboard_shortcuts.pinned": "Avre lista de publikasyones fiksadas",
"keyboard_shortcuts.profile": "Avre profil del autor",
"keyboard_shortcuts.quote": "Sita puvlikasyon",
"keyboard_shortcuts.reply": "Arisponde a publikasyon",
"keyboard_shortcuts.requests": "Avre lista de solisitudes de suivantes",
"keyboard_shortcuts.search": "Enfoka en la vara de bushkeda",
@ -422,8 +436,10 @@
"keyboard_shortcuts.toggle_hidden": "Amostra/eskonde teksto detras de avertensya de kontenido (CW)",
"keyboard_shortcuts.toggle_sensitivity": "Amostra/eskonde multimedia",
"keyboard_shortcuts.toot": "Eskrive mueva publikasyon",
"keyboard_shortcuts.translate": "para trezladar una puvlikasyon",
"keyboard_shortcuts.unfocus": "No enfoka en el area de eskrivir/bushkeda",
"keyboard_shortcuts.up": "Move verso arriva en la lista",
"learn_more_link.got_it": "Entyendo",
"learn_more_link.learn_more": "Ambezate mas",
"lightbox.close": "Serra",
"lightbox.next": "Sigiente",
@ -440,8 +456,13 @@
"lists.delete": "Efasa lista",
"lists.done": "Fecho",
"lists.edit": "Edita lista",
"lists.find_users_to_add": "Bushka utilizadores para adjustar",
"lists.list_name": "Nombre de lista",
"lists.new_list_name": "Nombre de mueva lista",
"lists.no_lists_yet": "Ainda no ay listas.",
"lists.no_members_yet": "Ainda no ay myembros.",
"lists.no_results_found": "No se toparon rezultados.",
"lists.remove_member": "Kita",
"lists.replies_policy.followed": "Kualseker utilizador segido",
"lists.replies_policy.list": "Miembros de la lista",
"lists.replies_policy.none": "Dinguno",
@ -461,6 +482,7 @@
"navigation_bar.about": "Sovre mozotros",
"navigation_bar.administration": "Administrasyon",
"navigation_bar.advanced_interface": "Avre en la enterfaz avanzada",
"navigation_bar.automated_deletion": "Efasasyon otomatika de publikasyones",
"navigation_bar.blocks": "Utilizadores blokados",
"navigation_bar.bookmarks": "Markadores",
"navigation_bar.direct": "Enmentaduras privadas",
@ -480,6 +502,8 @@
"navigation_bar.preferences": "Preferensyas",
"navigation_bar.privacy_and_reach": "Privasita i alkanse",
"navigation_bar.search": "Bushka",
"navigation_bar.search_trends": "Bushka / Trendes",
"navigation_panel.expand_lists": "Espande menu de lista",
"not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.",
"notification.admin.report": "{name} raporto {target}",
"notification.admin.report_statuses": "{name} raporto {target} por {category}",
@ -531,6 +555,7 @@
"notifications.column_settings.mention": "Enmentaduras:",
"notifications.column_settings.poll": "Rizultados de anketas:",
"notifications.column_settings.push": "Avizos arrepushados",
"notifications.column_settings.quote": "Sitas:",
"notifications.column_settings.reblog": "Repartajasyones:",
"notifications.column_settings.show": "Amostra en kolumna",
"notifications.column_settings.sound": "Reproduse son",
@ -617,6 +642,7 @@
"relative_time.minutes": "{number} m",
"relative_time.seconds": "{number} s",
"relative_time.today": "oy",
"remove_quote_hint.button_label": "Entyendo",
"reply_indicator.attachments": "{count, plural, one {# anekso} other {# aneksos}}",
"reply_indicator.cancel": "Anula",
"reply_indicator.poll": "Anketa",
@ -707,8 +733,11 @@
"status.bookmark": "Marka",
"status.cancel_reblog_private": "No repartaja",
"status.cannot_reblog": "Esta publikasyon no se puede repartajar",
"status.context.retry": "Reprova",
"status.context.show": "Amostra",
"status.copy": "Kopia atadijo de publikasyon",
"status.delete": "Efasa",
"status.delete.success": "Puvlikasyon kitada",
"status.detailed_status": "Vista de konversasyon detalyada",
"status.direct": "Enmenta a @{name} en privado",
"status.direct_indicator": "Enmentadura privada",
@ -729,7 +758,9 @@
"status.mute_conversation": "Silensia konversasyon",
"status.open": "Espande publikasyon",
"status.pin": "Fiksa en profil",
"status.quote_post_author": "Puvlikasyon de {name}",
"status.quote": "Sita",
"status.quote.cancel": "Anula la sita",
"status.quote_noun": "Sita",
"status.read_more": "Melda mas",
"status.reblog": "Repartaja",
"status.reblogged_by": "{name} repartajo",
@ -737,6 +768,7 @@
"status.redraft": "Efasa i eskrive de muevo",
"status.remove_bookmark": "Kita markador",
"status.remove_favourite": "Kita de los favoritos",
"status.remove_quote": "Kita",
"status.replied_in_thread": "Arispondo en filo",
"status.replied_to": "Arispondio a {name}",
"status.reply": "Arisponde",

View file

@ -17,17 +17,18 @@
"account.add_or_remove_from_list": "Pievienot vai Noņemt no sarakstiem",
"account.badges.bot": "Automatizēts",
"account.badges.group": "Grupa",
"account.block": "Bloķēt @{name}",
"account.block": "Liegt @{name}",
"account.block_domain": "Bloķēt domēnu {domain}",
"account.block_short": "Bloķēt",
"account.blocked": "Bloķēts",
"account.blocking": "Bloķēts",
"account.block_short": "Liegt",
"account.blocked": "Liegts",
"account.blocking": "Liegts",
"account.cancel_follow_request": "Atsaukt sekošanas pieprasījumu",
"account.copy": "Ievietot saiti uz profilu starpliktuvē",
"account.direct": "Pieminēt @{name} privāti",
"account.disable_notifications": "Pārtraukt man paziņot, kad @{name} izveido ierakstu",
"account.domain_blocking": "Bloķēts domēns",
"account.domain_blocking": "Liegts domēns",
"account.edit_profile": "Labot profilu",
"account.edit_profile_short": "Labot",
"account.enable_notifications": "Paziņot man, kad @{name} izveido ierakstu",
"account.endorse": "Izcelts profilā",
"account.familiar_followers_many": "Kam seko {name1}, {name2}, un {othersCount, plural, zero {pārējie # jums pazīstami} one {vēl viens jums pazīstams} other {pārējie # jums pazīstami}}",
@ -40,6 +41,10 @@
"account.featured_tags.last_status_never": "Nav ierakstu",
"account.follow": "Sekot",
"account.follow_back": "Sekot atpakaļ",
"account.follow_request": "Pieprasīt sekot",
"account.follow_request_cancel": "Atcelt pieprasījumu",
"account.follow_request_cancel_short": "Atcelt",
"account.follow_request_short": "Pieprasīt",
"account.followers": "Sekotāji",
"account.followers.empty": "Šim lietotājam vēl nav sekotāju.",
"account.followers_counter": "{count, plural, zero {{count} sekotāju} one {{count} sekotājs} other {{count} sekotāji}}",
@ -75,9 +80,9 @@
"account.share": "Dalīties ar @{name} profilu",
"account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus",
"account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}",
"account.unblock": "Atbloķēt @{name}",
"account.unblock_domain": "Atbloķēt domēnu {domain}",
"account.unblock_domain_short": "Atbloķēt",
"account.unblock": "Atcelt liegšanu @{name}",
"account.unblock_domain": "Atcelt domēna {domain} liegšanu",
"account.unblock_domain_short": "Atcelt liegšanu",
"account.unblock_short": "Atbloķēt",
"account.unendorse": "Neizcelt profilā",
"account.unfollow": "Pārstāt sekot",
@ -131,7 +136,7 @@
"block_modal.show_more": "Parādīt mazāk",
"block_modal.they_cant_mention": "Nevar Tevi pieminēt vai sekot Tev.",
"block_modal.they_cant_see_posts": "Lietotajs nevarēs redzēt Tavus ierakstus, un Tu neredzēsi lietotāja.",
"block_modal.title": "Bloķēt lietotāju?",
"block_modal.title": "Liegt lietotāju?",
"block_modal.you_wont_see_mentions": "Tu neredzēsi ierakstus, kuros ir minēts šis lietotājs.",
"boost_modal.combo": "Nospied {combo}, lai nākamreiz šo izlaistu",
"boost_modal.reblog": "Pastiprināt ierakstu?",
@ -154,13 +159,13 @@
"closed_registrations_modal.preamble": "Mastodon ir decentralizēts, tāpēc neatkarīgi no tā, kur Tu izveido savu kontu, varēsi sekot un mijiedarboties ar ikvienu šajā serverī. Tu pat vari to pašizvietot!",
"closed_registrations_modal.title": "Reģistrēšanās Mastodon",
"column.about": "Par",
"column.blocks": "Bloķētie lietotāji",
"column.blocks": "Liegtie lietotāji",
"column.bookmarks": "Grāmatzīmes",
"column.community": "Vietējā laika līnija",
"column.create_list": "Izveidot sarakstu",
"column.direct": "Privātas pieminēšanas",
"column.directory": "Pārlūkot profilus",
"column.domain_blocks": "Bloķētie domēni",
"column.domain_blocks": "Liegtie domēni",
"column.edit_list": "Labot sarakstu",
"column.favourites": "Izlase",
"column.firehose": "Tiešraides plūsmas",
@ -208,7 +213,7 @@
"compose_form.spoiler.unmarked": "Pievienot satura brīdinājumu",
"compose_form.spoiler_placeholder": "Satura brīdinājums (pēc izvēles)",
"confirmation_modal.cancel": "Atcelt",
"confirmations.block.confirm": "Bloķēt",
"confirmations.block.confirm": "Liegt",
"confirmations.delete.confirm": "Dzēst",
"confirmations.delete.message": "Vai tiešām izdzēst šo ierakstu?",
"confirmations.delete.title": "Izdzēst ierakstu?",
@ -243,6 +248,8 @@
"confirmations.revoke_quote.message": "Šo darbību nevar atsaukt.",
"confirmations.revoke_quote.title": "Noņemt ierakstu?",
"confirmations.unfollow.confirm": "Pārstāt sekot",
"confirmations.unfollow.title": "Pārtraukt sekot {name}?",
"confirmations.withdraw_request.confirm": "Atsaukt pieprasījumu",
"content_warning.hide": "Paslēpt ierakstu",
"content_warning.show": "Tomēr rādīt",
"content_warning.show_more": "Rādīt vairāk",
@ -262,11 +269,11 @@
"dismissable_banner.community_timeline": "Šie ir jaunākie publiskie ieraksti no cilvēkiem, kuru konti ir mitināti {domain}.",
"dismissable_banner.dismiss": "Atcelt",
"dismissable_banner.public_timeline": "Šie ir jaunākie Fediverse lietotāju publiskie ieraksti, kuriem {domain} seko cilvēki.",
"domain_block_modal.block": "Bloķēt serveri",
"domain_block_modal.block": "Liegt serveri",
"domain_block_modal.block_account_instead": "Tā vietā liegt @{name}",
"domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.",
"domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.",
"domain_block_modal.title": "Bloķēt domēnu?",
"domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši liegti.",
"domain_block_modal.title": "Liegt domēnu?",
"domain_pill.activitypub_lets_connect": "Tas ļauj savienoties un mijiedarboties ar cilvēkiem ne tikai no Mastodon, bet arī starp dažādām sabiedriskajām lietotnēm.",
"domain_pill.activitypub_like_language": "ActivityPub ir kā valoda, kurā Mastodon sazināš ar citiem sabiedriskajiem tīkliem.",
"domain_pill.server": "Serveris",
@ -299,11 +306,11 @@
"empty_column.account_suspended": "Konta darbība ir apturēta",
"empty_column.account_timeline": "Šeit nav ierakstu.",
"empty_column.account_unavailable": "Profils nav pieejams",
"empty_column.blocks": "Pašreiz tu neesi nevienu bloķējis.",
"empty_column.blocks": "Pagaidām Tu neesi liedzis nevienu lietotāju.",
"empty_column.bookmarked_statuses": "Pašlaik Tev nav neviena grāmatzīmēs pievienota ieraksta. Kad tādu pievienosi, tas parādīsies šeit.",
"empty_column.community": "Vietējā laika līnija ir tukša. Uzraksti kaut ko publiski, lai iekustinātu visu!",
"empty_column.direct": "Tev vēl nav privātu pieminēšanu. Kad Tu nosūtīsi vai saņemsi kādu, tā pārādīsies šeit.",
"empty_column.domain_blocks": "Vēl nav neviena bloķēta domēna.",
"empty_column.domain_blocks": "Vēl nav neviena liegta domēna.",
"empty_column.explore_statuses": "Pašlaik nav nekā aktuāla. Ieskaties šeit vēlāk!",
"empty_column.favourited_statuses": "Tev vēl nav izlasei pievienotu ierakstu. Kad pievienosi kādu, tas tiks parādīts šeit.",
"empty_column.favourites": "Šo ierakstu vēl neviens nav pievienojis izlasei. Kad kāds to izdarīs, tas parādīsies šeit.",
@ -418,7 +425,7 @@
"intervals.full.hours": "{number, plural, one {# stunda} other {# stundas}}",
"intervals.full.minutes": "{number, plural, one {# minūte} other {# minūtes}}",
"keyboard_shortcuts.back": "Pāriet atpakaļ",
"keyboard_shortcuts.blocked": "Atvērt bloķēto lietotāju sarakstu",
"keyboard_shortcuts.blocked": "Atvērt liegto lietotāju sarakstu",
"keyboard_shortcuts.boost": "Pastiprināt ierakstu",
"keyboard_shortcuts.column": "Fokusēt kolonnu",
"keyboard_shortcuts.compose": "Fokusēt veidojamā teksta lauku",
@ -492,10 +499,10 @@
"navigation_bar.administration": "Pārvaldība",
"navigation_bar.advanced_interface": "Atvērt paplašinātā tīmekļa saskarnē",
"navigation_bar.automated_deletion": "Automātiska ziņu dzēšana",
"navigation_bar.blocks": "Bloķētie lietotāji",
"navigation_bar.blocks": "Liegtie lietotāji",
"navigation_bar.bookmarks": "Grāmatzīmes",
"navigation_bar.direct": "Privātas pieminēšanas",
"navigation_bar.domain_blocks": "Bloķētie domēni",
"navigation_bar.domain_blocks": "Liegtie domēni",
"navigation_bar.favourites": "Izlase",
"navigation_bar.filters": "Apklusinātie vārdi",
"navigation_bar.follow_requests": "Sekošanas pieprasījumi",
@ -642,8 +649,8 @@
"reply_indicator.attachments": "{count, plural, zero{# pielikumu} one {# pielikums} other {# pielikumi}}",
"reply_indicator.cancel": "Atcelt",
"reply_indicator.poll": "Aptauja",
"report.block": "Bloķēt",
"report.block_explanation": "Tu neredzēsi viņu ierakstus. Viņi nevarēs redzēt Tavus ierakstus vai sekot tev. Viņi varēs saprast, ka ir liegti.",
"report.block": "Liegt",
"report.block_explanation": "Tu neredzēsi viņu ierakstus. Viņi nevarēs redzēt Tavus ierakstus vai sekot Tev. Viņi varēs saprast, ka ir liegti.",
"report.categories.legal": "Tiesisks",
"report.categories.other": "Citi",
"report.categories.spam": "Mēstule",
@ -724,7 +731,7 @@
"status.admin_account": "Atvērt @{name} satura pārraudzības saskarni",
"status.admin_domain": "Atvērt {domain} satura pārraudzības saskarni",
"status.admin_status": "Atvērt šo ziņu satura pārraudzības saskarnē",
"status.block": "Bloķēt @{name}",
"status.block": "Liegt @{name}",
"status.bookmark": "Grāmatzīme",
"status.cancel_reblog_private": "Nepastiprināt",
"status.cannot_reblog": "Šo ierakstu nevar pastiprināt",

View file

@ -753,6 +753,7 @@
"privacy.unlisted.short": "恬靜公開",
"privacy_policy.last_updated": "上尾更新tī{date}",
"privacy_policy.title": "隱私權政策",
"quote_error.edit": "佇編輯PO文ê時陣bē當加引文。",
"quote_error.poll": "有投票ê PO文bē當引用。",
"quote_error.quote": "Tsi̍t改kan-ta ē當引用tsi̍t篇PO文。",
"quote_error.unauthorized": "Lí bô權利引用tsit篇PO文。",
@ -875,7 +876,7 @@
"status.contains_quote": "包含引用",
"status.context.loading": "載入其他回應",
"status.context.loading_error": "Bē當載入新回應",
"status.context.loading_success": "回應lóng載入ah",
"status.context.loading_success": "新ê回應載入ah",
"status.context.more_replies_found": "Tshuē-tio̍h其他回應",
"status.context.retry": "Koh試",
"status.context.show": "顯示",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Bevat citaat",
"status.context.loading": "Meer reacties laden",
"status.context.loading_error": "Kon geen nieuwe reacties laden",
"status.context.loading_success": "Alle reacties zijn geladen",
"status.context.loading_success": "Nieuwe reacties geladen",
"status.context.more_replies_found": "Meer reacties gevonden",
"status.context.retry": "Opnieuw proberen",
"status.context.show": "Tonen",
@ -912,7 +912,7 @@
"status.quote_error.limited_account_hint.action": "Alsnog tonen",
"status.quote_error.limited_account_hint.title": "Dit account is door de moderatoren van {domain} verborgen.",
"status.quote_error.not_available": "Bericht niet beschikbaar",
"status.quote_error.pending_approval": "Bericht in afwachting",
"status.quote_error.pending_approval": "Bericht in afwachting van goedkeuring",
"status.quote_error.pending_approval_popout.body": "Op Mastodon kun je bepalen of iemand je mag citeren. Dit bericht is in afwachting van de goedkeuring van de oorspronkelijke auteur.",
"status.quote_error.revoked": "Bericht verwijderd door auteur",
"status.quote_followers_only": "Alleen volgers mogen dit bericht citeren",

View file

@ -753,6 +753,7 @@
"privacy.unlisted.short": "Stille offentleg",
"privacy_policy.last_updated": "Sist oppdatert {date}",
"privacy_policy.title": "Personvernsreglar",
"quote_error.edit": "Du kan ikkje leggja til sitat når du redigerer eit innlegg.",
"quote_error.poll": "Du kan ikkje sitera meiningsmålingar.",
"quote_error.quote": "Det er berre lov med eitt sitat om gongen.",
"quote_error.unauthorized": "Du har ikkje løyve til å sitera dette innlegget.",
@ -875,7 +876,7 @@
"status.contains_quote": "Inneheld eit sitat",
"status.context.loading": "Lastar fleire svar",
"status.context.loading_error": "Kunne ikkje lasta nye svar",
"status.context.loading_success": "Alle svara er lasta",
"status.context.loading_success": "Dei nye svara er lasta",
"status.context.more_replies_found": "Fann fleire svar",
"status.context.retry": "Prøv om att",
"status.context.show": "Vis",

View file

@ -257,7 +257,12 @@
"confirmations.revoke_quote.confirm": "Remover publicação",
"confirmations.revoke_quote.message": "Esta ação é irreversível.",
"confirmations.revoke_quote.title": "Remover publicação?",
"confirmations.unblock.confirm": "Desbloquear",
"confirmations.unblock.title": "Desbloquear {name}?",
"confirmations.unfollow.confirm": "Deixar de seguir",
"confirmations.unfollow.title": "Deixar de seguir {name}?",
"confirmations.withdraw_request.confirm": "Retirar pedido",
"confirmations.withdraw_request.title": "Retirar pedido para seguir {name}?",
"content_warning.hide": "Ocultar publicação",
"content_warning.show": "Mostrar mesmo assim",
"content_warning.show_more": "Mostrar mais",
@ -748,6 +753,7 @@
"privacy.unlisted.short": "Público silencioso",
"privacy_policy.last_updated": "Última atualização em {date}",
"privacy_policy.title": "Política de privacidade",
"quote_error.edit": "Não é possível adicionar citações ao editar uma publicação.",
"quote_error.poll": "Não é permitido citar sondagens.",
"quote_error.quote": "Apenas é permitida uma citação de cada vez.",
"quote_error.unauthorized": "Não está autorizado a citar esta publicação.",
@ -870,7 +876,7 @@
"status.contains_quote": "Contém citação",
"status.context.loading": "A carregar mais respostas",
"status.context.loading_error": "Não foi possível carregar novas respostas",
"status.context.loading_success": "Todas as respostas carregadas",
"status.context.loading_success": "Novas respostas carregadas",
"status.context.more_replies_found": "Foram encontradas mais respostas",
"status.context.retry": "Repetir",
"status.context.show": "Mostrar",
@ -917,6 +923,8 @@
"status.quote_private": "Publicações privadas não podem ser citadas",
"status.quotes": "{count, plural, one {citação} other {citações}}",
"status.quotes.empty": "Ainda ninguém citou esta publicação. Quando alguém o fizer, aparecerá aqui.",
"status.quotes.local_other_disclaimer": "As citações rejeitadas pelo autor não serão exibidas.",
"status.quotes.remote_other_disclaimer": "Apenas citações de {domain} serão garantidamente exibidas aqui. Citações rejeitadas pelo autor não serão exibidas.",
"status.read_more": "Ler mais",
"status.reblog": "Impulsionar",
"status.reblog_or_quote": "Partilhe ou cite",

View file

@ -872,7 +872,7 @@
"status.contains_quote": "Përmban citim",
"status.context.loading": "Po ngarkohen më tepër përgjigje",
"status.context.loading_error": "Su ngarkuan dot përgjigje të reja",
"status.context.loading_success": "Janë ngarkuar krejt përgjigjet",
"status.context.loading_success": "U ngarkuan përgjigje të reja",
"status.context.more_replies_found": "U gjetën më tepër përgjigje",
"status.context.retry": "Riprovoni",
"status.context.show": "Shfaqe",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "Alıntı içeriyor",
"status.context.loading": "Daha fazla yanıt yükleniyor",
"status.context.loading_error": "Yeni yanıtlar yüklenemiyor",
"status.context.loading_success": "Tüm yanıtlar yüklendi",
"status.context.loading_success": "Yeni yanıtlar yüklendi",
"status.context.more_replies_found": "Daha fazla yanıt bulundu",
"status.context.retry": "Yeniden dene",
"status.context.show": "Göster",

View file

@ -753,6 +753,7 @@
"privacy.unlisted.short": "Hạn chế",
"privacy_policy.last_updated": "Cập nhật lần cuối {date}",
"privacy_policy.title": "Chính sách bảo mật",
"quote_error.edit": "Không thể thêm trích dẫn khi sửa tút.",
"quote_error.poll": "Không thể trích dẫn vốt.",
"quote_error.quote": "Chỉ được trích dẫn một lần.",
"quote_error.unauthorized": "Bạn không được cấp quyền trích dẫn tút này.",
@ -875,7 +876,7 @@
"status.contains_quote": "Chứa trích dẫn",
"status.context.loading": "Tải thêm các trả lời",
"status.context.loading_error": "Không thể tải những trả lời mới",
"status.context.loading_success": "Đã tải toàn bộ trả lời",
"status.context.loading_success": "Đã tải những lượt trả lời mới",
"status.context.more_replies_found": "Có trả lời mới",
"status.context.retry": "Thử lại",
"status.context.show": "Hiện",

View file

@ -876,7 +876,7 @@
"status.contains_quote": "包含引用",
"status.context.loading": "正在加载更多回复",
"status.context.loading_error": "无法加载新回复",
"status.context.loading_success": "已加载所有回复",
"status.context.loading_success": "已加载回复",
"status.context.more_replies_found": "已找到更多回复",
"status.context.retry": "重试",
"status.context.show": "显示",

View file

@ -105,8 +105,8 @@
"alert.unexpected.message": "發生非預期的錯誤。",
"alert.unexpected.title": "哎呀!",
"alt_text_badge.title": "ALT 說明文字",
"alt_text_modal.add_alt_text": "新增說明文字",
"alt_text_modal.add_text_from_image": "自圖片新增說明文字",
"alt_text_modal.add_alt_text": "新增 ALT 說明文字",
"alt_text_modal.add_text_from_image": "自圖片新增 ALT 說明文字",
"alt_text_modal.cancel": "取消",
"alt_text_modal.change_thumbnail": "變更預覽圖",
"alt_text_modal.describe_for_people_with_hearing_impairments": "替聽覺障礙人士描述...",
@ -239,10 +239,10 @@
"confirmations.logout.confirm": "登出",
"confirmations.logout.message": "您確定要登出嗎?",
"confirmations.logout.title": "您確定要登出嗎?",
"confirmations.missing_alt_text.confirm": "新增說明文字",
"confirmations.missing_alt_text.message": "您的嘟文中的多媒體內容未附上說明文字。添加說明文字描述能幫助更多人存取您的內容。",
"confirmations.missing_alt_text.confirm": "新增 ALT 說明文字",
"confirmations.missing_alt_text.message": "您的嘟文中的多媒體內容未附上 ALT 說明文字。添加說明文字描述能幫助更多人存取您的內容。",
"confirmations.missing_alt_text.secondary": "仍要發嘟",
"confirmations.missing_alt_text.title": "是否新增說明文字?",
"confirmations.missing_alt_text.title": "是否新增 ALT 說明文字?",
"confirmations.mute.confirm": "靜音",
"confirmations.quiet_post_quote_info.dismiss": "不要再提醒我",
"confirmations.quiet_post_quote_info.got_it": "了解",
@ -876,7 +876,7 @@
"status.contains_quote": "包含引用嘟文",
"status.context.loading": "讀取更多回嘟",
"status.context.loading_error": "無法讀取新回嘟",
"status.context.loading_success": "已讀取所有回嘟",
"status.context.loading_success": "已讀取回嘟",
"status.context.more_replies_found": "已有更多回嘟",
"status.context.retry": "再試一次",
"status.context.show": "顯示",
@ -912,8 +912,8 @@
"status.quote_error.limited_account_hint.action": "仍要顯示",
"status.quote_error.limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。",
"status.quote_error.not_available": "無法取得該嘟文",
"status.quote_error.pending_approval": "嘟文正在發送中",
"status.quote_error.pending_approval_popout.body": "您能於 Mastodon 控制是否允許引用您的嘟文。此嘟文正在等待原始作者。",
"status.quote_error.pending_approval": "嘟文正在等候審核中",
"status.quote_error.pending_approval_popout.body": "您能於 Mastodon 控制是否允許引用您的嘟文。此嘟文正在等待原始作者核。",
"status.quote_error.revoked": "嘟文已被作者刪除",
"status.quote_followers_only": "只有我的跟隨者能引用此嘟文",
"status.quote_manual_review": "嘟文作者將人工審閱",

View file

@ -166,7 +166,10 @@ const updateContext = (state: Draft<State>, status: ApiStatusJSON): void => {
export const contextsReducer = createReducer(initialState, (builder) => {
builder
.addCase(fetchContext.fulfilled, (state, action) => {
if (action.payload.prefetchOnly) {
const currentReplies = state.replies[action.meta.arg.statusId] ?? [];
const hasReplies = currentReplies.length > 0;
// Ignore prefetchOnly if there are no replies - then we can load them immediately
if (action.payload.prefetchOnly && hasReplies) {
storePrefetchedReplies(
state,
action.meta.arg.statusId,
@ -179,7 +182,7 @@ export const contextsReducer = createReducer(initialState, (builder) => {
action.payload.context,
);
if (action.payload.refresh) {
if (action.payload.refresh && !action.payload.prefetchOnly) {
state.refreshing[action.meta.arg.statusId] = action.payload.refresh;
}
}

View file

@ -524,3 +524,7 @@ a.sparkline {
opacity: 0.25;
}
}
kbd {
background-color: color.change($ui-highlight-color, $alpha: 0.1);
}

View file

@ -300,9 +300,9 @@ $content-width: 840px;
font-size: 13px;
font-weight: 700;
color: $darker-text-color;
padding-bottom: 8px;
padding-top: 24px;
margin-bottom: 8px;
border-bottom: 1px solid var(--background-border-color);
border-top: 1px solid var(--background-border-color);
}
h6 {
@ -488,6 +488,14 @@ body,
}
}
kbd {
font-family: Courier, monospace;
background-color: color.change($ui-secondary-color, $alpha: 0.1);
padding: 4px;
padding-bottom: 2px;
border-radius: 5px;
}
.filters {
display: flex;
flex-wrap: wrap;
@ -1955,60 +1963,77 @@ a.sparkline {
box-sizing: border-box;
min-height: 100%;
&.status--has-quote {
.quote-inline {
display: none;
}
}
.status__quote & {
// Remove the border from the .status__card within .status__quote
border: none;
.display-name__account {
line-height: inherit;
}
.status__avatar,
.status__avatar .account__avatar {
width: 32px;
height: 32px;
}
}
.status__prepend {
padding: 0 0 15px;
gap: 4px;
align-items: center;
}
.status__content {
padding-top: 0;
> details {
summary {
display: block;
box-sizing: border-box;
background: var(--nested-card-background);
color: var(--nested-card-text);
border: var(--nested-card-border);
border-radius: 8px;
padding: 8px 13px;
position: relative;
font-size: 15px;
line-height: 22px;
cursor: pointer;
> details {
summary {
&::after {
content: attr(data-show, 'Show more');
margin-top: 8px;
display: block;
box-sizing: border-box;
background: var(--nested-card-background);
color: var(--nested-card-text);
border: var(--nested-card-border);
border-radius: 8px;
padding: 8px 13px;
position: relative;
font-size: 15px;
line-height: 22px;
line-height: 20px;
color: $highlight-text-color;
cursor: pointer;
&::after {
content: attr(data-show, 'Show more');
margin-top: 8px;
display: block;
font-size: 15px;
line-height: 20px;
color: $highlight-text-color;
cursor: pointer;
border: 0;
background: transparent;
padding: 0;
text-decoration: none;
font-weight: 500;
}
&:hover,
&:focus-visible {
&::after {
text-decoration: underline !important;
}
}
border: 0;
background: transparent;
padding: 0;
text-decoration: none;
font-weight: 500;
}
&[open] summary {
margin-bottom: 16px;
&:hover,
&:focus-visible {
&::after {
content: attr(data-hide, 'Hide post');
text-decoration: underline !important;
}
}
}
&[open] summary {
margin-bottom: 16px;
&::after {
content: attr(data-hide, 'Hide post');
}
}
}
.preview-card {
@ -2065,6 +2090,14 @@ a.sparkline {
}
}
}
.detailed-status__meta {
.detailed-status__application,
.detailed-status__datetime,
.detailed-status__link {
color: inherit;
}
}
}
.admin {

View file

@ -10439,7 +10439,7 @@ noscript {
&:hover,
&:focus,
&:active {
background: color.change($ui-base-color, $alpha: 0.85);
background: color.change($white, $alpha: 0.15);
}
}

View file

@ -152,6 +152,9 @@
z-index: 1;
position: relative;
text-align: center;
display: inline-flex !important;
align-items: center;
justify-content: center;
}
&:hover::before {

View file

@ -224,6 +224,10 @@ code {
list-style: disc;
margin-inline-start: 18px;
}
.icon {
vertical-align: -3px;
}
}
ul.hint {
@ -755,6 +759,12 @@ code {
display: none;
}
&.hidden-on-touch-devices {
@media screen and (pointer: coarse) {
display: none;
}
}
a {
display: inline-block;
color: $darker-text-color;

View file

@ -356,7 +356,7 @@ a.table-action-link {
// Reset the status card to not have borders, background or padding when
// inline in the table of statuses
.status__card {
.batch-table__row__content > .status__card {
border: none;
background: none;
padding: 0;