2
0
Fork 0

Merge remote-tracking branch 'upstream/main'

This commit is contained in:
Essem 2024-06-19 21:43:32 -05:00
commit 167a30b2bf
No known key found for this signature in database
GPG key ID: 7D497397CC3A2A8C
300 changed files with 2112 additions and 1550 deletions

View file

@ -68,13 +68,17 @@ export function importFetchedStatuses(statuses) {
status.filtered.forEach(result => pushUnique(filters, result.filter));
}
if (status.reblog && status.reblog.id) {
if (status.reblog?.id) {
processStatus(status.reblog);
}
if (status.poll && status.poll.id) {
if (status.poll?.id) {
pushUnique(polls, normalizePoll(status.poll, getState().getIn(['polls', status.poll.id])));
}
if (status.card?.author_account) {
pushUnique(accounts, status.card.author_account);
}
}
statuses.forEach(processStatus);

View file

@ -36,6 +36,10 @@ export function normalizeStatus(status, normalOldStatus, settings) {
normalStatus.poll = status.poll.id;
}
if (status.card?.author_account) {
normalStatus.card = { ...status.card, author_account: status.card.author_account.id };
}
if (status.filtered) {
normalStatus.filtered = status.filtered.map(normalizeFilterResult);
}

View file

@ -0,0 +1,16 @@
import {
apiGetNotificationPolicy,
apiUpdateNotificationsPolicy,
} from 'flavours/glitch/api/notification_policies';
import type { NotificationPolicy } from 'flavours/glitch/models/notification_policy';
import { createDataLoadingThunk } from 'flavours/glitch/store/typed_functions';
export const fetchNotificationPolicy = createDataLoadingThunk(
'notificationPolicy/fetch',
() => apiGetNotificationPolicy(),
);
export const updateNotificationsPolicy = createDataLoadingThunk(
'notificationPolicy/update',
(policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy),
);

View file

@ -57,10 +57,6 @@ export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ';
export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT';
export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION';
export const NOTIFICATION_POLICY_FETCH_REQUEST = 'NOTIFICATION_POLICY_FETCH_REQUEST';
export const NOTIFICATION_POLICY_FETCH_SUCCESS = 'NOTIFICATION_POLICY_FETCH_SUCCESS';
export const NOTIFICATION_POLICY_FETCH_FAIL = 'NOTIFICATION_POLICY_FETCH_FAIL';
export const NOTIFICATION_REQUESTS_FETCH_REQUEST = 'NOTIFICATION_REQUESTS_FETCH_REQUEST';
export const NOTIFICATION_REQUESTS_FETCH_SUCCESS = 'NOTIFICATION_REQUESTS_FETCH_SUCCESS';
export const NOTIFICATION_REQUESTS_FETCH_FAIL = 'NOTIFICATION_REQUESTS_FETCH_FAIL';
@ -435,40 +431,6 @@ export function setBrowserPermission (value) {
};
}
export const fetchNotificationPolicy = () => (dispatch) => {
dispatch(fetchNotificationPolicyRequest());
api().get('/api/v1/notifications/policy').then(({ data }) => {
dispatch(fetchNotificationPolicySuccess(data));
}).catch(err => {
dispatch(fetchNotificationPolicyFail(err));
});
};
export const fetchNotificationPolicyRequest = () => ({
type: NOTIFICATION_POLICY_FETCH_REQUEST,
});
export const fetchNotificationPolicySuccess = policy => ({
type: NOTIFICATION_POLICY_FETCH_SUCCESS,
policy,
});
export const fetchNotificationPolicyFail = error => ({
type: NOTIFICATION_POLICY_FETCH_FAIL,
error,
});
export const updateNotificationsPolicy = params => (dispatch) => {
dispatch(fetchNotificationPolicyRequest());
api().put('/api/v1/notifications/policy', params).then(({ data }) => {
dispatch(fetchNotificationPolicySuccess(data));
}).catch(err => {
dispatch(fetchNotificationPolicyFail(err));
});
};
export const fetchNotificationRequests = () => (dispatch, getState) => {
const params = {};

View file

@ -1,6 +1,6 @@
import api, { getLinks } from '../api';
import { importFetchedStatuses } from './importer';
import { importFetchedStatuses, importFetchedAccounts } from './importer';
export const TRENDS_TAGS_FETCH_REQUEST = 'TRENDS_TAGS_FETCH_REQUEST';
export const TRENDS_TAGS_FETCH_SUCCESS = 'TRENDS_TAGS_FETCH_SUCCESS';
@ -49,8 +49,11 @@ export const fetchTrendingLinks = () => (dispatch) => {
dispatch(fetchTrendingLinksRequest());
api()
.get('/api/v1/trends/links')
.then(({ data }) => dispatch(fetchTrendingLinksSuccess(data)))
.get('/api/v1/trends/links', { params: { limit: 20 } })
.then(({ data }) => {
dispatch(importFetchedAccounts(data.map(link => link.author_account).filter(account => !!account)));
dispatch(fetchTrendingLinksSuccess(data));
})
.catch(err => dispatch(fetchTrendingLinksFail(err)));
};

View file

@ -0,0 +1,10 @@
import { apiRequest } from 'flavours/glitch/api';
import type { NotificationPolicyJSON } from 'flavours/glitch/api_types/notification_policies';
export const apiGetNotificationPolicy = () =>
apiRequest<NotificationPolicyJSON>('GET', '/v1/notifications/policy');
export const apiUpdateNotificationsPolicy = (
policy: Partial<NotificationPolicyJSON>,
) =>
apiRequest<NotificationPolicyJSON>('PUT', '/v1/notifications/policy', policy);

View file

@ -0,0 +1,12 @@
// See app/serializers/rest/notification_policy_serializer.rb
export interface NotificationPolicyJSON {
filter_not_following: boolean;
filter_not_followers: boolean;
filter_new_accounts: boolean;
filter_private_mentions: boolean;
summary: {
pending_requests_count: number;
pending_notifications_count: number;
};
}

View file

@ -0,0 +1,19 @@
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { AuthorLink } from 'flavours/glitch/features/explore/components/author_link';
export const MoreFromAuthor = ({ accountId }) => (
<div className='more-from-author'>
<svg viewBox='0 0 79 79' className='logo logo--icon' role='img'>
<use xlinkHref='#logo-symbol-icon' />
</svg>
<FormattedMessage id='link_preview.more_from_author' defaultMessage='More from {name}' values={{ name: <AuthorLink accountId={accountId} /> }} />
</div>
);
MoreFromAuthor.propTypes = {
accountId: PropTypes.string.isRequired,
};

View file

@ -42,10 +42,12 @@ class ServerBanner extends PureComponent {
return (
<div className='server-banner'>
<div className='server-banner__introduction'>
<FormattedMessage id='server_banner.introduction' defaultMessage='{domain} is part of the decentralized social network powered by {mastodon}.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />
<FormattedMessage id='server_banner.is_one_of_many' defaultMessage='{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />
</div>
<ServerHeroImage blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />
<Link to='/about'>
<ServerHeroImage blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />
</Link>
<div className='server-banner__description'>
{isLoading ? (
@ -84,10 +86,6 @@ class ServerBanner extends PureComponent {
)}
</div>
</div>
<hr className='spacer' />
<Link className='button button--block button-secondary' to='/about'><FormattedMessage id='server_banner.learn_more' defaultMessage='Learn more' /></Link>
</div>
);
}

View file

@ -110,18 +110,6 @@ class LanguageDropdownMenu extends PureComponent {
}).map(result => result.obj);
}
frequentlyUsed () {
const { languages, value } = this.props;
const current = languages.find(lang => lang[0] === value);
const results = [];
if (current) {
results.push(current);
}
return results;
}
handleClick = e => {
const value = e.currentTarget.getAttribute('data-index');

View file

@ -0,0 +1,20 @@
import PropTypes from 'prop-types';
import { Avatar } from 'flavours/glitch/components/avatar';
import { Permalink } from 'flavours/glitch/components/permalink';
import { useAppSelector } from 'flavours/glitch/store';
export const AuthorLink = ({ accountId }) => {
const account = useAppSelector(state => state.getIn(['accounts', accountId]));
return (
<Permalink href={account.get('url')} to={`/@${account.get('acct')}`} className='story__details__shared__author-link'>
<Avatar account={account} size={16} />
<bdi dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} />
</Permalink>
);
};
AuthorLink.propTypes = {
accountId: PropTypes.string.isRequired,
};

View file

@ -1,61 +1,89 @@
import PropTypes from 'prop-types';
import { PureComponent } from 'react';
import { useState, useCallback } from 'react';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import { Blurhash } from 'flavours/glitch/components/blurhash';
import { accountsCountRenderer } from 'flavours/glitch/components/hashtag';
import { RelativeTimestamp } from 'flavours/glitch/components/relative_timestamp';
import { ShortNumber } from 'flavours/glitch/components/short_number';
import { Skeleton } from 'flavours/glitch/components/skeleton';
export default class Story extends PureComponent {
import { AuthorLink } from './author_link';
static propTypes = {
url: PropTypes.string,
title: PropTypes.string,
lang: PropTypes.string,
publisher: PropTypes.string,
publishedAt: PropTypes.string,
author: PropTypes.string,
sharedTimes: PropTypes.number,
thumbnail: PropTypes.string,
thumbnailDescription: PropTypes.string,
blurhash: PropTypes.string,
expanded: PropTypes.bool,
};
const sharesCountRenderer = (displayNumber, pluralReady) => (
<FormattedMessage
id='link_preview.shares'
defaultMessage='{count, plural, one {{counter} post} other {{counter} posts}}'
values={{
count: pluralReady,
counter: <strong>{displayNumber}</strong>,
}}
/>
);
state = {
thumbnailLoaded: false,
};
export const Story = ({
url,
title,
lang,
publisher,
publishedAt,
author,
authorAccount,
sharedTimes,
thumbnail,
thumbnailDescription,
blurhash,
expanded
}) => {
const [thumbnailLoaded, setThumbnailLoaded] = useState(false);
handleImageLoad = () => this.setState({ thumbnailLoaded: true });
const handleImageLoad = useCallback(() => {
setThumbnailLoaded(true);
}, [setThumbnailLoaded]);
render () {
const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, thumbnailDescription, blurhash } = this.props;
const { thumbnailLoaded } = this.state;
return (
<a className={classNames('story', { expanded })} href={url} target='blank' rel='noopener'>
<div className='story__details'>
<div className='story__details__publisher'>{publisher ? <span lang={lang}>{publisher}</span> : <Skeleton width={50} />}{publishedAt && <> · <RelativeTimestamp timestamp={publishedAt} /></>}</div>
<div className='story__details__title' lang={lang}>{title ? title : <Skeleton />}</div>
<div className='story__details__shared'>{author && <><FormattedMessage id='link_preview.author' defaultMessage='By {name}' values={{ name: <strong>{author}</strong> }} /> · </>}{typeof sharedTimes === 'number' ? <ShortNumber value={sharedTimes} renderer={accountsCountRenderer} /> : <Skeleton width={100} />}</div>
return (
<div className={classNames('story', { expanded })}>
<div className='story__details'>
<div className='story__details__publisher'>
{publisher ? <span lang={lang}>{publisher}</span> : <Skeleton width={50} />}{publishedAt && <> · <RelativeTimestamp timestamp={publishedAt} /></>}
</div>
<div className='story__thumbnail'>
{thumbnail ? (
<>
<div className={classNames('story__thumbnail__preview', { 'story__thumbnail__preview--hidden': thumbnailLoaded })}><Blurhash hash={blurhash} /></div>
<img src={thumbnail} onLoad={this.handleImageLoad} alt={thumbnailDescription} title={thumbnailDescription} lang={lang} />
</>
) : <Skeleton />}
<a className='story__details__title' lang={lang} href={url} target='blank' rel='noopener'>
{title ? title : <Skeleton />}
</a>
<div className='story__details__shared'>
{author ? <FormattedMessage id='link_preview.author' className='story__details__shared__author' defaultMessage='By {name}' values={{ name: authorAccount ? <AuthorLink accountId={authorAccount} /> : <strong>{author}</strong> }} /> : <span />}
{typeof sharedTimes === 'number' ? <span className='story__details__shared__pill'><ShortNumber value={sharedTimes} renderer={sharesCountRenderer} /></span> : <Skeleton width='10ch' />}
</div>
</div>
<a className='story__thumbnail' href={url} target='blank' rel='noopener'>
{thumbnail ? (
<>
<div className={classNames('story__thumbnail__preview', { 'story__thumbnail__preview--hidden': thumbnailLoaded })}><Blurhash hash={blurhash} /></div>
<img src={thumbnail} onLoad={handleImageLoad} alt={thumbnailDescription} title={thumbnailDescription} lang={lang} />
</>
) : <Skeleton />}
</a>
);
}
</div>
);
};
}
Story.propTypes = {
url: PropTypes.string,
title: PropTypes.string,
lang: PropTypes.string,
publisher: PropTypes.string,
publishedAt: PropTypes.string,
author: PropTypes.string,
authorAccount: PropTypes.string,
sharedTimes: PropTypes.number,
thumbnail: PropTypes.string,
thumbnailDescription: PropTypes.string,
blurhash: PropTypes.string,
expanded: PropTypes.bool,
};

View file

@ -13,7 +13,7 @@ import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner
import { LoadingIndicator } from 'flavours/glitch/components/loading_indicator';
import { WithRouterPropTypes } from 'flavours/glitch/utils/react_router';
import Story from './components/story';
import { Story } from './components/story';
const mapStateToProps = state => ({
links: state.getIn(['trends', 'links', 'items']),
@ -75,6 +75,7 @@ class Links extends PureComponent {
publisher={link.get('provider_name')}
publishedAt={link.get('published_at')}
author={link.get('author_name')}
authorAccount={link.getIn(['author_account', 'id'])}
sharedTimes={link.getIn(['history', 0, 'accounts']) * 1 + link.getIn(['history', 1, 'accounts']) * 1}
thumbnail={link.get('image')}
thumbnailDescription={link.get('image_description')}

View file

@ -25,7 +25,7 @@ class ColumnSettings extends PureComponent {
alertsEnabled: PropTypes.bool,
browserSupport: PropTypes.bool,
browserPermission: PropTypes.string,
notificationPolicy: ImmutablePropTypes.map,
notificationPolicy: PropTypes.object.isRequired,
onChangePolicy: PropTypes.func.isRequired,
};
@ -84,22 +84,22 @@ class ColumnSettings extends PureComponent {
<h3><FormattedMessage id='notifications.policy.title' defaultMessage='Filter out notifications from…' /></h3>
<div className='column-settings__row'>
<CheckboxWithLabel checked={notificationPolicy.get('filter_not_following')} onChange={this.handleFilterNotFollowing}>
<CheckboxWithLabel checked={notificationPolicy.filter_not_following} onChange={this.handleFilterNotFollowing}>
<strong><FormattedMessage id='notifications.policy.filter_not_following_title' defaultMessage="People you don't follow" /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_not_following_hint' defaultMessage='Until you manually approve them' /></span>
</CheckboxWithLabel>
<CheckboxWithLabel checked={notificationPolicy.get('filter_not_followers')} onChange={this.handleFilterNotFollowers}>
<CheckboxWithLabel checked={notificationPolicy.filter_not_followers} onChange={this.handleFilterNotFollowers}>
<strong><FormattedMessage id='notifications.policy.filter_not_followers_title' defaultMessage='People not following you' /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_not_followers_hint' defaultMessage='Including people who have been following you fewer than {days, plural, one {one day} other {# days}}' values={{ days: 3 }} /></span>
</CheckboxWithLabel>
<CheckboxWithLabel checked={notificationPolicy.get('filter_new_accounts')} onChange={this.handleFilterNewAccounts}>
<CheckboxWithLabel checked={notificationPolicy.filter_new_accounts} onChange={this.handleFilterNewAccounts}>
<strong><FormattedMessage id='notifications.policy.filter_new_accounts_title' defaultMessage='New accounts' /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_new_accounts.hint' defaultMessage='Created within the past {days, plural, one {one day} other {# days}}' values={{ days: 30 }} /></span>
</CheckboxWithLabel>
<CheckboxWithLabel checked={notificationPolicy.get('filter_private_mentions')} onChange={this.handleFilterPrivateMentions}>
<CheckboxWithLabel checked={notificationPolicy.filter_private_mentions} onChange={this.handleFilterPrivateMentions}>
<strong><FormattedMessage id='notifications.policy.filter_private_mentions_title' defaultMessage='Unsolicited private mentions' /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_private_mentions_hint' defaultMessage="Filtered unless it's in reply to your own mention or if you follow the sender" /></span>
</CheckboxWithLabel>

View file

@ -1,49 +0,0 @@
import { useEffect } from 'react';
import { FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
import { fetchNotificationPolicy } from 'flavours/glitch/actions/notifications';
import { Icon } from 'flavours/glitch/components/icon';
import { toCappedNumber } from 'flavours/glitch/utils/numbers';
export const FilteredNotificationsBanner = () => {
const dispatch = useDispatch();
const policy = useSelector(state => state.get('notificationPolicy'));
useEffect(() => {
dispatch(fetchNotificationPolicy());
const interval = setInterval(() => {
dispatch(fetchNotificationPolicy());
}, 120000);
return () => {
clearInterval(interval);
};
}, [dispatch]);
if (policy === null || policy.getIn(['summary', 'pending_notifications_count']) === 0) {
return null;
}
return (
<Link className='filtered-notifications-banner' to='/notifications/requests'>
<Icon icon={InventoryIcon} />
<div className='filtered-notifications-banner__text'>
<strong><FormattedMessage id='filtered_notifications_banner.title' defaultMessage='Filtered notifications' /></strong>
<span><FormattedMessage id='filtered_notifications_banner.pending_requests' defaultMessage='Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know' values={{ count: policy.getIn(['summary', 'pending_requests_count']) }} /></span>
</div>
<div className='filtered-notifications-banner__badge'>
<div className='filtered-notifications-banner__badge__badge'>{toCappedNumber(policy.getIn(['summary', 'pending_notifications_count']))}</div>
<FormattedMessage id='filtered_notifications_banner.mentions' defaultMessage='{count, plural, one {mention} other {mentions}}' values={{ count: policy.getIn(['summary', 'pending_notifications_count']) }} />
</div>
</Link>
);
};

View file

@ -0,0 +1,68 @@
import { useEffect } from 'react';
import { FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
import { fetchNotificationPolicy } from 'flavours/glitch/actions/notification_policies';
import { Icon } from 'flavours/glitch/components/icon';
import { useAppSelector, useAppDispatch } from 'flavours/glitch/store';
import { toCappedNumber } from 'flavours/glitch/utils/numbers';
export const FilteredNotificationsBanner: React.FC = () => {
const dispatch = useAppDispatch();
const policy = useAppSelector((state) => state.notificationPolicy);
useEffect(() => {
void dispatch(fetchNotificationPolicy());
const interval = setInterval(() => {
void dispatch(fetchNotificationPolicy());
}, 120000);
return () => {
clearInterval(interval);
};
}, [dispatch]);
if (policy === null || policy.summary.pending_notifications_count === 0) {
return null;
}
return (
<Link
className='filtered-notifications-banner'
to='/notifications/requests'
>
<Icon icon={InventoryIcon} id='filtered-notifications' />
<div className='filtered-notifications-banner__text'>
<strong>
<FormattedMessage
id='filtered_notifications_banner.title'
defaultMessage='Filtered notifications'
/>
</strong>
<span>
<FormattedMessage
id='filtered_notifications_banner.pending_requests'
defaultMessage='Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know'
values={{ count: policy.summary.pending_requests_count }}
/>
</span>
</div>
<div className='filtered-notifications-banner__badge'>
<div className='filtered-notifications-banner__badge__badge'>
{toCappedNumber(policy.summary.pending_notifications_count)}
</div>
<FormattedMessage
id='filtered_notifications_banner.mentions'
defaultMessage='{count, plural, one {mention} other {mentions}}'
values={{ count: policy.summary.pending_notifications_count }}
/>
</div>
</Link>
);
};

View file

@ -4,7 +4,8 @@ import { connect } from 'react-redux';
import { showAlert } from '../../../actions/alerts';
import { openModal } from '../../../actions/modal';
import { setFilter, clearNotifications, requestBrowserPermission, updateNotificationsPolicy } from '../../../actions/notifications';
import { updateNotificationsPolicy } from '../../../actions/notification_policies';
import { setFilter, clearNotifications, requestBrowserPermission } from '../../../actions/notifications';
import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications';
import { changeSetting } from '../../../actions/settings';
import ColumnSettings from '../components/column_settings';
@ -15,13 +16,16 @@ const messages = defineMessages({
permissionDenied: { id: 'notifications.permission_denied_alert', defaultMessage: 'Desktop notifications can\'t be enabled, as browser permission has been denied before' },
});
/**
* @param {import('flavours/glitch/store').RootState} state
*/
const mapStateToProps = state => ({
settings: state.getIn(['settings', 'notifications']),
pushSettings: state.get('push_notifications'),
alertsEnabled: state.getIn(['settings', 'notifications', 'alerts']).includes(true),
browserSupport: state.getIn(['notifications', 'browserSupport']),
browserPermission: state.getIn(['notifications', 'browserPermission']),
notificationPolicy: state.get('notificationPolicy'),
notificationPolicy: state.notificationPolicy,
});
const mapDispatchToProps = (dispatch, { intl }) => ({

View file

@ -11,10 +11,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import DescriptionIcon from '@/material-icons/400-24px/description-fill.svg?react';
import OpenInNewIcon from '@/material-icons/400-24px/open_in_new.svg?react';
import PlayArrowIcon from '@/material-icons/400-24px/play_arrow-fill.svg?react';
import { Avatar } from 'flavours/glitch/components/avatar';
import { Blurhash } from 'flavours/glitch/components/blurhash';
import { Icon } from 'flavours/glitch/components/icon';
import { Permalink } from 'flavours/glitch/components/permalink';
import { MoreFromAuthor } from 'flavours/glitch/components/more_from_author';
import { RelativeTimestamp } from 'flavours/glitch/components/relative_timestamp';
import { useBlurhash } from 'flavours/glitch/initial_state';
import { decode as decodeIDNA } from 'flavours/glitch/utils/idna';
@ -48,20 +47,6 @@ const addAutoPlay = html => {
return html;
};
const MoreFromAuthor = ({ author }) => (
<div className='more-from-author'>
<svg viewBox='0 0 79 79' className='logo logo--icon' role='img'>
<use xlinkHref='#logo-symbol-icon' />
</svg>
<FormattedMessage id='link_preview.more_from_author' defaultMessage='More from {name}' values={{ name: <Permalink href={author.get('url')} to={`/@${author.get('acct')}`}><Avatar account={author} size={16} /> {author.get('display_name')}</Permalink> }} />
</div>
);
MoreFromAuthor.propTypes = {
author: ImmutablePropTypes.map,
};
export default class Card extends PureComponent {
static propTypes = {
@ -248,7 +233,7 @@ export default class Card extends PureComponent {
{description}
</a>
{showAuthor && <MoreFromAuthor author={card.get('author_account')} />}
{showAuthor && <MoreFromAuthor accountId={card.get('author_account')} />}
</>
);
}

View file

@ -22,7 +22,8 @@ const SignInBanner = () => {
if (sso_redirect) {
return (
<div className='sign-in-banner'>
<p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>
<p><strong><FormattedMessage id='sign_in_banner.mastodon_is' defaultMessage="Mastodon is the best way to keep up with what's happening." /></strong></p>
<p><FormattedMessage id='sign_in_banner.follow_anyone' defaultMessage='Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.' /></p>
<a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
</div>
);
@ -44,7 +45,8 @@ const SignInBanner = () => {
return (
<div className='sign-in-banner'>
<p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>
<p><strong><FormattedMessage id='sign_in_banner.mastodon_is' defaultMessage="Mastodon is the best way to keep up with what's happening." /></strong></p>
<p><FormattedMessage id='sign_in_banner.follow_anyone' defaultMessage='Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.' /></p>
{signupButton}
<a href='/auth/sign_in' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>
</div>

View file

@ -0,0 +1,3 @@
import type { NotificationPolicyJSON } from 'flavours/glitch/api_types/notification_policies';
export type NotificationPolicy = NotificationPolicyJSON; // No changes from the API type

View file

@ -1,12 +0,0 @@
import { fromJS } from 'immutable';
import { NOTIFICATION_POLICY_FETCH_SUCCESS } from 'flavours/glitch/actions/notifications';
export const notificationPolicyReducer = (state = null, action) => {
switch(action.type) {
case NOTIFICATION_POLICY_FETCH_SUCCESS:
return fromJS(action.policy);
default:
return state;
}
};

View file

@ -0,0 +1,18 @@
import { createReducer, isAnyOf } from '@reduxjs/toolkit';
import {
fetchNotificationPolicy,
updateNotificationsPolicy,
} from 'flavours/glitch/actions/notification_policies';
import type { NotificationPolicy } from 'flavours/glitch/models/notification_policy';
export const notificationPolicyReducer =
createReducer<NotificationPolicy | null>(null, (builder) => {
builder.addMatcher(
isAnyOf(
fetchNotificationPolicy.fulfilled,
updateNotificationsPolicy.fulfilled,
),
(_state, action) => action.payload,
);
});

View file

@ -952,9 +952,15 @@ body > [data-popper-placement] {
padding: 10px;
p {
font-size: 15px;
line-height: 22px;
color: $darker-text-color;
margin-bottom: 20px;
strong {
font-weight: 700;
}
a {
color: $secondary-text-color;
text-decoration: none;
@ -1472,7 +1478,7 @@ body > [data-popper-placement] {
.status__action-bar,
.reactions-bar {
margin-inline-start: $thread-margin;
width: calc(100% - ($thread-margin));
width: calc(100% - $thread-margin);
}
.status__content__read-more-button {
@ -4379,6 +4385,13 @@ a.status-card {
border-end-start-radius: 0;
}
.status-card.bottomless .status-card__image,
.status-card.bottomless .status-card__image-image,
.status-card.bottomless .status-card__image-preview {
border-end-end-radius: 0;
border-end-start-radius: 0;
}
.status-card.expanded > a {
width: 100%;
}
@ -9392,43 +9405,80 @@ noscript {
display: flex;
align-items: center;
color: $primary-text-color;
text-decoration: none;
padding: 15px;
padding: 16px;
border-bottom: 1px solid var(--background-border-color);
gap: 15px;
gap: 16px;
&:last-child {
border-bottom: 0;
}
&:hover,
&:active,
&:focus {
color: $highlight-text-color;
.story__details__publisher,
.story__details__shared {
color: $highlight-text-color;
}
}
&__details {
flex: 1 1 auto;
&__publisher {
color: $darker-text-color;
margin-bottom: 8px;
font-size: 14px;
line-height: 20px;
}
&__title {
display: block;
font-size: 19px;
line-height: 24px;
font-weight: 500;
margin-bottom: 8px;
text-decoration: none;
color: $primary-text-color;
&:hover,
&:active,
&:focus {
color: $highlight-text-color;
}
}
&__shared {
display: flex;
align-items: center;
color: $darker-text-color;
gap: 8px;
justify-content: space-between;
font-size: 14px;
line-height: 20px;
& > span {
display: flex;
align-items: center;
gap: 4px;
}
&__pill {
background: var(--surface-variant-background-color);
border-radius: 4px;
color: inherit;
text-decoration: none;
padding: 4px 12px;
font-size: 12px;
font-weight: 500;
line-height: 16px;
}
&__author-link {
display: inline-flex;
align-items: center;
gap: 4px;
color: $primary-text-color;
font-weight: 500;
text-decoration: none;
&:hover,
&:active,
&:focus {
color: $highlight-text-color;
}
}
}
strong {
@ -9493,14 +9543,14 @@ noscript {
}
.server-banner {
padding: 20px 0;
&__introduction {
font-size: 15px;
line-height: 22px;
color: $darker-text-color;
margin-bottom: 20px;
strong {
font-weight: 600;
font-weight: 700;
}
a {
@ -9528,6 +9578,9 @@ noscript {
}
&__description {
font-size: 15px;
line-height: 22px;
color: $darker-text-color;
margin-bottom: 20px;
}
@ -10499,14 +10552,14 @@ noscript {
color: inherit;
text-decoration: none;
padding: 4px 12px;
background: $ui-base-color;
background: var(--surface-variant-background-color);
border-radius: 4px;
font-weight: 500;
&:hover,
&:focus,
&:active {
background: lighten($ui-base-color, 4%);
background: var(--surface-variant-active-background-color);
}
}
@ -10837,6 +10890,7 @@ noscript {
}
.more-from-author {
box-sizing: border-box;
font-size: 14px;
color: $darker-text-color;
background: var(--surface-background-color);

View file

@ -112,4 +112,6 @@ $dismiss-overlay-width: 4rem;
--background-color: #{darken($ui-base-color, 8%)};
--background-color-tint: #{rgba(darken($ui-base-color, 8%), 0.9)};
--surface-background-color: #{darken($ui-base-color, 4%)};
--surface-variant-background-color: #{$ui-base-color};
--surface-variant-active-background-color: #{lighten($ui-base-color, 4%)};
}

View file

@ -68,13 +68,17 @@ export function importFetchedStatuses(statuses) {
status.filtered.forEach(result => pushUnique(filters, result.filter));
}
if (status.reblog && status.reblog.id) {
if (status.reblog?.id) {
processStatus(status.reblog);
}
if (status.poll && status.poll.id) {
if (status.poll?.id) {
pushUnique(polls, normalizePoll(status.poll, getState().getIn(['polls', status.poll.id])));
}
if (status.card?.author_account) {
pushUnique(accounts, status.card.author_account);
}
}
statuses.forEach(processStatus);

View file

@ -36,6 +36,10 @@ export function normalizeStatus(status, normalOldStatus) {
normalStatus.poll = status.poll.id;
}
if (status.card?.author_account) {
normalStatus.card = { ...status.card, author_account: status.card.author_account.id };
}
if (status.filtered) {
normalStatus.filtered = status.filtered.map(normalizeFilterResult);
}

View file

@ -0,0 +1,16 @@
import {
apiGetNotificationPolicy,
apiUpdateNotificationsPolicy,
} from 'mastodon/api/notification_policies';
import type { NotificationPolicy } from 'mastodon/models/notification_policy';
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
export const fetchNotificationPolicy = createDataLoadingThunk(
'notificationPolicy/fetch',
() => apiGetNotificationPolicy(),
);
export const updateNotificationsPolicy = createDataLoadingThunk(
'notificationPolicy/update',
(policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy),
);

View file

@ -44,10 +44,6 @@ export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ';
export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT';
export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION';
export const NOTIFICATION_POLICY_FETCH_REQUEST = 'NOTIFICATION_POLICY_FETCH_REQUEST';
export const NOTIFICATION_POLICY_FETCH_SUCCESS = 'NOTIFICATION_POLICY_FETCH_SUCCESS';
export const NOTIFICATION_POLICY_FETCH_FAIL = 'NOTIFICATION_POLICY_FETCH_FAIL';
export const NOTIFICATION_REQUESTS_FETCH_REQUEST = 'NOTIFICATION_REQUESTS_FETCH_REQUEST';
export const NOTIFICATION_REQUESTS_FETCH_SUCCESS = 'NOTIFICATION_REQUESTS_FETCH_SUCCESS';
export const NOTIFICATION_REQUESTS_FETCH_FAIL = 'NOTIFICATION_REQUESTS_FETCH_FAIL';
@ -346,40 +342,6 @@ export function setBrowserPermission (value) {
};
}
export const fetchNotificationPolicy = () => (dispatch) => {
dispatch(fetchNotificationPolicyRequest());
api().get('/api/v1/notifications/policy').then(({ data }) => {
dispatch(fetchNotificationPolicySuccess(data));
}).catch(err => {
dispatch(fetchNotificationPolicyFail(err));
});
};
export const fetchNotificationPolicyRequest = () => ({
type: NOTIFICATION_POLICY_FETCH_REQUEST,
});
export const fetchNotificationPolicySuccess = policy => ({
type: NOTIFICATION_POLICY_FETCH_SUCCESS,
policy,
});
export const fetchNotificationPolicyFail = error => ({
type: NOTIFICATION_POLICY_FETCH_FAIL,
error,
});
export const updateNotificationsPolicy = params => (dispatch) => {
dispatch(fetchNotificationPolicyRequest());
api().put('/api/v1/notifications/policy', params).then(({ data }) => {
dispatch(fetchNotificationPolicySuccess(data));
}).catch(err => {
dispatch(fetchNotificationPolicyFail(err));
});
};
export const fetchNotificationRequests = () => (dispatch, getState) => {
const params = {};

View file

@ -1,6 +1,6 @@
import api, { getLinks } from '../api';
import { importFetchedStatuses } from './importer';
import { importFetchedStatuses, importFetchedAccounts } from './importer';
export const TRENDS_TAGS_FETCH_REQUEST = 'TRENDS_TAGS_FETCH_REQUEST';
export const TRENDS_TAGS_FETCH_SUCCESS = 'TRENDS_TAGS_FETCH_SUCCESS';
@ -49,8 +49,11 @@ export const fetchTrendingLinks = () => (dispatch) => {
dispatch(fetchTrendingLinksRequest());
api()
.get('/api/v1/trends/links')
.then(({ data }) => dispatch(fetchTrendingLinksSuccess(data)))
.get('/api/v1/trends/links', { params: { limit: 20 } })
.then(({ data }) => {
dispatch(importFetchedAccounts(data.map(link => link.author_account).filter(account => !!account)));
dispatch(fetchTrendingLinksSuccess(data));
})
.catch(err => dispatch(fetchTrendingLinksFail(err)));
};

View file

@ -0,0 +1,10 @@
import { apiRequest } from 'mastodon/api';
import type { NotificationPolicyJSON } from 'mastodon/api_types/notification_policies';
export const apiGetNotificationPolicy = () =>
apiRequest<NotificationPolicyJSON>('GET', '/v1/notifications/policy');
export const apiUpdateNotificationsPolicy = (
policy: Partial<NotificationPolicyJSON>,
) =>
apiRequest<NotificationPolicyJSON>('PUT', '/v1/notifications/policy', policy);

View file

@ -0,0 +1,12 @@
// See app/serializers/rest/notification_policy_serializer.rb
export interface NotificationPolicyJSON {
filter_not_following: boolean;
filter_not_followers: boolean;
filter_new_accounts: boolean;
filter_private_mentions: boolean;
summary: {
pending_requests_count: number;
pending_notifications_count: number;
};
}

View file

@ -0,0 +1,19 @@
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { AuthorLink } from 'mastodon/features/explore/components/author_link';
export const MoreFromAuthor = ({ accountId }) => (
<div className='more-from-author'>
<svg viewBox='0 0 79 79' className='logo logo--icon' role='img'>
<use xlinkHref='#logo-symbol-icon' />
</svg>
<FormattedMessage id='link_preview.more_from_author' defaultMessage='More from {name}' values={{ name: <AuthorLink accountId={accountId} /> }} />
</div>
);
MoreFromAuthor.propTypes = {
accountId: PropTypes.string.isRequired,
};

View file

@ -42,10 +42,12 @@ class ServerBanner extends PureComponent {
return (
<div className='server-banner'>
<div className='server-banner__introduction'>
<FormattedMessage id='server_banner.introduction' defaultMessage='{domain} is part of the decentralized social network powered by {mastodon}.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />
<FormattedMessage id='server_banner.is_one_of_many' defaultMessage='{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />
</div>
<ServerHeroImage blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />
<Link to='/about'>
<ServerHeroImage blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />
</Link>
<div className='server-banner__description'>
{isLoading ? (
@ -84,10 +86,6 @@ class ServerBanner extends PureComponent {
)}
</div>
</div>
<hr className='spacer' />
<Link className='button button--block button-secondary' to='/about'><FormattedMessage id='server_banner.learn_more' defaultMessage='Learn more' /></Link>
</div>
);
}

View file

@ -110,18 +110,6 @@ class LanguageDropdownMenu extends PureComponent {
}).map(result => result.obj);
}
frequentlyUsed () {
const { languages, value } = this.props;
const current = languages.find(lang => lang[0] === value);
const results = [];
if (current) {
results.push(current);
}
return results;
}
handleClick = e => {
const value = e.currentTarget.getAttribute('data-index');

View file

@ -0,0 +1,21 @@
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
import { Avatar } from 'mastodon/components/avatar';
import { useAppSelector } from 'mastodon/store';
export const AuthorLink = ({ accountId }) => {
const account = useAppSelector(state => state.getIn(['accounts', accountId]));
return (
<Link to={`/@${account.get('acct')}`} className='story__details__shared__author-link'>
<Avatar account={account} size={16} />
<bdi dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} />
</Link>
);
};
AuthorLink.propTypes = {
accountId: PropTypes.string.isRequired,
};

View file

@ -1,61 +1,89 @@
import PropTypes from 'prop-types';
import { PureComponent } from 'react';
import { useState, useCallback } from 'react';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import { Blurhash } from 'mastodon/components/blurhash';
import { accountsCountRenderer } from 'mastodon/components/hashtag';
import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
import { ShortNumber } from 'mastodon/components/short_number';
import { Skeleton } from 'mastodon/components/skeleton';
export default class Story extends PureComponent {
import { AuthorLink } from './author_link';
static propTypes = {
url: PropTypes.string,
title: PropTypes.string,
lang: PropTypes.string,
publisher: PropTypes.string,
publishedAt: PropTypes.string,
author: PropTypes.string,
sharedTimes: PropTypes.number,
thumbnail: PropTypes.string,
thumbnailDescription: PropTypes.string,
blurhash: PropTypes.string,
expanded: PropTypes.bool,
};
const sharesCountRenderer = (displayNumber, pluralReady) => (
<FormattedMessage
id='link_preview.shares'
defaultMessage='{count, plural, one {{counter} post} other {{counter} posts}}'
values={{
count: pluralReady,
counter: <strong>{displayNumber}</strong>,
}}
/>
);
state = {
thumbnailLoaded: false,
};
export const Story = ({
url,
title,
lang,
publisher,
publishedAt,
author,
authorAccount,
sharedTimes,
thumbnail,
thumbnailDescription,
blurhash,
expanded
}) => {
const [thumbnailLoaded, setThumbnailLoaded] = useState(false);
handleImageLoad = () => this.setState({ thumbnailLoaded: true });
const handleImageLoad = useCallback(() => {
setThumbnailLoaded(true);
}, [setThumbnailLoaded]);
render () {
const { expanded, url, title, lang, publisher, author, publishedAt, sharedTimes, thumbnail, thumbnailDescription, blurhash } = this.props;
const { thumbnailLoaded } = this.state;
return (
<a className={classNames('story', { expanded })} href={url} target='blank' rel='noopener'>
<div className='story__details'>
<div className='story__details__publisher'>{publisher ? <span lang={lang}>{publisher}</span> : <Skeleton width={50} />}{publishedAt && <> · <RelativeTimestamp timestamp={publishedAt} /></>}</div>
<div className='story__details__title' lang={lang}>{title ? title : <Skeleton />}</div>
<div className='story__details__shared'>{author && <><FormattedMessage id='link_preview.author' defaultMessage='By {name}' values={{ name: <strong>{author}</strong> }} /> · </>}{typeof sharedTimes === 'number' ? <ShortNumber value={sharedTimes} renderer={accountsCountRenderer} /> : <Skeleton width={100} />}</div>
return (
<div className={classNames('story', { expanded })}>
<div className='story__details'>
<div className='story__details__publisher'>
{publisher ? <span lang={lang}>{publisher}</span> : <Skeleton width={50} />}{publishedAt && <> · <RelativeTimestamp timestamp={publishedAt} /></>}
</div>
<div className='story__thumbnail'>
{thumbnail ? (
<>
<div className={classNames('story__thumbnail__preview', { 'story__thumbnail__preview--hidden': thumbnailLoaded })}><Blurhash hash={blurhash} /></div>
<img src={thumbnail} onLoad={this.handleImageLoad} alt={thumbnailDescription} title={thumbnailDescription} lang={lang} />
</>
) : <Skeleton />}
<a className='story__details__title' lang={lang} href={url} target='blank' rel='noopener'>
{title ? title : <Skeleton />}
</a>
<div className='story__details__shared'>
{author ? <FormattedMessage id='link_preview.author' className='story__details__shared__author' defaultMessage='By {name}' values={{ name: authorAccount ? <AuthorLink accountId={authorAccount} /> : <strong>{author}</strong> }} /> : <span />}
{typeof sharedTimes === 'number' ? <span className='story__details__shared__pill'><ShortNumber value={sharedTimes} renderer={sharesCountRenderer} /></span> : <Skeleton width='10ch' />}
</div>
</div>
<a className='story__thumbnail' href={url} target='blank' rel='noopener'>
{thumbnail ? (
<>
<div className={classNames('story__thumbnail__preview', { 'story__thumbnail__preview--hidden': thumbnailLoaded })}><Blurhash hash={blurhash} /></div>
<img src={thumbnail} onLoad={handleImageLoad} alt={thumbnailDescription} title={thumbnailDescription} lang={lang} />
</>
) : <Skeleton />}
</a>
);
}
</div>
);
};
}
Story.propTypes = {
url: PropTypes.string,
title: PropTypes.string,
lang: PropTypes.string,
publisher: PropTypes.string,
publishedAt: PropTypes.string,
author: PropTypes.string,
authorAccount: PropTypes.string,
sharedTimes: PropTypes.number,
thumbnail: PropTypes.string,
thumbnailDescription: PropTypes.string,
blurhash: PropTypes.string,
expanded: PropTypes.bool,
};

View file

@ -13,7 +13,7 @@ import { DismissableBanner } from 'mastodon/components/dismissable_banner';
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
import Story from './components/story';
import { Story } from './components/story';
const mapStateToProps = state => ({
links: state.getIn(['trends', 'links', 'items']),
@ -75,6 +75,7 @@ class Links extends PureComponent {
publisher={link.get('provider_name')}
publishedAt={link.get('published_at')}
author={link.get('author_name')}
authorAccount={link.getIn(['author_account', 'id'])}
sharedTimes={link.getIn(['history', 0, 'accounts']) * 1 + link.getIn(['history', 1, 'accounts']) * 1}
thumbnail={link.get('image')}
thumbnailDescription={link.get('image_description')}

View file

@ -24,7 +24,7 @@ class ColumnSettings extends PureComponent {
alertsEnabled: PropTypes.bool,
browserSupport: PropTypes.bool,
browserPermission: PropTypes.string,
notificationPolicy: ImmutablePropTypes.map,
notificationPolicy: PropTypes.object.isRequired,
onChangePolicy: PropTypes.func.isRequired,
};
@ -82,22 +82,22 @@ class ColumnSettings extends PureComponent {
<h3><FormattedMessage id='notifications.policy.title' defaultMessage='Filter out notifications from…' /></h3>
<div className='column-settings__row'>
<CheckboxWithLabel checked={notificationPolicy.get('filter_not_following')} onChange={this.handleFilterNotFollowing}>
<CheckboxWithLabel checked={notificationPolicy.filter_not_following} onChange={this.handleFilterNotFollowing}>
<strong><FormattedMessage id='notifications.policy.filter_not_following_title' defaultMessage="People you don't follow" /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_not_following_hint' defaultMessage='Until you manually approve them' /></span>
</CheckboxWithLabel>
<CheckboxWithLabel checked={notificationPolicy.get('filter_not_followers')} onChange={this.handleFilterNotFollowers}>
<CheckboxWithLabel checked={notificationPolicy.filter_not_followers} onChange={this.handleFilterNotFollowers}>
<strong><FormattedMessage id='notifications.policy.filter_not_followers_title' defaultMessage='People not following you' /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_not_followers_hint' defaultMessage='Including people who have been following you fewer than {days, plural, one {one day} other {# days}}' values={{ days: 3 }} /></span>
</CheckboxWithLabel>
<CheckboxWithLabel checked={notificationPolicy.get('filter_new_accounts')} onChange={this.handleFilterNewAccounts}>
<CheckboxWithLabel checked={notificationPolicy.filter_new_accounts} onChange={this.handleFilterNewAccounts}>
<strong><FormattedMessage id='notifications.policy.filter_new_accounts_title' defaultMessage='New accounts' /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_new_accounts.hint' defaultMessage='Created within the past {days, plural, one {one day} other {# days}}' values={{ days: 30 }} /></span>
</CheckboxWithLabel>
<CheckboxWithLabel checked={notificationPolicy.get('filter_private_mentions')} onChange={this.handleFilterPrivateMentions}>
<CheckboxWithLabel checked={notificationPolicy.filter_private_mentions} onChange={this.handleFilterPrivateMentions}>
<strong><FormattedMessage id='notifications.policy.filter_private_mentions_title' defaultMessage='Unsolicited private mentions' /></strong>
<span className='hint'><FormattedMessage id='notifications.policy.filter_private_mentions_hint' defaultMessage="Filtered unless it's in reply to your own mention or if you follow the sender" /></span>
</CheckboxWithLabel>

View file

@ -1,49 +0,0 @@
import { useEffect } from 'react';
import { FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
import { fetchNotificationPolicy } from 'mastodon/actions/notifications';
import { Icon } from 'mastodon/components/icon';
import { toCappedNumber } from 'mastodon/utils/numbers';
export const FilteredNotificationsBanner = () => {
const dispatch = useDispatch();
const policy = useSelector(state => state.get('notificationPolicy'));
useEffect(() => {
dispatch(fetchNotificationPolicy());
const interval = setInterval(() => {
dispatch(fetchNotificationPolicy());
}, 120000);
return () => {
clearInterval(interval);
};
}, [dispatch]);
if (policy === null || policy.getIn(['summary', 'pending_notifications_count']) === 0) {
return null;
}
return (
<Link className='filtered-notifications-banner' to='/notifications/requests'>
<Icon icon={InventoryIcon} />
<div className='filtered-notifications-banner__text'>
<strong><FormattedMessage id='filtered_notifications_banner.title' defaultMessage='Filtered notifications' /></strong>
<span><FormattedMessage id='filtered_notifications_banner.pending_requests' defaultMessage='Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know' values={{ count: policy.getIn(['summary', 'pending_requests_count']) }} /></span>
</div>
<div className='filtered-notifications-banner__badge'>
<div className='filtered-notifications-banner__badge__badge'>{toCappedNumber(policy.getIn(['summary', 'pending_notifications_count']))}</div>
<FormattedMessage id='filtered_notifications_banner.mentions' defaultMessage='{count, plural, one {mention} other {mentions}}' values={{ count: policy.getIn(['summary', 'pending_notifications_count']) }} />
</div>
</Link>
);
};

View file

@ -0,0 +1,68 @@
import { useEffect } from 'react';
import { FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
import { fetchNotificationPolicy } from 'mastodon/actions/notification_policies';
import { Icon } from 'mastodon/components/icon';
import { useAppSelector, useAppDispatch } from 'mastodon/store';
import { toCappedNumber } from 'mastodon/utils/numbers';
export const FilteredNotificationsBanner: React.FC = () => {
const dispatch = useAppDispatch();
const policy = useAppSelector((state) => state.notificationPolicy);
useEffect(() => {
void dispatch(fetchNotificationPolicy());
const interval = setInterval(() => {
void dispatch(fetchNotificationPolicy());
}, 120000);
return () => {
clearInterval(interval);
};
}, [dispatch]);
if (policy === null || policy.summary.pending_notifications_count === 0) {
return null;
}
return (
<Link
className='filtered-notifications-banner'
to='/notifications/requests'
>
<Icon icon={InventoryIcon} id='filtered-notifications' />
<div className='filtered-notifications-banner__text'>
<strong>
<FormattedMessage
id='filtered_notifications_banner.title'
defaultMessage='Filtered notifications'
/>
</strong>
<span>
<FormattedMessage
id='filtered_notifications_banner.pending_requests'
defaultMessage='Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know'
values={{ count: policy.summary.pending_requests_count }}
/>
</span>
</div>
<div className='filtered-notifications-banner__badge'>
<div className='filtered-notifications-banner__badge__badge'>
{toCappedNumber(policy.summary.pending_notifications_count)}
</div>
<FormattedMessage
id='filtered_notifications_banner.mentions'
defaultMessage='{count, plural, one {mention} other {mentions}}'
values={{ count: policy.summary.pending_notifications_count }}
/>
</div>
</Link>
);
};

View file

@ -4,7 +4,8 @@ import { connect } from 'react-redux';
import { showAlert } from '../../../actions/alerts';
import { openModal } from '../../../actions/modal';
import { setFilter, clearNotifications, requestBrowserPermission, updateNotificationsPolicy } from '../../../actions/notifications';
import { updateNotificationsPolicy } from '../../../actions/notification_policies';
import { setFilter, clearNotifications, requestBrowserPermission } from '../../../actions/notifications';
import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications';
import { changeSetting } from '../../../actions/settings';
import ColumnSettings from '../components/column_settings';
@ -15,13 +16,16 @@ const messages = defineMessages({
permissionDenied: { id: 'notifications.permission_denied_alert', defaultMessage: 'Desktop notifications can\'t be enabled, as browser permission has been denied before' },
});
/**
* @param {import('mastodon/store').RootState} state
*/
const mapStateToProps = state => ({
settings: state.getIn(['settings', 'notifications']),
pushSettings: state.get('push_notifications'),
alertsEnabled: state.getIn(['settings', 'notifications', 'alerts']).includes(true),
browserSupport: state.getIn(['notifications', 'browserSupport']),
browserPermission: state.getIn(['notifications', 'browserPermission']),
notificationPolicy: state.get('notificationPolicy'),
notificationPolicy: state.notificationPolicy,
});
const mapDispatchToProps = (dispatch, { intl }) => ({

View file

@ -6,7 +6,6 @@ import { PureComponent } from 'react';
import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import { Link } from 'react-router-dom';
import Immutable from 'immutable';
@ -15,9 +14,9 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import DescriptionIcon from '@/material-icons/400-24px/description-fill.svg?react';
import OpenInNewIcon from '@/material-icons/400-24px/open_in_new.svg?react';
import PlayArrowIcon from '@/material-icons/400-24px/play_arrow-fill.svg?react';
import { Avatar } from 'mastodon/components/avatar';
import { Blurhash } from 'mastodon/components/blurhash';
import { Icon } from 'mastodon/components/icon';
import { MoreFromAuthor } from 'mastodon/components/more_from_author';
import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
import { useBlurhash } from 'mastodon/initial_state';
@ -59,20 +58,6 @@ const addAutoPlay = html => {
return html;
};
const MoreFromAuthor = ({ author }) => (
<div className='more-from-author'>
<svg viewBox='0 0 79 79' className='logo logo--icon' role='img'>
<use xlinkHref='#logo-symbol-icon' />
</svg>
<FormattedMessage id='link_preview.more_from_author' defaultMessage='More from {name}' values={{ name: <Link to={`/@${author.get('acct')}`}><Avatar account={author} size={16} /> {author.get('display_name')}</Link> }} />
</div>
);
MoreFromAuthor.propTypes = {
author: ImmutablePropTypes.map,
};
export default class Card extends PureComponent {
static propTypes = {
@ -259,7 +244,7 @@ export default class Card extends PureComponent {
{description}
</a>
{showAuthor && <MoreFromAuthor author={card.get('author_account')} />}
{showAuthor && <MoreFromAuthor accountId={card.get('author_account')} />}
</>
);
}

View file

@ -22,7 +22,8 @@ const SignInBanner = () => {
if (sso_redirect) {
return (
<div className='sign-in-banner'>
<p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>
<p><strong><FormattedMessage id='sign_in_banner.mastodon_is' defaultMessage="Mastodon is the best way to keep up with what's happening." /></strong></p>
<p><FormattedMessage id='sign_in_banner.follow_anyone' defaultMessage='Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.' /></p>
<a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
</div>
);
@ -44,7 +45,8 @@ const SignInBanner = () => {
return (
<div className='sign-in-banner'>
<p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>
<p><strong><FormattedMessage id='sign_in_banner.mastodon_is' defaultMessage="Mastodon is the best way to keep up with what's happening." /></strong></p>
<p><FormattedMessage id='sign_in_banner.follow_anyone' defaultMessage='Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.' /></p>
{signupButton}
<a href='/auth/sign_in' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>
</div>

View file

@ -476,8 +476,6 @@
"server_banner.about_active_users": "Usuarios activos en o servidor entre los zaguers 30 días (Usuarios Activos Mensuals)",
"server_banner.active_users": "usuarios activos",
"server_banner.administered_by": "Administrau per:",
"server_banner.introduction": "{domain} ye parte d'o ret social descentralizau liderada per {mastodon}.",
"server_banner.learn_more": "Saber mas",
"server_banner.server_stats": "Estatisticas d'o servidor:",
"sign_in_banner.create_account": "Creyar cuenta",
"sign_in_banner.sign_in": "Iniciar sesión",

View file

@ -225,7 +225,11 @@
"domain_pill.their_username": "مُعرّفُهم الفريد على الخادم. من الممكن العثور على مستخدمين بنفس اسم المستخدم على خوادم مختلفة.",
"domain_pill.username": "اسم المستخدم",
"domain_pill.whats_in_a_handle": "ما المقصود بالمُعرِّف؟",
"domain_pill.who_they_are": "بما أن المعالجات تقول من هو الشخص ومكان وجوده، يمكنك التفاعل مع الناس عبر الشبكة الاجتماعية لـ <button>ActivityPub-Power منصات</button>.",
"domain_pill.who_you_are": "لأن معالجتك تقول من أنت ومكان وجودك، يمكن الناس التفاعل معك عبر الشبكة الاجتماعية لـ <button>ActivityPub-Power منصات</button>.",
"domain_pill.your_handle": "عنوانك الكامل:",
"domain_pill.your_server": "منزلك الرقمي، حيث تعيش جميع مشاركاتك. لا تحب هذا؟ إنقل الخوادم في أي وقت واخضر متابعينك أيضًا.",
"domain_pill.your_username": "معرفك الفريد على هذا الخادم. من الممكن العثور على مستخدمين بنفس إسم المستخدم على خوادم مختلفة.",
"embed.instructions": "يمكنكم إدماج هذا المنشور على موقعكم الإلكتروني عن طريق نسخ الشفرة أدناه.",
"embed.preview": "إليك ما سيبدو عليه:",
"emoji_button.activity": "الأنشطة",
@ -262,6 +266,7 @@
"empty_column.list": "هذه القائمة فارغة مؤقتا و لكن سوف تمتلئ تدريجيا عندما يبدأ الأعضاء المُنتَمين إليها بنشر منشورات.",
"empty_column.lists": "ليس عندك أية قائمة بعد. سوف تظهر قوائمك هنا إن قمت بإنشاء واحدة.",
"empty_column.mutes": "لم تقم بكتم أي مستخدم بعد.",
"empty_column.notification_requests": "لا يوجد شيء هنا. عندما تتلقى إشعارات جديدة، سوف تظهر هنا وفقًا لإعداداتك.",
"empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
"empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات",
"error.unexpected_crash.explanation": "نظرا لوجود خطأ في التعليمات البرمجية أو مشكلة توافق مع المتصفّح، تعذر عرض هذه الصفحة بشكل صحيح.",
@ -292,6 +297,8 @@
"filter_modal.select_filter.subtitle": "استخدم فئة موجودة أو قم بإنشاء فئة جديدة",
"filter_modal.select_filter.title": "تصفية هذا المنشور",
"filter_modal.title.status": "تصفية منشور",
"filtered_notifications_banner.mentions": "{count, plural, one {إشارة} two {إشارتين} few {# إشارات} other {# إشارة}}",
"filtered_notifications_banner.pending_requests": "إشعارات من {count, plural, zero {}=0 {لا أحد} one {شخص واحد قد تعرفه} two {شخصين قد تعرفهما} few {# أشخاص قد تعرفهم} many {# شخص قد تعرفهم} other {# شخص قد تعرفهم}}",
"filtered_notifications_banner.title": "الإشعارات المصفاة",
"firehose.all": "الكل",
"firehose.local": "هذا الخادم",
@ -301,6 +308,8 @@
"follow_requests.unlocked_explanation": "حتى وإن كان حسابك غير مقفل، يعتقد فريق {domain} أنك قد ترغب في مراجعة طلبات المتابعة من هذه الحسابات يدوياً.",
"follow_suggestions.curated_suggestion": "اختيار الموظفين",
"follow_suggestions.dismiss": "لا تُظهرها مجدّدًا",
"follow_suggestions.featured_longer": "مختار يدوياً من قِبل فريق {domain}",
"follow_suggestions.friends_of_friends_longer": "مشهور بين الأشخاص الذين تتابعهم",
"follow_suggestions.hints.featured": "تم اختيار هذا الملف الشخصي يدوياً من قبل فريق {domain}.",
"follow_suggestions.hints.friends_of_friends": "هذا الملف الشخصي مشهور بين الأشخاص الذين تتابعهم.",
"follow_suggestions.hints.most_followed": "هذا الملف الشخصي هو واحد من الأكثر متابعة على {domain}.",
@ -405,6 +414,7 @@
"limited_account_hint.action": "إظهار الملف التعريفي على أي حال",
"limited_account_hint.title": "تم إخفاء هذا الملف الشخصي من قبل مشرفي {domain}.",
"link_preview.author": "مِن {name}",
"link_preview.more_from_author": "المزيد من {name}",
"lists.account.add": "أضف إلى القائمة",
"lists.account.remove": "احذف من القائمة",
"lists.delete": "احذف القائمة",
@ -465,10 +475,13 @@
"notification.follow_request": "لقد طلب {name} متابعتك",
"notification.mention": "{name} ذكرك",
"notification.moderation-warning.learn_more": "اعرف المزيد",
"notification.moderation_warning": "لقد تلقيت تحذيرًا بالإشراف",
"notification.moderation_warning.action_delete_statuses": "تم إزالة بعض مشاركاتك.",
"notification.moderation_warning.action_disable": "تم تعطيل حسابك.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "بعض من منشوراتك تم تصنيفها على أنها حساسة.",
"notification.moderation_warning.action_none": "لقد تلقى حسابك تحذيرا بالإشراف.",
"notification.moderation_warning.action_sensitive": "سيتم وضع علامة على منشوراتك على أنها حساسة من الآن فصاعدا.",
"notification.moderation_warning.action_silence": "لقد تم تقييد حسابك.",
"notification.moderation_warning.action_suspend": "لقد تم تعليق حسابك.",
"notification.own_poll": "انتهى استطلاعك للرأي",
"notification.poll": "لقد انتهى استطلاع رأي شاركتَ فيه",
@ -682,13 +695,10 @@
"server_banner.about_active_users": "الأشخاص الذين يستخدمون هذا الخادم خلال الأيام الثلاثين الأخيرة (المستخدمون النشطون شهريًا)",
"server_banner.active_users": "مستخدم نشط",
"server_banner.administered_by": "يُديره:",
"server_banner.introduction": "{domain} هو جزء من الشبكة الاجتماعية اللامركزية التي تعمل بواسطة {mastodon}.",
"server_banner.learn_more": "تعلم المزيد",
"server_banner.server_stats": "إحصائيات الخادم:",
"sign_in_banner.create_account": "أنشئ حسابًا",
"sign_in_banner.sign_in": "تسجيل الدخول",
"sign_in_banner.sso_redirect": "تسجيل الدخول أو إنشاء حساب",
"sign_in_banner.text": "قم بالولوج بحسابك لمتابعة الصفحات الشخصية أو الوسوم، أو لإضافة المنشورات إلى المفضلة ومشاركتها والرد عليها أو التفاعل بواسطة حسابك المتواجد على خادم مختلف.",
"status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
"status.admin_domain": "فتح واجهة الإشراف لـ {domain}",
"status.admin_status": "افتح هذا المنشور على واجهة الإشراف",

View file

@ -409,8 +409,6 @@
"search_results.see_all": "Ver too",
"search_results.statuses": "Artículos",
"search_results.title": "Busca de: {q}",
"server_banner.introduction": "{domain} ye parte de la rede social descentralizada que tien la teunoloxía de {mastodon}.",
"server_banner.learn_more": "Saber más",
"server_banner.server_stats": "Estadístiques del sirvidor:",
"sign_in_banner.create_account": "Crear una cuenta",
"sign_in_banner.sso_redirect": "Aniciar la sesión o rexistrase",

View file

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Ваш акаўнт не схаваны, аднак прадстаўнікі {domain} палічылі, што вы можаце захацець праглядзець запыты на падпіску з гэтых профіляў уручную.",
"follow_suggestions.curated_suggestion": "Выбар адміністрацыі",
"follow_suggestions.dismiss": "Не паказваць зноў",
"follow_suggestions.featured_longer": "Адабраныя камандай {domain} уручную",
"follow_suggestions.friends_of_friends_longer": "Папулярнае сярод людзей, на якіх Вы падпісаны",
"follow_suggestions.hints.featured": "Гэты профіль быў выбраны ўручную камандай {domain}.",
"follow_suggestions.hints.friends_of_friends": "Гэты профіль папулярны сярод людзей, на якіх вы падпісаліся.",
"follow_suggestions.hints.most_followed": "Гэты профіль - адзін з профіляў з самай вялікай колькасцю падпісак на {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Гэты профіль падобны на профілі, на якія вы нядаўна падпісаліся.",
"follow_suggestions.personalized_suggestion": "Персаналізаваная прапанова",
"follow_suggestions.popular_suggestion": "Папулярная прапанова",
"follow_suggestions.popular_suggestion_longer": "Папулярнае на {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Падобныя профілі, за якімі вы нядаўна сачылі",
"follow_suggestions.view_all": "Праглядзець усё",
"follow_suggestions.who_to_follow": "На каго падпісацца",
"followed_tags": "Падпіскі",
@ -410,6 +414,7 @@
"limited_account_hint.action": "Усе роўна паказваць профіль",
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
"link_preview.author": "Ад {name}",
"link_preview.more_from_author": "Больш ад {name}",
"lists.account.add": "Дадаць да спісу",
"lists.account.remove": "Выдаліць са спісу",
"lists.delete": "Выдаліць спіс",
@ -439,7 +444,7 @@
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць вашыя паведамленні, але вы не будзеце паведамленні карыстальніка.",
"navigation_bar.about": "Пра нас",
"navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
"navigation_bar.blocks": "Заблакаваныя карыстальнікі",
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
"navigation_bar.bookmarks": "Закладкі",
"navigation_bar.community_timeline": "Лакальная стужка",
"navigation_bar.compose": "Стварыць новы допіс",
@ -458,7 +463,7 @@
"navigation_bar.opened_in_classic_interface": "Допісы, уліковыя запісы і іншыя спецыфічныя старонкі па змоўчанні адчыняюцца ў класічным вэб-інтэрфейсе.",
"navigation_bar.personal": "Асабістае",
"navigation_bar.pins": "Замацаваныя допісы",
"navigation_bar.preferences": "Параметры",
"navigation_bar.preferences": "Налады",
"navigation_bar.public_timeline": "Глабальная стужка",
"navigation_bar.search": "Пошук",
"navigation_bar.security": "Бяспека",
@ -470,10 +475,22 @@
"notification.follow_request": "{name} адправіў запыт на падпіску",
"notification.mention": "{name} згадаў вас",
"notification.moderation-warning.learn_more": "Даведацца больш",
"notification.moderation_warning": "Вы атрымалі папярэджанне аб мадэрацыі",
"notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.",
"notification.moderation_warning.action_disable": "Ваш уліковы запіс быў адключаны.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некаторыя з вашых допісаў былі пазначаныя як далікатныя.",
"notification.moderation_warning.action_none": "Ваш уліковы запіс атрымаў папярэджанне ад мадэратараў.",
"notification.moderation_warning.action_sensitive": "З гэтага моманту вашыя допісы будуць пазначаныя як далікатныя.",
"notification.moderation_warning.action_silence": "Ваш уліковы запіс быў абмежаваны.",
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў прыпынены.",
"notification.own_poll": "Ваша апытанне скончылася",
"notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася",
"notification.reblog": "{name} пашырыў ваш допіс",
"notification.relationships_severance_event": "Страціў сувязь з {name}",
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.",
"notification.relationships_severance_event.domain_block": "Адміністратар з {from} заблакіраваў {target}, у тым ліку {followersCount} вашых падпісчыка(-аў) і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}.",
"notification.relationships_severance_event.learn_more": "Даведацца больш",
"notification.relationships_severance_event.user_domain_block": "Вы заблакіравалі {target} выдаліўшы {followersCount} сваіх падпісчыкаў і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}, за якімі вы сочыце.",
"notification.status": "Новы допіс ад {name}",
"notification.update": "Допіс {name} адрэдагаваны",
"notification_requests.accept": "Прыняць",
@ -678,13 +695,10 @@
"server_banner.about_active_users": "Людзі, якія карыстаюцца гэтым сервера на працягу апошніх 30 дзён (Штомесячна Актыўныя Карыстальнікі)",
"server_banner.active_users": "актыўныя карыстальнікі",
"server_banner.administered_by": "Адміністратар:",
"server_banner.introduction": "{domain} ёсць часткай дэцэнтралізаванай сацыяльнай сеткі ад {mastodon}.",
"server_banner.learn_more": "Даведацца больш",
"server_banner.server_stats": "Статыстыка сервера:",
"sign_in_banner.create_account": "Стварыць уліковы запіс",
"sign_in_banner.sign_in": "Увайсці",
"sign_in_banner.sso_redirect": "Уваход ці рэгістрацыя",
"sign_in_banner.text": "Увайдзіце, каб падпісацца на людзей і тэгі, каб адказваць на допісы, дзяліцца імі і падабаць іх, альбо кантактаваць з вашага ўліковага запісу на іншым серверы.",
"status.admin_account": "Адкрыць інтэрфейс мадэратара для @{name}",
"status.admin_domain": "Адкрыць інтэрфейс мадэратара для {domain}",
"status.admin_status": "Адкрыць гэты допіс у інтэрфейсе мадэрацыі",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Този профил е бил скрит от модераторите на {domain}.",
"link_preview.author": "От {name}",
"link_preview.more_from_author": "Още от {name}",
"link_preview.shares": "{count, plural, one {{counter} публикация} other {{counter} публикации}}",
"lists.account.add": "Добавяне към списък",
"lists.account.remove": "Премахване от списъка",
"lists.delete": "Изтриване на списъка",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Ползващите сървъра през последните 30 дни (дейните месечно потребители)",
"server_banner.active_users": "дейни потребители",
"server_banner.administered_by": "Администрира се от:",
"server_banner.introduction": "{domain} е част от децентрализираната социална мрежа, поддържана от {mastodon}.",
"server_banner.learn_more": "Научете повече",
"server_banner.is_one_of_many": "{domain} е един от многото независими сървъри на Mastodon, които може да употребявате, за да участвате във федивселената.",
"server_banner.server_stats": "Статистика на сървъра:",
"sign_in_banner.create_account": "Създаване на акаунт",
"sign_in_banner.follow_anyone": "Последвайте някого през федивселената и вижте всичко в хронологичен ред. Без алгоритми, реклами, или примамващи връзки в полезрението.",
"sign_in_banner.mastodon_is": "Mastodon е най-добрия начин да бъдете в крак със случващото се.",
"sign_in_banner.sign_in": "Вход",
"sign_in_banner.sso_redirect": "Влизане или регистриране",
"sign_in_banner.text": "Влезте, за да последвате профили или хаштагове, отбелязвате като любими, споделяте и отговаряте на публикации. Може също така да взаимодействате от акаунта си на друг сървър.",
"status.admin_account": "Отваряне на интерфейс за модериране за @{name}",
"status.admin_domain": "Отваряне на модериращия интерфейс за {domain}",
"status.admin_status": "Отваряне на публикацията в модериращия интерфейс",
@ -742,7 +743,7 @@
"status.reblogged_by": "{name} подсили",
"status.reblogs": "{count, plural, one {подсилване} other {подсилвания}}",
"status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.",
"status.redraft": "Изтриване и преначертаване",
"status.redraft": "Изтриване и преработване",
"status.remove_bookmark": "Премахване на отметката",
"status.replied_to": "В отговор до {name}",
"status.reply": "Отговор",

View file

@ -407,7 +407,6 @@
"search_results.all": "সব",
"search_results.hashtags": "হ্যাশট্যাগগুলি",
"search_results.statuses": "টুট",
"server_banner.learn_more": "আরো জানো",
"sign_in_banner.sign_in": "Sign in",
"status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন",
"status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন",

View file

@ -566,7 +566,6 @@
"search_results.title": "Klask {q}",
"server_banner.active_users": "implijerien·ezed oberiant",
"server_banner.administered_by": "Meret gant :",
"server_banner.learn_more": "Gouzout hiroc'h",
"server_banner.server_stats": "Stadegoù ar servijer :",
"sign_in_banner.create_account": "Krouiñ ur gont",
"sign_in_banner.sign_in": "Kevreañ",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Aquest perfil l'han amagat els moderadors de {domain}.",
"link_preview.author": "Per {name}",
"link_preview.more_from_author": "Més de {name}",
"link_preview.shares": "{count, plural, one {{counter} publicació} other {{counter} publicacions}}",
"lists.account.add": "Afegeix a la llista",
"lists.account.remove": "Elimina de la llista",
"lists.delete": "Elimina la llista",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Gent que ha fet servir aquest servidor en els darrers 30 dies (Usuaris Actius Mensuals)",
"server_banner.active_users": "usuaris actius",
"server_banner.administered_by": "Administrat per:",
"server_banner.introduction": "{domain} és part de la xarxa social descentralitzada impulsada per {mastodon}.",
"server_banner.learn_more": "Més informació",
"server_banner.is_one_of_many": "{domain} és un dels molts servidors de Mastodon que pots fer servir per a participar en el fedivers.",
"server_banner.server_stats": "Estadístiques del servidor:",
"sign_in_banner.create_account": "Crea un compte",
"sign_in_banner.follow_anyone": "Segueix qui sigui al fedivers i ho veuràs tot en ordre cronològic. Sense algorismes, anuncis o pescaclics.",
"sign_in_banner.mastodon_is": "Mastodon és la millor manera de seguir al moment què passa.",
"sign_in_banner.sign_in": "Inici de sessió",
"sign_in_banner.sso_redirect": "Inici de sessió o Registre",
"sign_in_banner.text": "Inicia la sessió per a seguir perfils o etiquetes, afavorir, compartir i respondre tuts. També pots interactuar des del teu compte a un servidor diferent.",
"status.admin_account": "Obre la interfície de moderació per a @{name}",
"status.admin_domain": "Obre la interfície de moderació per a @{domain}",
"status.admin_status": "Obre aquest tut a la interfície de moderació",

View file

@ -533,8 +533,6 @@
"server_banner.about_active_users": "ئەو کەسانەی لە ماوەی ٣٠ ڕۆژی ڕابردوودا ئەم سێرڤەرە بەکاردەهێنن (بەکارهێنەرانی چالاک مانگانە)",
"server_banner.active_users": "بەکارهێنەرانی چالاک",
"server_banner.administered_by": "بەڕێوەبردن لەلایەن:",
"server_banner.introduction": "{domain} بەشێکە لەو تۆڕە کۆمەڵایەتییە لامەرکەزییەی کە لەلایەن {mastodon}ەوە بەهێز دەکرێت.",
"server_banner.learn_more": "زیاتر فێربه",
"server_banner.server_stats": "دۆخی ڕاژەکار:",
"sign_in_banner.create_account": "هەژمار دروستبکە",
"sign_in_banner.sign_in": "بچۆ ژوورەوە",

View file

@ -694,13 +694,10 @@
"server_banner.about_active_users": "Lidé používající tento server během posledních 30 dní (měsíční aktivní uživatelé)",
"server_banner.active_users": "aktivní uživatelé",
"server_banner.administered_by": "Spravováno:",
"server_banner.introduction": "{domain} je součástí decentralizované sociální sítě běžící na {mastodon}.",
"server_banner.learn_more": "Zjistit více",
"server_banner.server_stats": "Statistiky serveru:",
"sign_in_banner.create_account": "Vytvořit účet",
"sign_in_banner.sign_in": "Přihlásit se",
"sign_in_banner.sso_redirect": "Přihlášení nebo Registrace",
"sign_in_banner.text": "Přihlaste se pro sledování profilů nebo hashtagů, oblíbení, sdílení a odpovídání na příspěvky. Svůj účet můžete také používat k interagování i na jiném serveru.",
"status.admin_account": "Otevřít moderátorské rozhraní pro @{name}",
"status.admin_domain": "Otevřít moderátorské rozhraní pro {domain}",
"status.admin_status": "Otevřít tento příspěvek v moderátorském rozhraní",

View file

@ -694,13 +694,10 @@
"server_banner.about_active_users": "Pobl sy'n defnyddio'r gweinydd hwn yn ystod y 30 diwrnod diwethaf (Defnyddwyr Gweithredol Misol)",
"server_banner.active_users": "defnyddwyr gweithredol",
"server_banner.administered_by": "Gweinyddir gan:",
"server_banner.introduction": "Mae {domain} yn rhan o'r rhwydwaith cymdeithasol datganoledig sy'n cael ei bweru gan {mastodon}.",
"server_banner.learn_more": "Dysgu mwy",
"server_banner.server_stats": "Ystadegau'r gweinydd:",
"sign_in_banner.create_account": "Creu cyfrif",
"sign_in_banner.sign_in": "Mewngofnodi",
"sign_in_banner.sso_redirect": "Mewngofnodi neu Gofrestru",
"sign_in_banner.text": "Mewngofnodwch i ddilyn proffiliau neu hashnodau, ffefrynnau, rhannu ac ymateb i bostiadau. Gallwch hefyd ryngweithio o'ch cyfrif ar weinyddion gwahanol.",
"status.admin_account": "Agor rhyngwyneb cymedroli ar gyfer @{name}",
"status.admin_domain": "Agor rhyngwyneb cymedroli {domain}",
"status.admin_status": "Agor y postiad hwn yn y rhyngwyneb cymedroli",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Denne profil er blevet skjult af {domain}-moderatorerne.",
"link_preview.author": "Af {name}",
"link_preview.more_from_author": "Mere fra {name}",
"link_preview.shares": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}",
"lists.account.add": "Føj til liste",
"lists.account.remove": "Fjern fra liste",
"lists.delete": "Slet liste",
@ -695,13 +696,10 @@
"server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.active_users": "aktive brugere",
"server_banner.administered_by": "Håndteres af:",
"server_banner.introduction": "{domain} er en del af det decentraliserede, sociale netværk drevet af {mastodon}.",
"server_banner.learn_more": "Læs mere",
"server_banner.server_stats": "Serverstatstik:",
"sign_in_banner.create_account": "Opret konto",
"sign_in_banner.sign_in": "Log ind",
"sign_in_banner.sso_redirect": "Log ind eller Tilmeld",
"sign_in_banner.text": "Log ind for at følge profiler eller hashtags, markere som favorit, dele og besvare indlæg eller interagere fra din konto på en anden server.",
"status.admin_account": "Åbn modereringsbrugerflade for @{name}",
"status.admin_domain": "Åbn modereringsbrugerflade for {domain}",
"status.admin_status": "Åbn dette indlæg i modereringsbrugerfladen",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Dieses Profil wurde von den Moderator*innen von {domain} ausgeblendet.",
"link_preview.author": "Von {name}",
"link_preview.more_from_author": "Mehr von {name}",
"link_preview.shares": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}",
"lists.account.add": "Zur Liste hinzufügen",
"lists.account.remove": "Von der Liste entfernen",
"lists.delete": "Liste löschen",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Personen, die diesen Server in den vergangenen 30 Tagen verwendet haben (monatlich aktive Nutzer*innen)",
"server_banner.active_users": "aktive Profile",
"server_banner.administered_by": "Verwaltet von:",
"server_banner.introduction": "{domain} ist Teil eines dezentralisierten sozialen Netzwerks, angetrieben von {mastodon}.",
"server_banner.learn_more": "Mehr erfahren",
"server_banner.is_one_of_many": "{domain} ist einer von vielen unabhängigen Mastodon-Servern, mit dem du dich im Fediverse beteiligen kannst.",
"server_banner.server_stats": "Serverstatistik:",
"sign_in_banner.create_account": "Konto erstellen",
"sign_in_banner.follow_anyone": "Du kannst jedem im Fediverse folgen und alles in chronologischer Reihenfolge sehen. Keine Algorithmen, Werbung oder Clickbaits vorhanden.",
"sign_in_banner.mastodon_is": "Mastodon ist der beste Zugang, um auf dem Laufenden zu bleiben.",
"sign_in_banner.sign_in": "Anmelden",
"sign_in_banner.sso_redirect": "Anmelden oder registrieren",
"sign_in_banner.text": "Melde dich an, um Profilen oder Hashtags zu folgen, Beiträge zu favorisieren, zu teilen und auf sie zu antworten. Du kannst auch von deinem Konto aus auf einem anderen Server interagieren.",
"status.admin_account": "@{name} moderieren",
"status.admin_domain": "{domain} moderieren",
"status.admin_status": "Beitrag moderieren",

View file

@ -558,13 +558,10 @@
"server_banner.about_active_users": "Άτομα που χρησιμοποιούν αυτόν τον διακομιστή κατά τις τελευταίες 30 ημέρες (Μηνιαία Ενεργοί Χρήστες)",
"server_banner.active_users": "ενεργοί χρήστες",
"server_banner.administered_by": "Διαχειριστής:",
"server_banner.introduction": "Ο {domain} είναι μέρος του αποκεντρωμένου κοινωνικού δικτύου που παρέχεται από {mastodon}.",
"server_banner.learn_more": "Μάθε περισσότερα",
"server_banner.server_stats": "Στατιστικά διακομιστή:",
"sign_in_banner.create_account": "Δημιουργία λογαριασμού",
"sign_in_banner.sign_in": "Σύνδεση",
"sign_in_banner.sso_redirect": "Συνδεθείτε ή Εγγραφείτε",
"sign_in_banner.text": "Συνδεθείτε για να ακολουθήσετε προφίλ ή ετικέτες, αγαπήστε, μοιραστείτε και απαντήστε σε δημοσιεύσεις. Μπορείτε επίσης να αλληλεπιδράσετε από τον λογαριασμό σας σε διαφορετικό διακομιστή.",
"status.admin_account": "Άνοιγμα διεπαφής συντονισμού για τον/την @{name}",
"status.admin_domain": "Άνοιγμα λειτουργίας διαμεσολάβησης για {domain}",
"status.admin_status": "Άνοιγμα αυτής της ανάρτησης σε διεπαφή συντονισμού",

View file

@ -694,13 +694,10 @@
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
"server_banner.active_users": "active users",
"server_banner.administered_by": "Administered by:",
"server_banner.introduction": "{domain} is part of the decentralised social network powered by {mastodon}.",
"server_banner.learn_more": "Learn more",
"server_banner.server_stats": "Server stats:",
"sign_in_banner.create_account": "Create account",
"sign_in_banner.sign_in": "Sign in",
"sign_in_banner.sso_redirect": "Login or Register",
"sign_in_banner.text": "Login to follow profiles or hashtags, favourite, share and reply to posts. You can also interact from your account on a different server.",
"status.admin_account": "Open moderation interface for @{name}",
"status.admin_domain": "Open moderation interface for {domain}",
"status.admin_status": "Open this post in the moderation interface",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "This profile has been hidden by the moderators of {domain}.",
"link_preview.author": "By {name}",
"link_preview.more_from_author": "More from {name}",
"link_preview.shares": "{count, plural, one {{counter} post} other {{counter} posts}}",
"lists.account.add": "Add to list",
"lists.account.remove": "Remove from list",
"lists.delete": "Delete list",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
"server_banner.active_users": "active users",
"server_banner.administered_by": "Administered by:",
"server_banner.introduction": "{domain} is part of the decentralized social network powered by {mastodon}.",
"server_banner.learn_more": "Learn more",
"server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.",
"server_banner.server_stats": "Server stats:",
"sign_in_banner.create_account": "Create account",
"sign_in_banner.follow_anyone": "Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.",
"sign_in_banner.mastodon_is": "Mastodon is the best way to keep up with what's happening.",
"sign_in_banner.sign_in": "Login",
"sign_in_banner.sso_redirect": "Login or Register",
"sign_in_banner.text": "Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.",
"status.admin_account": "Open moderation interface for @{name}",
"status.admin_domain": "Open moderation interface for {domain}",
"status.admin_status": "Open this post in the moderation interface",

View file

@ -596,13 +596,10 @@
"server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)",
"server_banner.active_users": "aktivaj uzantoj",
"server_banner.administered_by": "Administrata de:",
"server_banner.introduction": "{domain} apartenas al la malcentra socia retejo povigita de {mastodon}.",
"server_banner.learn_more": "Lernu pli",
"server_banner.server_stats": "Statistikoj de la servilo:",
"sign_in_banner.create_account": "Krei konton",
"sign_in_banner.sign_in": "Saluti",
"sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi",
"sign_in_banner.text": "Ensalutu por sekvi profilojn aŭ haŝetikedojn, ŝatatajn, dividi kaj respondi afiŝojn. Vi ankaŭ povas interagi de via konto sur alia servilo.",
"status.admin_account": "Malfermi fasadon de moderigado por @{name}",
"status.admin_domain": "Malfermu moderigan interfacon por {domain}",
"status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Este perfil fue ocultado por los moderadores de {domain}.",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Más de {name}",
"link_preview.shares": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}",
"lists.account.add": "Agregar a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Eliminar lista",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Personas usando este servidor durante los últimos 30 días (Usuarios Activos Mensuales)",
"server_banner.active_users": "usuarios activos",
"server_banner.administered_by": "Administrado por:",
"server_banner.introduction": "{domain} es parte de la red social descentralizada con la tecnología de {mastodon}.",
"server_banner.learn_more": "Aprendé más",
"server_banner.is_one_of_many": "{domain} es uno de los muchos servidores de Mastodon independientes que podés usar para participar en el Fediverso.",
"server_banner.server_stats": "Estadísticas del servidor:",
"sign_in_banner.create_account": "Crear cuenta",
"sign_in_banner.follow_anyone": "Seguí a cualquiera cuenta a través del Fediverso y leé todo en orden cronológico. Nada de algoritmos, publicidad o titulares engañosos.",
"sign_in_banner.mastodon_is": "Mastodon es la mejor manera de mantenerse al día sobre lo que está sucediendo.",
"sign_in_banner.sign_in": "Iniciar sesión",
"sign_in_banner.sso_redirect": "Iniciá sesión o registrate",
"sign_in_banner.text": "Iniciá sesión para seguir cuentas o etiquetas, marcar mensajes como favoritos, compartirlos y responderlos. También podés interactuar desde tu cuenta en un servidor diferente.",
"status.admin_account": "Abrir interface de moderación para @{name}",
"status.admin_domain": "Abrir interface de moderación para {domain}",
"status.admin_status": "Abrir este mensaje en la interface de moderación",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Más de {name}",
"link_preview.shares": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
"lists.account.add": "Añadir a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Borrar lista",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Personas utilizando este servidor durante los últimos 30 días (Usuarios Activos Mensuales)",
"server_banner.active_users": "usuarios activos",
"server_banner.administered_by": "Administrado por:",
"server_banner.introduction": "{domain} es parte de la red social descentralizada gestionada por {mastodon}.",
"server_banner.learn_more": "Saber más",
"server_banner.is_one_of_many": "{domain} es uno de los varios servidores independientes de Mastodon que puedes usar para participar en el fediverso.",
"server_banner.server_stats": "Estadísticas del servidor:",
"sign_in_banner.create_account": "Crear cuenta",
"sign_in_banner.follow_anyone": "Sigue a cualquier persona en el fediverso y velo todo en orden cronológico. Sin algoritmos, sin anuncios o titulares engañosos.",
"sign_in_banner.mastodon_is": "Mastodon es el mejor modo de mantenerse al día sobre qué está ocurriendo.",
"sign_in_banner.sign_in": "Iniciar sesión",
"sign_in_banner.sso_redirect": "Iniciar sesión o Registrarse",
"sign_in_banner.text": "Inicia sesión para seguir perfiles o etiquetas, así como marcar como favoritas, compartir y responder a publicaciones. También puedes interactuar desde tu cuenta en un servidor diferente.",
"status.admin_account": "Abrir interfaz de moderación para @{name}",
"status.admin_domain": "Abrir interfaz de moderación para {domain}",
"status.admin_status": "Abrir este estado en la interfaz de moderación",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Más de {name}",
"link_preview.shares": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
"lists.account.add": "Añadir a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Borrar lista",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Usuarios activos en el servidor durante los últimos 30 días (Usuarios Activos Mensuales)",
"server_banner.active_users": "usuarios activos",
"server_banner.administered_by": "Administrado por:",
"server_banner.introduction": "{domain} es parte de la red social descentralizada liderada por {mastodon}.",
"server_banner.learn_more": "Saber más",
"server_banner.is_one_of_many": "{domain} es uno de los varios servidores independientes de Mastodon que puedes usar para participar en el fediverso.",
"server_banner.server_stats": "Estadísticas del servidor:",
"sign_in_banner.create_account": "Crear cuenta",
"sign_in_banner.follow_anyone": "Sigue a cualquier persona en el fediverso y velo todo en orden cronológico. Sin algoritmos, sin anuncios o titulares engañosos.",
"sign_in_banner.mastodon_is": "Mastodon es el mejor modo de mantenerse al día sobre qué está ocurriendo.",
"sign_in_banner.sign_in": "Iniciar sesión",
"sign_in_banner.sso_redirect": "Iniciar sesión o Registrarse",
"sign_in_banner.text": "Inicia sesión para seguir perfiles o etiquetas, así como marcar como favoritas, compartir y responder a publicaciones. También puedes interactuar desde tu cuenta en un servidor diferente.",
"status.admin_account": "Abrir interfaz de moderación para @{name}",
"status.admin_domain": "Abrir interfaz de moderación para {domain}",
"status.admin_status": "Abrir esta publicación en la interfaz de moderación",

View file

@ -147,14 +147,14 @@
"compose.published.body": "Postitus avaldatud.",
"compose.published.open": "Ava",
"compose.saved.body": "Postitus salvestatud.",
"compose_form.direct_message_warning_learn_more": "Vaata täpsemalt",
"compose_form.direct_message_warning_learn_more": "Vaata lisa",
"compose_form.encryption_warning": "Postitused Mastodonis ei ole otsast-otsani krüpteeritud. Ära jaga mingeid delikaatseid andmeid Mastodoni kaudu.",
"compose_form.hashtag_warning": "See postitus ei ilmu ühegi märksõna all, kuna pole avalik. Vaid avalikud postitused on märksõnade kaudu leitavad.",
"compose_form.lock_disclaimer": "Su konto ei ole {locked}. Igaüks saab sind jälgida, et näha su ainult-jälgijatele postitusi.",
"compose_form.lock_disclaimer.lock": "lukus",
"compose_form.placeholder": "Millest mõtled?",
"compose_form.poll.duration": "Küsitluse kestus",
"compose_form.poll.multiple": "Valikvastustega",
"compose_form.poll.multiple": "Mitu vastust",
"compose_form.poll.option_placeholder": "Valik {number}",
"compose_form.poll.single": "Vali üks",
"compose_form.poll.switch_to_multiple": "Muuda küsitlust mitmikvaliku lubamiseks",
@ -297,6 +297,7 @@
"filter_modal.select_filter.subtitle": "Kasuta olemasolevat kategooriat või loo uus",
"filter_modal.select_filter.title": "Filtreeri seda postitust",
"filter_modal.title.status": "Postituse filtreerimine",
"filtered_notifications_banner.mentions": "{count, plural, one {mainimine} other {mainimist}}",
"filtered_notifications_banner.pending_requests": "Teateid {count, plural, =0 {mitte üheltki} one {ühelt} other {#}} inimeselt, keda võid teada",
"filtered_notifications_banner.title": "Filtreeritud teavitused",
"firehose.all": "Kõik",
@ -305,15 +306,19 @@
"follow_request.authorize": "Autoriseeri",
"follow_request.reject": "Hülga",
"follow_requests.unlocked_explanation": "Kuigi su konto pole lukustatud, soovitab {domain} personal siiski nende kontode jälgimistaotlused käsitsi üle vaadata.",
"follow_suggestions.curated_suggestion": "Teiste valitud",
"follow_suggestions.curated_suggestion": "Meeskonna valitud",
"follow_suggestions.dismiss": "Ära enam näita",
"follow_suggestions.hints.featured": "Selle kasutajaprofiili on soovitanud {domain} kasutajad.",
"follow_suggestions.hints.friends_of_friends": "See kasutajaprofiil on jälgitavate seas populaarne.",
"follow_suggestions.featured_longer": "Käsitsi valitud {domain} meeskonna poolt",
"follow_suggestions.friends_of_friends_longer": "Populaarne inimeste hulgas, keda jälgid",
"follow_suggestions.hints.featured": "Selle kasutajaprofiili on soovitanud {domain} meeskond.",
"follow_suggestions.hints.friends_of_friends": "See kasutajaprofiil on sinu jälgitavate seas populaarne.",
"follow_suggestions.hints.most_followed": "See on {domain} enim jälgitud kasutajaprofiil.",
"follow_suggestions.hints.most_interactions": "See on {domain} viimasel ajal enim tähelepanu saanud kasutajaprofiil.",
"follow_suggestions.hints.most_interactions": "See kasutajaprofiil on viimasel ajal {domain} saanud palju tähelepanu.",
"follow_suggestions.hints.similar_to_recently_followed": "See kasutajaprofiil sarnaneb neile, mida oled hiljuti jälgima asunud.",
"follow_suggestions.personalized_suggestion": "Isikupärastatud soovitus",
"follow_suggestions.popular_suggestion": "Popuplaarne soovitus",
"follow_suggestions.popular_suggestion_longer": "Populaarne kohas {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Sarnane profiilile, mida hiljuti jälgima hakkasid",
"follow_suggestions.view_all": "Vaata kõiki",
"follow_suggestions.who_to_follow": "Keda jälgida",
"followed_tags": "Jälgitavad märksõnad",
@ -409,6 +414,8 @@
"limited_account_hint.action": "Näita profilli sellegipoolest",
"limited_account_hint.title": "See profiil on peidetud {domain} moderaatorite poolt.",
"link_preview.author": "{name} poolt",
"link_preview.more_from_author": "Veel kasutajalt {name}",
"link_preview.shares": "{count, plural, one {{counter} postitus} other {{counter} postitust}}",
"lists.account.add": "Lisa nimekirja",
"lists.account.remove": "Eemalda nimekirjast",
"lists.delete": "Kustuta nimekiri",
@ -468,13 +475,22 @@
"notification.follow": "{name} alustas su jälgimist",
"notification.follow_request": "{name} soovib sind jälgida",
"notification.mention": "{name} mainis sind",
"notification.moderation-warning.learn_more": "Vaata lisa",
"notification.moderation_warning": "Said modereerimise hoiatuse",
"notification.moderation_warning.action_delete_statuses": "Mõni su postitus on eemaldatud.",
"notification.moderation_warning.action_disable": "Su konto on keelatud.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Mõni su postitustest on märgitud kui tundlik.",
"notification.moderation_warning.action_none": "Su konto on saanud modereerimise hoiatuse.",
"notification.moderation_warning.action_sensitive": "Su postitused märgitakse nüüdsest tundlikuks.",
"notification.moderation_warning.action_silence": "Su kontole pandi piirang.",
"notification.moderation_warning.action_suspend": "Su konto on peatatud.",
"notification.own_poll": "Su küsitlus on lõppenud",
"notification.poll": "Küsitlus, milles osalesid, on lõppenud",
"notification.reblog": "{name} jagas edasi postitust",
"notification.relationships_severance_event": "Kadunud ühendus kasutajaga {name}",
"notification.relationships_severance_event.account_suspension": "{from} admin on kustutanud {target}, mis tähendab, et sa ei saa enam neilt uuendusi või suhelda nendega.",
"notification.relationships_severance_event.domain_block": "{from} admin on blokeerinud {target}, sealhulgas {followersCount} sinu jälgijat ja {followingCount, plural, one {# konto} other {# kontot}}, mida jälgid.",
"notification.relationships_severance_event.learn_more": "Saa rohkem teada",
"notification.relationships_severance_event.learn_more": "Vaata lisa",
"notification.relationships_severance_event.user_domain_block": "Blokeerisid {target}, eemaldades oma jälgijate hulgast {followersCount} ja jälgitavate hulgast {followingCount, plural, one {# konto} other {# kontot}}.",
"notification.status": "{name} just postitas",
"notification.update": "{name} muutis postitust",
@ -680,13 +696,13 @@
"server_banner.about_active_users": "Inimesed, kes kasutavad seda serverit viimase 30 päeva jooksul (kuu aktiivsed kasutajad)",
"server_banner.active_users": "aktiivsed kasutajad",
"server_banner.administered_by": "Administraator:",
"server_banner.introduction": "{domain} on osa detsentraliseeritud sotsiaalvõrgustikust, mida võimaldab {mastodon}.",
"server_banner.learn_more": "Vaata täpsemalt",
"server_banner.is_one_of_many": "{domain} on üks paljudest sõltumatutest Mastodoni serveritest, mida saab fediversumis osalemiseks kasutada.",
"server_banner.server_stats": "Serveri statistika:",
"sign_in_banner.create_account": "Loo konto",
"sign_in_banner.follow_anyone": "Jälgi ükskõik keda kogu fediversumist ja näe kõike ajalises järjestuses. Ei mingeid algoritme, reklaame või klikipüüdjaid segamas.",
"sign_in_banner.mastodon_is": "Mastodon on parim viis olemaks kursis sellega, mis toimub.",
"sign_in_banner.sign_in": "Logi sisse",
"sign_in_banner.sso_redirect": "Sisene või registreeru",
"sign_in_banner.text": "Logi sisse, et jälgida profiile või silte, märkida lemmikuks, jagada ja vastata postitustele. Võid suhelda ka mõne teise serveri konto kaudu.",
"status.admin_account": "Ava @{name} moderaatorivaates",
"status.admin_domain": "Ava {domain} modeereerimisliides",
"status.admin_status": "Ava postitus moderaatorivaates",

View file

@ -692,13 +692,10 @@
"server_banner.about_active_users": "Azken 30 egunetan zerbitzari hau erabili duen jendea (hilabeteko erabiltzaile aktiboak)",
"server_banner.active_users": "erabiltzaile aktibo",
"server_banner.administered_by": "Administratzailea(k):",
"server_banner.introduction": "{domain} zerbitzaria {mastodon} erabiltzen duen sare sozial deszentralizatuko parte da.",
"server_banner.learn_more": "Ikasi gehiago",
"server_banner.server_stats": "Zerbitzariaren estatistikak:",
"sign_in_banner.create_account": "Sortu kontua",
"sign_in_banner.sign_in": "Hasi saioa",
"sign_in_banner.sso_redirect": "Hasi saioa edo izena eman",
"sign_in_banner.text": "Hasi saioa profilak edo traolak jarraitzeko, bidalketak gogokoetara gehitzeko, partekatzeko edo erantzuteko. Zure kontutik ere komunika zaitezke beste zerbitzari ezberdin batean.",
"status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
"status.admin_domain": "{domain}-(r)en moderazio-interfazea ireki",
"status.admin_status": "Ireki bidalketa hau moderazio interfazean",

View file

@ -620,13 +620,10 @@
"server_banner.about_active_users": "افرادی که در ۳۰ روز گذشته از این کارساز استفاده کرده‌اند (کاربران فعّال ماهانه)",
"server_banner.active_users": "کاربر فعّال",
"server_banner.administered_by": "به مدیریت:",
"server_banner.introduction": "{domain} بخشی از شبکهٔ اجتماعی نامتمرکزیست که از {mastodon} نیرو گرفته.",
"server_banner.learn_more": "بیش‌تر بیاموزید",
"server_banner.server_stats": "آمار کارساز:",
"sign_in_banner.create_account": "ایجاد حساب",
"sign_in_banner.sign_in": "ورود",
"sign_in_banner.sso_redirect": "ورود یا ثبت نام",
"sign_in_banner.text": "برای پی‌گیری نمایه‌ها یا برچسب‌ها، پسندیدن، هم‌رسانی و یا پاسخ به فرسته‌ها وارد شوید. همچنین می‌توانید این کارها را با حسابتان در کارسازی دیگر انجام دهید.",
"status.admin_account": "گشودن واسط مدیریت برای @{name}",
"status.admin_domain": "گشودن واسط مدیریت برای {domain}",
"status.admin_status": "گشودن این فرسته در واسط مدیریت",

View file

@ -96,7 +96,7 @@
"block_modal.they_cant_see_posts": "Hän ei voi enää nähdä julkaisujasi, etkä sinä voi nähdä hänen.",
"block_modal.they_will_know": "Hän voi nähdä, että hänet on estetty.",
"block_modal.title": "Estetäänkö käyttäjä?",
"block_modal.you_wont_see_mentions": "Et enää näe hänen julkaisujaan etkä voi seurata häntä.",
"block_modal.you_wont_see_mentions": "Et tule enää näkemään julkaisuja, joissa hänet mainitaan.",
"boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
"bundle_column_error.copy_stacktrace": "Kopioi virheraportti",
"bundle_column_error.error.body": "Pyydettyä sivua ei voitu hahmontaa. Se voi johtua virheestä koodissamme tai selaimen yhteensopivuudessa.",
@ -213,7 +213,7 @@
"domain_block_modal.block_account_instead": "Estä sen sijaan @{name}",
"domain_block_modal.they_can_interact_with_old_posts": "Ihmiset tältä palvelimelta eivät voi olla vuorovaikutuksessa vanhojen julkaisujesi kanssa.",
"domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.",
"domain_block_modal.they_wont_know": "Hän ei saa tietää, että hänet on estetty.",
"domain_block_modal.they_wont_know": "Hän ei saa ilmoitusta tulleensa estetyksi.",
"domain_block_modal.title": "Estetäänkö verkkotunnus?",
"domain_block_modal.you_will_lose_followers": "Kaikki seuraajasi tältä palvelimelta poistetaan.",
"domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.",
@ -266,7 +266,7 @@
"empty_column.list": "Tällä listalla ei ole vielä mitään. Kun tämän listan jäsenet lähettävät uusia julkaisuja, ne näkyvät tässä.",
"empty_column.lists": "Sinulla ei ole vielä yhtään listaa. Kun luot sellaisen, näkyy se tässä.",
"empty_column.mutes": "Et ole mykistänyt vielä yhtään käyttäjää.",
"empty_column.notification_requests": "Kaikki kunnossa! Täällä ei ole mitään. Kun saat uusia ilmoituksia, ne näkyvät täällä asetustesi mukaisesti.",
"empty_column.notification_requests": "Olet ajan tasalla! Täällä ei ole mitään uutta kerrottavaa. Kun saat uusia ilmoituksia, ne näkyvät täällä asetustesi mukaisesti.",
"empty_column.notifications": "Sinulla ei ole vielä ilmoituksia. Kun keskustelet muille, näet sen täällä.",
"empty_column.public": "Täällä ei ole mitään! Kirjoita jotain julkisesti. Voit myös seurata muiden palvelimien käyttäjiä",
"error.unexpected_crash.explanation": "Sivua ei voida näyttää oikein ohjelmointivirheen tai selaimen yhteensopivuusvajeen vuoksi.",
@ -308,7 +308,7 @@
"follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, palvelimen {domain} ylläpito on arvioinut, että saatat olla halukas tarkistamaan nämä seuraamispyynnöt erikseen.",
"follow_suggestions.curated_suggestion": "Ehdotus ylläpidolta",
"follow_suggestions.dismiss": "Älä näytä uudelleen",
"follow_suggestions.featured_longer": "Valinnut käsin palvelimen {domain} tiimi",
"follow_suggestions.featured_longer": "Palvelimen {domain} tiimin poimintoja",
"follow_suggestions.friends_of_friends_longer": "Suosittu seuraamiesi ihmisten keskuudessa",
"follow_suggestions.hints.featured": "Tämän profiilin on valinnut palvelimen {domain} tiimi.",
"follow_suggestions.hints.friends_of_friends": "Seuraamasi käyttäjät suosivat tätä profiilia.",
@ -415,6 +415,7 @@
"limited_account_hint.title": "Palvelimen {domain} valvojat ovat piilottaneet tämän käyttäjätilin.",
"link_preview.author": "Julkaissut {name}",
"link_preview.more_from_author": "Lisää käyttäjältä {name}",
"link_preview.shares": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}",
"lists.account.add": "Lisää listalle",
"lists.account.remove": "Poista listalta",
"lists.delete": "Poista lista",
@ -434,13 +435,13 @@
"media_gallery.toggle_visible": "{number, plural, one {Piilota kuva} other {Piilota kuvat}}",
"moved_to_account_banner.text": "Tilisi {disabledAccount} on tällä hetkellä poissa käytöstä, koska teit siirron tiliin {movedToAccount}.",
"mute_modal.hide_from_notifications": "Piilota ilmoituksista",
"mute_modal.hide_options": "Piilota valinnat",
"mute_modal.indefinite": "Kunnes poistan mykistyksen häneltä",
"mute_modal.show_options": "Näytä valinnat",
"mute_modal.hide_options": "Piilota vaihtoehdot",
"mute_modal.indefinite": "Kunnes perun häntä koskevan mykistyksen",
"mute_modal.show_options": "Näytä vaihtoehdot",
"mute_modal.they_can_mention_and_follow": "Hän voi mainita sinut ja seurata sinua, mutta sinä et näe häntä.",
"mute_modal.they_wont_know": "Hän ei saa tietää, että hänet on mykistetty.",
"mute_modal.they_wont_know": "Hän ei saa ilmoitusta tulleensa mykistetyksi.",
"mute_modal.title": "Mykistetäänkö käyttäjä?",
"mute_modal.you_wont_see_mentions": "Et enää näe julkaisuja, joissa hänet mainitaan.",
"mute_modal.you_wont_see_mentions": "Et tule enää näkemään julkaisuja, joissa hänet mainitaan.",
"mute_modal.you_wont_see_posts": "Hän voi yhä nähdä julkaisusi, mutta sinä et näe hänen.",
"navigation_bar.about": "Tietoja",
"navigation_bar.advanced_interface": "Avaa edistyneessä selainkäyttöliittymässä",
@ -530,11 +531,11 @@
"notifications.permission_denied": "Työpöytäilmoitukset eivät ole käytettävissä, koska selaimen käyttöoikeuspyyntö on aiemmin evätty",
"notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin estetty",
"notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa lupaa ei ole myönnetty.",
"notifications.policy.filter_new_accounts.hint": "Luotu {days, plural, one {viime päivänä} other {viimeisenä # päivänä}}",
"notifications.policy.filter_new_accounts.hint": "Luotu {days, plural, one {viimeisimmän päivän aikana} other {# viime päivän aikana}}",
"notifications.policy.filter_new_accounts_title": "Uudet tilit",
"notifications.policy.filter_not_followers_hint": "Mukaan lukien ne, jotka ovat seuranneet sinua vähemmän kuin {days, plural, one {päivän} other {# päivää}}",
"notifications.policy.filter_not_followers_hint": "Mukaan lukien alle {days, plural, one {päivän} other {# päivän}} verran sinua seuranneet",
"notifications.policy.filter_not_followers_title": "Henkilöt, jotka eivät seuraa sinua",
"notifications.policy.filter_not_following_hint": "Kunnes hyväksyt ne manuaalisesti",
"notifications.policy.filter_not_following_hint": "Kunnes hyväksyt ne omin käsin",
"notifications.policy.filter_not_following_title": "Henkilöt, joita et seuraa",
"notifications.policy.filter_private_mentions_hint": "Suodatetaan, ellei se vastaa omaan mainintaasi tai ellet seuraa lähettäjää",
"notifications.policy.filter_private_mentions_title": "Ei-toivotut yksityismaininnat",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Palvelimen käyttäjät viimeisten 30 päivän ajalta (kuukauden aktiiviset käyttäjät)",
"server_banner.active_users": "aktiivista käyttäjää",
"server_banner.administered_by": "Ylläpitäjä:",
"server_banner.introduction": "{domain} kuuluu hajautettuun sosiaaliseen verkostoon, jonka voimanlähde on {mastodon}.",
"server_banner.learn_more": "Lue lisää",
"server_banner.is_one_of_many": "{domain} on yksi monista itsenäisistä Mastodon-palvelimista, joiden välityksellä voit toimia fediversumissa.",
"server_banner.server_stats": "Palvelimen tilastot:",
"sign_in_banner.create_account": "Luo tili",
"sign_in_banner.follow_anyone": "Seuraa kenen tahansa julkaisuja fediversumissa ja näe ne kaikki aikajärjestyksessä. Ei algoritmejä, mainoksia tai klikkikalastelua.",
"sign_in_banner.mastodon_is": "Mastodon on paras tapa pysyä ajan tasalla siitä, mitä ympärillä tapahtuu.",
"sign_in_banner.sign_in": "Kirjaudu",
"sign_in_banner.sso_redirect": "Kirjaudu tai rekisteröidy",
"sign_in_banner.text": "Kirjaudu sisään, niin voit seurata profiileja tai aihetunnisteita, lisätä julkaisuja suosikkeihin, jakaa julkaisuja ja vastata niihin. Voit olla vuorovaikutuksessa myös eri palvelimella olevalta tililtäsi.",
"status.admin_account": "Avaa tilin @{name} valvontanäkymä",
"status.admin_domain": "Avaa palvelimen {domain} valvontanäkymä",
"status.admin_status": "Avaa julkaisu valvontanäkymässä",

View file

@ -308,7 +308,6 @@
"search_popout.recent": "Kamakailang mga paghahanap",
"search_results.all": "Lahat",
"search_results.see_all": "Ipakita lahat",
"server_banner.learn_more": "Matuto nang higit pa",
"server_banner.server_stats": "Katayuan ng serbiro:",
"status.block": "Harangan si @{name}",
"status.delete": "Tanggalin",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Hesin vangin er fjaldur av kjakleiðarunum á {domain}.",
"link_preview.author": "Av {name}",
"link_preview.more_from_author": "Meira frá {name}",
"link_preview.shares": "{count, plural, one {{counter} postur} other {{counter} postar}}",
"lists.account.add": "Legg afturat lista",
"lists.account.remove": "Tak av lista",
"lists.delete": "Strika lista",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Fólk, sum hava brúkt hendan ambætaran seinastu 30 dagarnar (mánaðarligir virknir brúkarar)",
"server_banner.active_users": "virknir brúkarar",
"server_banner.administered_by": "Umsitari:",
"server_banner.introduction": "{domain} er partur av desentrala sosiala netverkinum, sum er drivið av {mastodon}.",
"server_banner.learn_more": "Lær meira",
"server_banner.is_one_of_many": "{domain} er ein av nógvum óheftum Mastodon ambætarum, sum tú kanst brúka at luttaka í fediversinum.",
"server_banner.server_stats": "Ambætarahagtøl:",
"sign_in_banner.create_account": "Stovna kontu",
"sign_in_banner.follow_anyone": "Fylg ein og hvønn í fediversinum og síggj alt í tíðarrøð. Ongar algoritmur, ongar lýsingar og einki klikkbeit í eygsjón.",
"sign_in_banner.mastodon_is": "Mastodon er best mátin at fylgja við í tí, sum hendir.",
"sign_in_banner.sign_in": "Rita inn",
"sign_in_banner.sso_redirect": "Rita inn ella Skráset teg",
"sign_in_banner.text": "Innrita fyri at fylgja vangum og frámerkjum, dáma, deila og svara postum. Tú kanst eisini brúka kontuna til at samvirka á einum øðrum ambætara.",
"status.admin_account": "Lat kjakleiðaramarkamót upp fyri @{name}",
"status.admin_domain": "Lat umsjónarmarkamót upp fyri {domain}",
"status.admin_status": "Lat hendan postin upp í kjakleiðaramarkamótinum",

View file

@ -680,13 +680,10 @@
"server_banner.about_active_users": "Personnes utilisant ce serveur au cours des 30 derniers jours (Comptes actifs mensuellement)",
"server_banner.active_users": "comptes actifs",
"server_banner.administered_by": "Administré par:",
"server_banner.introduction": "{domain} fait partie du réseau social décentralisé propulsé par {mastodon}.",
"server_banner.learn_more": "En savoir plus",
"server_banner.server_stats": "Statistiques du serveur:",
"sign_in_banner.create_account": "Créer un compte",
"sign_in_banner.sign_in": "Se connecter",
"sign_in_banner.sso_redirect": "Se connecter ou sinscrire",
"sign_in_banner.text": "Identifiez-vous pour suivre des profils ou des hashtags, ajouter des favoris, partager et répondre à des publications. Vous pouvez également interagir depuis votre compte sur un autre serveur.",
"status.admin_account": "Ouvrir linterface de modération pour @{name}",
"status.admin_domain": "Ouvrir linterface de modération pour {domain}",
"status.admin_status": "Ouvrir ce message dans linterface de modération",

View file

@ -680,13 +680,10 @@
"server_banner.about_active_users": "Personnes utilisant ce serveur au cours des 30 derniers jours (Comptes actifs mensuellement)",
"server_banner.active_users": "comptes actifs",
"server_banner.administered_by": "Administré par :",
"server_banner.introduction": "{domain} fait partie du réseau social décentralisé propulsé par {mastodon}.",
"server_banner.learn_more": "En savoir plus",
"server_banner.server_stats": "Statistiques du serveur :",
"sign_in_banner.create_account": "Créer un compte",
"sign_in_banner.sign_in": "Se connecter",
"sign_in_banner.sso_redirect": "Se connecter ou sinscrire",
"sign_in_banner.text": "Identifiez-vous pour suivre des profils ou des hashtags, ajouter des favoris, partager et répondre à des messages. Vous pouvez également interagir depuis votre compte sur un autre serveur.",
"status.admin_account": "Ouvrir linterface de modération pour @{name}",
"status.admin_domain": "Ouvrir linterface de modération pour {domain}",
"status.admin_status": "Ouvrir ce message dans linterface de modération",

View file

@ -655,13 +655,10 @@
"server_banner.about_active_users": "Oantal brûkers yn de ôfrûne 30 dagen (MAU)",
"server_banner.active_users": "warbere brûkers",
"server_banner.administered_by": "Beheard troch:",
"server_banner.introduction": "{domain} is ûnderdiel fan it desintralisearre sosjale netwurk {mastodon}.",
"server_banner.learn_more": "Mear ynfo",
"server_banner.server_stats": "Serverstatistiken:",
"sign_in_banner.create_account": "Account registrearje",
"sign_in_banner.sign_in": "Oanmelde",
"sign_in_banner.sso_redirect": "Oanmelde of Registrearje",
"sign_in_banner.text": "Meld jo oan, om profilen of hashtags te folgjen, berjochten favoryt te meitsjen, te dielen en te beäntwurdzjen of om fan jo account út op in oare server mei oaren ynteraksje te hawwen.",
"status.admin_account": "Moderaasje-omjouwing fan @{name} iepenje",
"status.admin_domain": "Moderaasje-omjouwing fan {domain} iepenje",
"status.admin_status": "Open this status in the moderation interface",

View file

@ -438,7 +438,6 @@
"search_results.statuses": "Postálacha",
"search_results.title": "Cuardaigh ar thóir {q}",
"server_banner.active_users": "úsáideoirí gníomhacha",
"server_banner.learn_more": "Tuilleadh eolais",
"server_banner.server_stats": "Staitisticí freastalaí:",
"sign_in_banner.create_account": "Cruthaigh cuntas",
"sign_in_banner.sign_in": "Sinigh isteach",

View file

@ -684,13 +684,10 @@
"server_banner.about_active_users": "Daoine a chleachd am frithealaiche seo rè an 30 latha mu dheireadh (Cleachdaichean gnìomhach gach mìos)",
"server_banner.active_users": "cleachdaichean gnìomhach",
"server_banner.administered_by": "Rianachd le:",
"server_banner.introduction": "Tha {domain} am measg an lìonraidh shòisealta sgaoilte le cumhachd {mastodon}.",
"server_banner.learn_more": "Barrachd fiosrachaidh",
"server_banner.server_stats": "Stadastaireachd an fhrithealaiche:",
"sign_in_banner.create_account": "Cruthaich cunntas",
"sign_in_banner.sign_in": "Clàraich a-steach",
"sign_in_banner.sso_redirect": "Clàraich a-steach no clàraich leinn",
"sign_in_banner.text": "Clàraich a-steach a leantainn phròifilean no thagaichean hais, a cur postaichean ris na h-annsachdan s gan co-roinneadh is freagairt dhaibh. S urrainn dhut gnìomh a ghabhail le cunntas o fhrithealaiche eile cuideachd.",
"status.admin_account": "Fosgail eadar-aghaidh na maorsainneachd dha @{name}",
"status.admin_domain": "Fosgail eadar-aghaidh na maorsainneachd dha {domain}",
"status.admin_status": "Fosgail am post seo ann an eadar-aghaidh na maorsainneachd",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Este perfil foi agochado pola moderación de {domain}.",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Máis de {name}",
"link_preview.shares": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}",
"lists.account.add": "Engadir á listaxe",
"lists.account.remove": "Eliminar da listaxe",
"lists.delete": "Eliminar listaxe",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Persoas que usaron este servidor nos últimos 30 días (Usuarias Activas Mensuais)",
"server_banner.active_users": "usuarias activas",
"server_banner.administered_by": "Administrada por:",
"server_banner.introduction": "{domain} é parte da rede social descentralizada que funciona grazas a {mastodon}.",
"server_banner.learn_more": "Saber máis",
"server_banner.is_one_of_many": "{domain} é un dos moitos servidores Mastodon independentes que podes usar para participar do Fediverso.",
"server_banner.server_stats": "Estatísticas do servidor:",
"sign_in_banner.create_account": "Crear conta",
"sign_in_banner.follow_anyone": "Sigue a quen queiras no Fediverso e le as publicacións en orde cronolóxica. Sen algoritmos, publicidade nin titulares engañosos.",
"sign_in_banner.mastodon_is": "Mastodon é o mellor xeito de estar ao día do que acontece.",
"sign_in_banner.sign_in": "Iniciar sesión",
"sign_in_banner.sso_redirect": "Acceder ou Crear conta",
"sign_in_banner.text": "Inicia sesión para seguir perfís ou cancelos, marcar como favorita e responder a publicacións. Tamén podes interactuar coa túa conta noutro servidor.",
"status.admin_account": "Abrir interface de moderación para @{name}",
"status.admin_domain": "Abrir interface de moderación para {domain}",
"status.admin_status": "Abrir esta publicación na interface de moderación",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.",
"link_preview.author": "מאת {name}",
"link_preview.more_from_author": "עוד מאת {name}",
"link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
"lists.account.add": "הוסף לרשימה",
"lists.account.remove": "הסר מרשימה",
"lists.delete": "מחיקת רשימה",
@ -695,13 +696,10 @@
"server_banner.about_active_users": "משתמשים פעילים בשרת ב־30 הימים האחרונים (משתמשים פעילים חודשיים)",
"server_banner.active_users": "משתמשים פעילים",
"server_banner.administered_by": "מנוהל ע\"י:",
"server_banner.introduction": "{domain} הוא שרת ברשת המבוזרת {mastodon}.",
"server_banner.learn_more": "מידע נוסף",
"server_banner.server_stats": "סטטיסטיקות שרת:",
"sign_in_banner.create_account": "יצירת חשבון",
"sign_in_banner.sign_in": "התחברות",
"sign_in_banner.sso_redirect": "התחברות/הרשמה",
"sign_in_banner.text": "יש להתחבר כדי לעקוב אחרי משתמשים או תגיות, לחבב, לשתף ולענות להודעות. ניתן גם לתקשר מהחשבון שלך עם שרת אחר.",
"status.admin_account": "פתח/י ממשק ניהול עבור @{name}",
"status.admin_domain": "פתיחת ממשק ניהול עבור {domain}",
"status.admin_status": "Open this status in the moderation interface",

View file

@ -455,8 +455,6 @@
"server_banner.about_active_users": "Popis aktivnih korisnika prošli mjesec",
"server_banner.active_users": "aktivni korisnici",
"server_banner.administered_by": "Administrator je:",
"server_banner.introduction": "{domain} je dio decentralizirane socijalne mreže koju pokreće {mastodon}.",
"server_banner.learn_more": "Saznaj više",
"server_banner.server_stats": "Statistike poslužitelja:",
"sign_in_banner.create_account": "Stvori račun",
"sign_in_banner.sign_in": "Prijavi se",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Ezt a profilt {domain} moderátorai elrejtették.",
"link_preview.author": "{name} szerint",
"link_preview.more_from_author": "Több tőle: {name}",
"link_preview.shares": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}",
"lists.account.add": "Hozzáadás a listához",
"lists.account.remove": "Eltávolítás a listából",
"lists.delete": "Lista törlése",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Az elmúlt 30 napban ezt a kiszolgálót használók száma (Havi aktív felhasználók)",
"server_banner.active_users": "aktív felhasználó",
"server_banner.administered_by": "Adminisztrátor:",
"server_banner.introduction": "{domain} része egy decentralizált közösségi hálónak, melyet a {mastodon} hajt meg.",
"server_banner.learn_more": "Tudj meg többet",
"server_banner.is_one_of_many": "{domain} egy a jelentős, független Mastodon kiszolgálók közül, melyet a fediverzumban való részvételre használhatsz.",
"server_banner.server_stats": "Kiszolgálóstatisztika:",
"sign_in_banner.create_account": "Fiók létrehozása",
"sign_in_banner.follow_anyone": "Kövess bárkit a fediverzumon keresztül, és láss mindent időrendi sorrendben. Algoritmusok, hirdetések, kattintásvadászat nélkül.",
"sign_in_banner.mastodon_is": "A Mastodon a legjobb módja annak, hogy a történésekkel kapcsolatban naprakész maradj.",
"sign_in_banner.sign_in": "Bejelentkezés",
"sign_in_banner.sso_redirect": "Bejelentkezés vagy regisztráció",
"sign_in_banner.text": "Jelentkezz be profilok vagy hashtagek követéséhez, kedvencnek jelöléséhez, bejegyzések megosztásához, megválaszolásához. A fiókodból más kiszolgálókon is kommunikálhatsz.",
"status.admin_account": "Moderációs felület megnyitása @{name} fiókhoz",
"status.admin_domain": "Moderációs felület megnyitása {domain} esetében",
"status.admin_status": "Bejegyzés megnyitása a moderációs felületen",

View file

@ -441,8 +441,6 @@
"search_results.title": "Որոնել {q}-ն",
"server_banner.active_users": "ակտիւ մարդիկ",
"server_banner.administered_by": "Կառաւարող",
"server_banner.introduction": "{domain}-ը հանդիասնում է ապակենտրոն սոց. ցանցի մաս, ստեղծուած {mastodon}-ով։\n",
"server_banner.learn_more": "Իմանալ աւելին",
"server_banner.server_stats": "Սերուերի վիճակը",
"sign_in_banner.create_account": "Ստեղծել հաշիւ",
"sign_in_banner.sign_in": "Մուտք",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Iste profilo ha essite celate per le moderatores de {domain}.",
"link_preview.author": "Per {name}",
"link_preview.more_from_author": "Plus de {name}",
"link_preview.shares": "{count, plural, one {{counter} message} other {{counter} messages}}",
"lists.account.add": "Adder al lista",
"lists.account.remove": "Remover del lista",
"lists.delete": "Deler lista",
@ -695,13 +696,12 @@
"server_banner.about_active_users": "Personas que ha usate iste servitor in le ultime 30 dies (usatores active per mense)",
"server_banner.active_users": "usatores active",
"server_banner.administered_by": "Administrate per:",
"server_banner.introduction": "{domain} face parte del rete social decentralisate actionate per {mastodon}.",
"server_banner.learn_more": "Apprender plus",
"server_banner.is_one_of_many": "{domain} es un de multe servitores independente de Mastodon que tu pote usar pro participar in le fediverso.",
"server_banner.server_stats": "Statos del servitor:",
"sign_in_banner.create_account": "Crear un conto",
"sign_in_banner.mastodon_is": "Mastodon es le melior maniera de sequer lo que passa.",
"sign_in_banner.sign_in": "Aperir session",
"sign_in_banner.sso_redirect": "Aperir session o crear conto",
"sign_in_banner.text": "Aperi session pro sequer profilos o hashtags, marcar messages como favorite, e condivider e responder a messages. Tu pote etiam interager desde tu conto sur un altere servitor.",
"status.admin_account": "Aperir le interfacie de moderation pro @{name}",
"status.admin_domain": "Aperir le interfacie de moderation pro {domain}",
"status.admin_status": "Aperir iste message in le interfacie de moderation",

View file

@ -565,8 +565,6 @@
"server_banner.about_active_users": "Orang menggunakan server ini selama 30 hari terakhir (Pengguna Aktif Bulanan)",
"server_banner.active_users": "pengguna aktif",
"server_banner.administered_by": "Dikelola oleh:",
"server_banner.introduction": "{domain} adalah bagian dari jaringan sosial terdesentralisasi yang diberdayakan oleh {mastodon}.",
"server_banner.learn_more": "Pelajari lebih lanjut",
"server_banner.server_stats": "Statistik server:",
"sign_in_banner.create_account": "Buat akun",
"sign_in_banner.sign_in": "Masuk",

View file

@ -694,13 +694,10 @@
"server_banner.about_active_users": "Gente usant ti-ci servitor durant li ultim 30 dies (Mensual Activ Usatores)",
"server_banner.active_users": "activ usatores",
"server_banner.administered_by": "Administrat de:",
"server_banner.introduction": "{domain} es un part del decentralisat social retage constructet sur {mastodon}.",
"server_banner.learn_more": "Aprender plu",
"server_banner.server_stats": "Statisticas pri li servitor:",
"sign_in_banner.create_account": "Crear un conto",
"sign_in_banner.sign_in": "Intrar",
"sign_in_banner.sso_redirect": "Intrar o registrar se",
"sign_in_banner.text": "Intrar por sequer profiles o hashtags, favoritisar, partir e responder a postas. Tu posse anc interacter per tui conto che un diferent servitor.",
"status.admin_account": "Aperter interfacie de moderation por @{name}",
"status.admin_domain": "Aperter interfacie de moderation por {domain}",
"status.admin_status": "Aperter ti-ci posta in li interfacie de moderation",

View file

@ -132,7 +132,6 @@
"report_notification.categories.other": "Ọzọ",
"search.placeholder": "Chọọ",
"server_banner.active_users": "ojiarụ dị ìrè",
"server_banner.learn_more": "Mụtakwuo",
"sign_in_banner.sign_in": "Sign in",
"status.admin_status": "Open this status in the moderation interface",
"status.bookmark": "Kee ebenrụtụakā",

View file

@ -582,13 +582,10 @@
"server_banner.about_active_users": "Personi quo uzas ca servilo dum antea 30 dii (monate aktiva uzanti)",
"server_banner.active_users": "aktiva uzanti",
"server_banner.administered_by": "Administresis da:",
"server_banner.introduction": "{domain} esas parto di necentraligita sociala ret quo povizesas da {mastodon}.",
"server_banner.learn_more": "Lernez plue",
"server_banner.server_stats": "Servilstatistiko:",
"sign_in_banner.create_account": "Kreez konto",
"sign_in_banner.sign_in": "Enirez",
"sign_in_banner.sso_redirect": "Enirar o krear konto",
"sign_in_banner.text": "Enirez por sequar profili o hashtagi, favorizar, partigar e respondizar posti. On povas anke interagar de vua konto kun diferanta servilo.",
"status.admin_account": "Apertez jerintervizajo por @{name}",
"status.admin_domain": "Apertez jerintervizajo por {domain}",
"status.admin_status": "Open this status in the moderation interface",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.",
"link_preview.author": "Eftir {name}",
"link_preview.more_from_author": "Meira frá {name}",
"link_preview.shares": "{count, plural, one {{counter} færsla} other {{counter} færslur}}",
"lists.account.add": "Bæta á lista",
"lists.account.remove": "Fjarlægja af lista",
"lists.delete": "Eyða lista",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Folk sem hefur notað þennan netþjón síðustu 30 daga (virkir notendur í mánuðinum)",
"server_banner.active_users": "virkir notendur",
"server_banner.administered_by": "Stýrt af:",
"server_banner.introduction": "{domain} er hluti af dreifhýsta samfélagsnetinu sem keyrt er af {mastodon}.",
"server_banner.learn_more": "Kanna nánar",
"server_banner.is_one_of_many": "{domain} er einn af fjölmörgum óháðum Mastodon-þjónum sem þú getur notað til að taka þátt í fediverse-samfélaginu.",
"server_banner.server_stats": "Tölfræði þjóns:",
"sign_in_banner.create_account": "Búa til notandaaðgang",
"sign_in_banner.follow_anyone": "Fylgstu með hverjum sem er í þessum samtvinnaða heimi og skoðaðu allt í tímaröð. Engin reiknirit, auglýsingar eða smellbeitur.",
"sign_in_banner.mastodon_is": "Mastodon er besta leiðin til að fylgjast með hvað sé í gangi.",
"sign_in_banner.sign_in": "Skrá inn",
"sign_in_banner.sso_redirect": "Skrá inn eða nýskrá",
"sign_in_banner.text": "Skráðu þig inn til að fylgjast með notendum eða myllumerkjum, svara færslum, deila þeim eða setja í eftirlæti. Þú getur einnig átt í samskiptum á aðgangnum þínum á öðrum netþjónum.",
"status.admin_account": "Opna umsjónarviðmót fyrir @{name}",
"status.admin_domain": "Opna umsjónarviðmót fyrir @{domain}",
"status.admin_status": "Opna þessa færslu í umsjónarviðmótinu",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Questo profilo è stato nascosto dai moderatori di {domain}.",
"link_preview.author": "Di {name}",
"link_preview.more_from_author": "Altro da {name}",
"link_preview.shares": "{count, plural, one {{counter} post} other {{counter} post}}",
"lists.account.add": "Aggiungi all'elenco",
"lists.account.remove": "Rimuovi dall'elenco",
"lists.delete": "Elimina elenco",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Persone che hanno utilizzato questo server negli ultimi 30 giorni (Utenti Attivi Mensilmente)",
"server_banner.active_users": "utenti attivi",
"server_banner.administered_by": "Amministrato da:",
"server_banner.introduction": "{domain} è parte del social network decentralizzato, sviluppato da {mastodon}.",
"server_banner.learn_more": "Scopri di più",
"server_banner.is_one_of_many": "{domain} è uno dei tanti server Mastodon indipendenti che puoi usare per partecipare al fediverso.",
"server_banner.server_stats": "Statistiche del server:",
"sign_in_banner.create_account": "Crea un profilo",
"sign_in_banner.follow_anyone": "Segui chiunque nel fediverso e vedi tutto in ordine cronologico. Nessun algoritmo, annunci o clickbait in vista.",
"sign_in_banner.mastodon_is": "Mastodon è il modo migliore per tenere il passo con quello che sta accadendo.",
"sign_in_banner.sign_in": "Accedi",
"sign_in_banner.sso_redirect": "Accedi o Registrati",
"sign_in_banner.text": "Accedi per seguire profili o hashtag, condividere, rispondere e aggiungere post ai preferiti. Puoi anche interagire dal tuo account su un server diverso.",
"status.admin_account": "Apri interfaccia di moderazione per @{name}",
"status.admin_domain": "Apri l'interfaccia di moderazione per {domain}",
"status.admin_status": "Apri questo post nell'interfaccia di moderazione",

View file

@ -694,13 +694,10 @@
"server_banner.about_active_users": "過去30日間にこのサーバーを使用している人 (月間アクティブユーザー)",
"server_banner.active_users": "人のアクティブユーザー",
"server_banner.administered_by": "管理者",
"server_banner.introduction": "{domain}は{mastodon}を使った分散型ソーシャルネットワークの一部です。",
"server_banner.learn_more": "もっと詳しく",
"server_banner.server_stats": "サーバーの情報",
"sign_in_banner.create_account": "アカウント作成",
"sign_in_banner.sign_in": "ログイン",
"sign_in_banner.sso_redirect": "ログインまたは登録",
"sign_in_banner.text": "アカウントがあればユーザーやハッシュタグをフォローしたり、投稿のお気に入り登録やブースト、投稿への返信ができます。別のサーバーのユーザーとの交流も可能です。",
"status.admin_account": "@{name}さんのモデレーション画面を開く",
"status.admin_domain": "{domain}のモデレーション画面を開く",
"status.admin_status": "この投稿をモデレーション画面で開く",

View file

@ -509,7 +509,6 @@
"search_results.statuses": "Tisuffaɣ",
"search_results.title": "Anadi ɣef {q}",
"server_banner.administered_by": "Yettwadbel sɣur :",
"server_banner.learn_more": "Issin ugar",
"sign_in_banner.create_account": "Snulfu-d amiḍan",
"sign_in_banner.sign_in": "Qqen",
"sign_in_banner.sso_redirect": "Qqen neɣ jerred",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "이 프로필은 {domain}의 중재자에 의해 숨겨진 상태입니다.",
"link_preview.author": "{name}",
"link_preview.more_from_author": "{name} 프로필 보기",
"link_preview.shares": "{count, plural, other {{counter} 개의 게시물}}",
"lists.account.add": "리스트에 추가",
"lists.account.remove": "리스트에서 제거",
"lists.delete": "리스트 삭제",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "30일 동안 이 서버를 사용한 사람들 (월간 활성 이용자)",
"server_banner.active_users": "활성 사용자",
"server_banner.administered_by": "관리자:",
"server_banner.introduction": "{domain}은 마스토돈으로 운영되는 탈중앙화 된 소셜 네트워크의 일부입니다.",
"server_banner.learn_more": "더 알아보기",
"server_banner.is_one_of_many": "{domain}은 페디버스를 통해 참여할 수 있는 많은 마스토돈 서버들 중 하나입니다",
"server_banner.server_stats": "서버 통계:",
"sign_in_banner.create_account": "계정 생성",
"sign_in_banner.follow_anyone": "페디버스를 통해 누구든지 팔로우하고 시간순으로 게시물을 받아보세요. 알고리즘도, 광고도, 클릭을 유도하는 것들도 없습니다.",
"sign_in_banner.mastodon_is": "마스토돈은 무엇이 일어나는지 받아보는 가장 좋은 수단입니다.",
"sign_in_banner.sign_in": "로그인",
"sign_in_banner.sso_redirect": "로그인 또는 가입하기",
"sign_in_banner.text": "로그인을 통해 프로필이나 해시태그를 팔로우하거나 마음에 들어하거나 공유하고 답글을 달 수 있습니다. 다른 서버에 있는 본인의 계정을 통해 참여할 수도 있습니다.",
"status.admin_account": "@{name}에 대한 중재 화면 열기",
"status.admin_domain": "{domain}에 대한 중재 화면 열기",
"status.admin_status": "중재 화면에서 이 게시물 열기",

View file

@ -492,8 +492,6 @@
"server_banner.about_active_users": "Kesên ku di van 30 rojên dawî de vê rajekarê bi kar tînin (Bikarhênerên Çalak ên Mehane)",
"server_banner.active_users": "bikarhênerên çalak",
"server_banner.administered_by": "Tê bi rêvebirin ji aliyê:",
"server_banner.introduction": "{domain} beşek ji tora civakî ya nenavendî ye bi hêzdariya {mastodon}.",
"server_banner.learn_more": "Bêtir fêr bibe",
"server_banner.server_stats": "Amarên rajekar:",
"sign_in_banner.create_account": "Ajimêr biafirîne",
"sign_in_banner.sign_in": "Têkeve",

View file

@ -220,8 +220,6 @@
"search_results.all": "Omnis",
"server_banner.active_users": "Usūrāriī āctīvī",
"server_banner.administered_by": "Administratur:",
"server_banner.introduction": "{domain} pars est de rete sociali decentralizato a {mastodon} propulsato.",
"server_banner.learn_more": "Discere plura",
"sign_in_banner.sign_in": "Sign in",
"status.admin_status": "Open this status in the moderation interface",
"status.block": "Impedire @{name}",

View file

@ -666,13 +666,10 @@
"server_banner.about_active_users": "Utilizadores aktivos en este sirvidor durante los ultimos 30 diyas (utilizadores aktivos mensuales)",
"server_banner.active_users": "utilizadores aktivos",
"server_banner.administered_by": "Administrado por:",
"server_banner.introduction": "{domain} es parte de la red sosyala desentralizada liderada por {mastodon}.",
"server_banner.learn_more": "Ambezate mas",
"server_banner.server_stats": "Estatistikas del sirvidor:",
"sign_in_banner.create_account": "Kriya kuento",
"sign_in_banner.sign_in": "Konektate",
"sign_in_banner.sso_redirect": "Konektate o enrejistrate",
"sign_in_banner.text": "Konektate para segir prefiles o etiketas, partajar publikasyones, arispondir a eyas i markar ke te plazen. Puedes tambyen enteraktuar dizde tu kuento en un sirvidor desferente.",
"status.admin_account": "Avre la enterfaz de moderasyon para @{name}",
"status.admin_domain": "Avre la enterfaz de moderasyon para @{domain}",
"status.admin_status": "Avre esto en la enterfaz de moderasyon",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Šį profilį paslėpė {domain} prižiūrėtojai.",
"link_preview.author": "Sukūrė {name}",
"link_preview.more_from_author": "Daugiau iš {name}",
"link_preview.shares": "{count, plural, one {{counter} įrašas} few {{counter} įrašai} many {{counter} įrašo} other {{counter} įrašų}}",
"lists.account.add": "Pridėti į sąrašą",
"lists.account.remove": "Pašalinti iš sąrašo",
"lists.delete": "Ištrinti sąrašą",
@ -690,13 +691,13 @@
"server_banner.about_active_users": "Žmonės, kurie naudojosi šiuo serveriu per pastarąsias 30 dienų (mėnesio aktyvūs naudotojai)",
"server_banner.active_users": "aktyvūs naudotojai",
"server_banner.administered_by": "Administruoja:",
"server_banner.introduction": "{domain} decentralizuoto socialinio tinklo dalis, kurį palaiko {mastodon}.",
"server_banner.learn_more": "Sužinoti daugiau",
"server_banner.is_one_of_many": "{domain} tai vienas iš daugelio nepriklausomų „Mastodon“ serverių, kuriuos gali naudoti fediverse.",
"server_banner.server_stats": "Serverio statistika:",
"sign_in_banner.create_account": "Sukurti paskyrą",
"sign_in_banner.follow_anyone": "Sek bet kurį asmenį visoje fediverse ir žiūrėk viską chronologine tvarka. Jokių algoritmų, reklamų ar paspaudimų.",
"sign_in_banner.mastodon_is": "„Mastodon“ tai geriausias būdas sekti, kas vyksta.",
"sign_in_banner.sign_in": "Prisijungimas",
"sign_in_banner.sso_redirect": "Prisijungti arba užsiregistruoti",
"sign_in_banner.text": "Prisijunk, kad galėtum sekti profilius arba saitažodžius, mėgsti, bendrinti ir atsakyti į įrašus. Taip pat gali bendrauti iš savo paskyros kitame serveryje.",
"status.admin_account": "Atidaryti prižiūrėjimo sąsają @{name}",
"status.admin_domain": "Atidaryti prižiūrėjimo sąsają {domain}",
"status.admin_status": "Atidaryti šį įrašą prižiūrėjimo sąsajoje",

View file

@ -642,13 +642,10 @@
"server_banner.about_active_users": "Cilvēki, kas izmantojuši šo serveri pēdējo 30 dienu laikā (aktīvie lietotāji mēnesī)",
"server_banner.active_users": "aktīvi lietotāji",
"server_banner.administered_by": "Pārvalda:",
"server_banner.introduction": "{domain} ir daļa no decentralizētā sociālā tīkla, ko nodrošina {mastodon}.",
"server_banner.learn_more": "Uzzināt vairāk",
"server_banner.server_stats": "Servera statistika:",
"sign_in_banner.create_account": "Izveidot kontu",
"sign_in_banner.sign_in": "Pieteikties",
"sign_in_banner.sso_redirect": "Piesakies vai Reģistrējies",
"sign_in_banner.text": "Jāpiesakās, lai sekotu profiliem vai tēmturiem, pievienotu izlasei, kopīgotu ierakstus un atbildētu uz tiem. Vari arī mijiedarboties ar savu kontu citā serverī.",
"status.admin_account": "Atvērt @{name} moderēšanas saskarni",
"status.admin_domain": "Atvērt {domain} moderēšanas saskarni",
"status.admin_status": "Atvērt šo ziņu moderācijas saskarnē",

View file

@ -604,13 +604,10 @@
"server_banner.about_active_users": "Pengguna pelayan ini sepanjang 30 hari yang lalu (Pengguna Aktif Bulanan)",
"server_banner.active_users": "pengguna aktif",
"server_banner.administered_by": "Ditadbir oleh:",
"server_banner.introduction": "{domain} ialah sebahagian daripada rangkaian sosial terpencar dikuasakan oleh {mastodon}.",
"server_banner.learn_more": "Maklumat lanjut",
"server_banner.server_stats": "Statistik pelayan:",
"sign_in_banner.create_account": "Cipta akaun",
"sign_in_banner.sign_in": "Daftar masuk",
"sign_in_banner.sso_redirect": "Log masuk atau mendaftar",
"sign_in_banner.text": "Log masuk untuk mengikuti profil atau hashtag, kegemaran, kongsi dan balas pos. Anda juga boleh berinteraksi daripada akaun anda pada server lain.",
"status.admin_account": "Buka antara muka penyederhanaan untuk @{name}",
"status.admin_domain": "antara muka penyederhanaan",
"status.admin_status": "Buka hantaran ini dalam antara muka penyederhanaan",

View file

@ -582,13 +582,10 @@
"server_banner.about_active_users": "ပြီးခဲ့သည့် ရက်ပေါင်း ၃၀ အတွင်း ဤဆာဗာကို အသုံးပြုသူများ (လအလိုက် လက်ရှိအသုံးပြုသူများ)",
"server_banner.active_users": "လက်ရှိအသုံးပြုသူများ",
"server_banner.administered_by": "မှ စီမံခန့်ခွဲသည် -",
"server_banner.introduction": "{domain} သည် {mastodon} မှ ပံ့ပိုးပေးထားသော ဗဟိုချုပ်ကိုင်မှုမရှိသည့် လူမှုကွန်ရက်တစ်ခုဖြစ်သည်။",
"server_banner.learn_more": "ပိုမိုသိရှိရန်",
"server_banner.server_stats": "ဆာဗာအား လက်ရှိအသုံးပြုသူများ -",
"sign_in_banner.create_account": "အကောင့်ဖန်တီးမည်",
"sign_in_banner.sign_in": "အကောင့်ဝင်မည်",
"sign_in_banner.sso_redirect": "အကောင့်ဝင်ပါ သို့မဟုတ် မှတ်ပုံတင်ပါ",
"sign_in_banner.text": "ပရိုဖိုင်များ သို့မဟုတ် hashtag များ၊ favorite၊ ပို့စ်မျှဝေမှုများနှင့် ပြန်ကြားစာများအသုံးပြုရန်အတွက် အကောင့်ဝင်ပါ။ အခြားဆာဗာပေါ်ရှိ သင့်အကောင့်မှလည်း အပြန်အလှန်ဖလှယ်နိုင်ပါသည်။",
"status.admin_account": "@{name} အတွက် စိစစ်ခြင်းကြားခံနယ်ကို ဖွင့်ပါ",
"status.admin_domain": "{domain} အတွက် စိစစ်ခြင်းကြားခံနယ်ကို ဖွင့်ပါ",
"status.admin_status": "Open this status in the moderation interface",

View file

@ -415,6 +415,7 @@
"limited_account_hint.title": "Dit profiel is door de moderatoren van {domain} verborgen.",
"link_preview.author": "Door {name}",
"link_preview.more_from_author": "Meer van {name}",
"link_preview.shares": "{count, plural, one {{counter} bericht} other {{counter} berichten}}",
"lists.account.add": "Aan lijst toevoegen",
"lists.account.remove": "Uit lijst verwijderen",
"lists.delete": "Lijst verwijderen",
@ -695,13 +696,13 @@
"server_banner.about_active_users": "Aantal gebruikers tijdens de afgelopen 30 dagen (MAU)",
"server_banner.active_users": "actieve gebruikers",
"server_banner.administered_by": "Beheerd door:",
"server_banner.introduction": "{domain} is onderdeel van het decentrale sociale netwerk {mastodon}.",
"server_banner.learn_more": "Meer leren",
"server_banner.is_one_of_many": "{domain} is een van de vele onafhankelijke Mastodon-servers die je kunt gebruiken om deel te nemen aan de fediverse.",
"server_banner.server_stats": "Serverstats:",
"sign_in_banner.create_account": "Registreren",
"sign_in_banner.follow_anyone": "Volg iedereen in de fediverse en zie het allemaal in chronologische volgorde. Geen algoritmes, advertenties of clickbaits.",
"sign_in_banner.mastodon_is": "Mastodon is de beste manier om wat er gebeurt bij te houden.",
"sign_in_banner.sign_in": "Inloggen",
"sign_in_banner.sso_redirect": "Inloggen of Registreren",
"sign_in_banner.text": "Wanneer je een account op deze server hebt, kun je inloggen om mensen of hashtags te volgen, op berichten te reageren of om deze te delen. Wanneer je een account op een andere server hebt, kun je daar inloggen en daar ook interactie met mensen op deze server hebben.",
"status.admin_account": "Moderatie-omgeving van @{name} openen",
"status.admin_domain": "Moderatie-omgeving van {domain} openen",
"status.admin_status": "Dit bericht in de moderatie-omgeving tonen",

View file

@ -414,6 +414,8 @@
"limited_account_hint.action": "Vis profilen likevel",
"limited_account_hint.title": "Denne profilen er skjult av moderatorane på {domain}.",
"link_preview.author": "Av {name}",
"link_preview.more_from_author": "Meir frå {name}",
"link_preview.shares": "{count, plural,one {{counter} innlegg} other {{counter} innlegg}}",
"lists.account.add": "Legg til i liste",
"lists.account.remove": "Fjern frå liste",
"lists.delete": "Slett liste",
@ -694,13 +696,10 @@
"server_banner.about_active_users": "Personar som har brukt denne tenaren dei siste 30 dagane (Månadlege Aktive Brukarar)",
"server_banner.active_users": "aktive brukarar",
"server_banner.administered_by": "Administrert av:",
"server_banner.introduction": "{domain} er del av det desentraliserte sosiale nettverket drive av {mastodon}.",
"server_banner.learn_more": "Lær meir",
"server_banner.server_stats": "Tenarstatistikk:",
"sign_in_banner.create_account": "Opprett konto",
"sign_in_banner.sign_in": "Logg inn",
"sign_in_banner.sso_redirect": "Logg inn eller registrer deg",
"sign_in_banner.text": "Logg inn for å fylgja profilar eller emneknaggar, og for å lika, dela og svara på innlegg. Du kan òg samhandla med aktivitet på denne tenaren frå kontoar på andre tenarar.",
"status.admin_account": "Opne moderasjonsgrensesnitt for @{name}",
"status.admin_domain": "Opna moderatorgrensesnittet for {domain}",
"status.admin_status": "Opne denne statusen i moderasjonsgrensesnittet",

View file

@ -606,13 +606,10 @@
"server_banner.about_active_users": "Personer som har brukt denne serveren i løpet av de siste 30 dagene (aktive brukere månedlig)",
"server_banner.active_users": "aktive brukere",
"server_banner.administered_by": "Administrert av:",
"server_banner.introduction": "{domain} er en del av det desentraliserte sosiale nettverket drevet av {mastodon}.",
"server_banner.learn_more": "Finn ut mer",
"server_banner.server_stats": "Serverstatistikk:",
"sign_in_banner.create_account": "Opprett konto",
"sign_in_banner.sign_in": "Logg inn",
"sign_in_banner.sso_redirect": "Logg inn eller registrer deg",
"sign_in_banner.text": "Logg inn for å følge profiler eller emneknagger, favorittmarkere, dele og svare på innlegg. Du kan også samhandle fra din konto på en annen server.",
"status.admin_account": "Åpne moderatorgrensesnittet for @{name}",
"status.admin_domain": "Åpne moderatorgrensesnittet for {domain}",
"status.admin_status": "Åpne denne statusen i moderatorgrensesnittet",

View file

@ -499,8 +499,6 @@
"search_results.title": "Recèrca: {q}",
"server_banner.active_users": "utilizaires actius",
"server_banner.administered_by": "Administrat per:",
"server_banner.introduction": "{domain} fa part del malhum social descentralizat propulsat per {mastodon}.",
"server_banner.learn_more": "Ne saber mai",
"server_banner.server_stats": "Estatisticas del servidor:",
"sign_in_banner.create_account": "Crear un compte",
"sign_in_banner.sign_in": "Se connectar",

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