Merge commit '24c25ec4f503eb1b27b4e417d15ea62b5b9ee9fb' into glitch-soc/merge-upstream
This commit is contained in:
commit
ff07676aee
220 files changed
+1310
-1004
No files matched your search
@@ -1,18 +1,18 @@
|
||||
import { createAction } from '@reduxjs/toolkit';
|
||||
|
||||
import { apiRemoveAccountFromFollowers } from 'mastodon/api/accounts';
|
||||
import type { ApiAccountJSON } from 'mastodon/api_types/accounts';
|
||||
import {
|
||||
apiRemoveAccountFromFollowers,
|
||||
apiGetEndorsedAccounts,
|
||||
} from 'mastodon/api/accounts';
|
||||
import type { ApiRelationshipJSON } from 'mastodon/api_types/relationships';
|
||||
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
||||
|
||||
import { importFetchedAccounts } from './importer';
|
||||
|
||||
export const revealAccount = createAction<{
|
||||
id: string;
|
||||
}>('accounts/revealAccount');
|
||||
|
||||
export const importAccounts = createAction<{ accounts: ApiAccountJSON[] }>(
|
||||
'accounts/importAccounts',
|
||||
);
|
||||
|
||||
function actionWithSkipLoadingTrue<Args extends object>(args: Args) {
|
||||
return {
|
||||
payload: {
|
||||
@@ -104,3 +104,12 @@ export const removeAccountFromFollowers = createDataLoadingThunk(
|
||||
apiRemoveAccountFromFollowers(accountId),
|
||||
(relationship) => ({ relationship }),
|
||||
);
|
||||
|
||||
export const fetchEndorsedAccounts = createDataLoadingThunk(
|
||||
'accounts/endorsements',
|
||||
({ accountId }: { accountId: string }) => apiGetEndorsedAccounts(accountId),
|
||||
(data, { dispatch }) => {
|
||||
dispatch(importFetchedAccounts(data));
|
||||
return data;
|
||||
},
|
||||
);
|
||||
@@ -1,34 +0,0 @@
|
||||
import api from '../api';
|
||||
|
||||
export const FEATURED_TAGS_FETCH_REQUEST = 'FEATURED_TAGS_FETCH_REQUEST';
|
||||
export const FEATURED_TAGS_FETCH_SUCCESS = 'FEATURED_TAGS_FETCH_SUCCESS';
|
||||
export const FEATURED_TAGS_FETCH_FAIL = 'FEATURED_TAGS_FETCH_FAIL';
|
||||
|
||||
export const fetchFeaturedTags = (id) => (dispatch, getState) => {
|
||||
if (getState().getIn(['user_lists', 'featured_tags', id, 'items'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
dispatch(fetchFeaturedTagsRequest(id));
|
||||
|
||||
api().get(`/api/v1/accounts/${id}/featured_tags`)
|
||||
.then(({ data }) => dispatch(fetchFeaturedTagsSuccess(id, data)))
|
||||
.catch(err => dispatch(fetchFeaturedTagsFail(id, err)));
|
||||
};
|
||||
|
||||
export const fetchFeaturedTagsRequest = (id) => ({
|
||||
type: FEATURED_TAGS_FETCH_REQUEST,
|
||||
id,
|
||||
});
|
||||
|
||||
export const fetchFeaturedTagsSuccess = (id, tags) => ({
|
||||
type: FEATURED_TAGS_FETCH_SUCCESS,
|
||||
id,
|
||||
tags,
|
||||
});
|
||||
|
||||
export const fetchFeaturedTagsFail = (id, error) => ({
|
||||
type: FEATURED_TAGS_FETCH_FAIL,
|
||||
id,
|
||||
error,
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
import { apiGetFeaturedTags } from 'mastodon/api/accounts';
|
||||
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
||||
|
||||
export const fetchFeaturedTags = createDataLoadingThunk(
|
||||
'accounts/featured_tags',
|
||||
({ accountId }: { accountId: string }) => apiGetFeaturedTags(accountId),
|
||||
);
|
||||
@@ -0,0 +1,7 @@
|
||||
import { createAction } from '@reduxjs/toolkit';
|
||||
|
||||
import type { ApiAccountJSON } from 'mastodon/api_types/accounts';
|
||||
|
||||
export const importAccounts = createAction<{ accounts: ApiAccountJSON[] }>(
|
||||
'accounts/importAccounts',
|
||||
);
|
||||
@@ -1,7 +1,6 @@
|
||||
import { createPollFromServerJSON } from 'mastodon/models/poll';
|
||||
|
||||
import { importAccounts } from '../accounts_typed';
|
||||
|
||||
import { importAccounts } from './accounts';
|
||||
import { normalizeStatus } from './normalizer';
|
||||
import { importPolls } from './polls';
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import { apiRequestPost } from 'mastodon/api';
|
||||
import { apiRequestPost, apiRequestGet } from 'mastodon/api';
|
||||
import type { ApiAccountJSON } from 'mastodon/api_types/accounts';
|
||||
import type { ApiRelationshipJSON } from 'mastodon/api_types/relationships';
|
||||
import type { ApiHashtagJSON } from 'mastodon/api_types/tags';
|
||||
|
||||
export const apiSubmitAccountNote = (id: string, value: string) =>
|
||||
apiRequestPost<ApiRelationshipJSON>(`v1/accounts/${id}/note`, {
|
||||
@@ -23,3 +25,9 @@ export const apiRemoveAccountFromFollowers = (id: string) =>
|
||||
apiRequestPost<ApiRelationshipJSON>(
|
||||
`v1/accounts/${id}/remove_from_followers`,
|
||||
);
|
||||
|
||||
export const apiGetFeaturedTags = (id: string) =>
|
||||
apiRequestGet<ApiHashtagJSON>(`v1/accounts/${id}/featured_tags`);
|
||||
|
||||
export const apiGetEndorsedAccounts = (id: string) =>
|
||||
apiRequestGet<ApiAccountJSON>(`v1/accounts/${id}/endorsements`);
|
||||
@@ -297,6 +297,7 @@ interface DropdownProps<Item = MenuItem> {
|
||||
scrollable?: boolean;
|
||||
scrollKey?: string;
|
||||
status?: ImmutableMap<string, unknown>;
|
||||
forceDropdown?: boolean;
|
||||
renderItem?: RenderItemFn<Item>;
|
||||
renderHeader?: RenderHeaderFn<Item>;
|
||||
onOpen?: () => void;
|
||||
@@ -316,6 +317,7 @@ export const Dropdown = <Item = MenuItem,>({
|
||||
disabled,
|
||||
scrollable,
|
||||
status,
|
||||
forceDropdown = false,
|
||||
renderItem,
|
||||
renderHeader,
|
||||
onOpen,
|
||||
@@ -386,7 +388,7 @@ export const Dropdown = <Item = MenuItem,>({
|
||||
dispatch(fetchRelationships([prefetchAccountId]));
|
||||
}
|
||||
|
||||
if (isUserTouching()) {
|
||||
if (isUserTouching() && !forceDropdown) {
|
||||
dispatch(
|
||||
openModal({
|
||||
modalType: 'ACTIONS',
|
||||
@@ -416,6 +418,7 @@ export const Dropdown = <Item = MenuItem,>({
|
||||
handleItemClick,
|
||||
open,
|
||||
items,
|
||||
forceDropdown,
|
||||
handleClose,
|
||||
],
|
||||
);
|
||||
|
||||
@@ -116,6 +116,7 @@ export const EditedTimestamp: React.FC<{
|
||||
renderHeader={renderHeader}
|
||||
onOpen={handleOpen}
|
||||
onItemClick={handleItemClick}
|
||||
forceDropdown
|
||||
>
|
||||
<button className='dropdown-menu__text-button'>
|
||||
<FormattedMessage
|
||||
|
||||
@@ -1,24 +1,32 @@
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
|
||||
import { LoadingIndicator } from './loading_indicator';
|
||||
|
||||
interface Props {
|
||||
onClick: (event: React.MouseEvent) => void;
|
||||
disabled?: boolean;
|
||||
visible?: boolean;
|
||||
loading?: boolean;
|
||||
}
|
||||
export const LoadMore: React.FC<Props> = ({
|
||||
onClick,
|
||||
disabled,
|
||||
visible = true,
|
||||
loading = false,
|
||||
}) => {
|
||||
return (
|
||||
<button
|
||||
type='button'
|
||||
className='load-more'
|
||||
disabled={disabled || !visible}
|
||||
disabled={disabled || loading || !visible}
|
||||
style={{ visibility: visible ? 'visible' : 'hidden' }}
|
||||
onClick={onClick}
|
||||
>
|
||||
<FormattedMessage id='status.load_more' defaultMessage='Load more' />
|
||||
{loading ? (
|
||||
<LoadingIndicator />
|
||||
) : (
|
||||
<FormattedMessage id='status.load_more' defaultMessage='Load more' />
|
||||
)}
|
||||
</button>
|
||||
);
|
||||
};
|
||||
@@ -7,19 +7,21 @@ import { useParams } from 'react-router';
|
||||
import type { Map as ImmutableMap } from 'immutable';
|
||||
import { List as ImmutableList } from 'immutable';
|
||||
|
||||
import { fetchEndorsedAccounts } from 'mastodon/actions/accounts';
|
||||
import { fetchFeaturedTags } from 'mastodon/actions/featured_tags';
|
||||
import { expandAccountFeaturedTimeline } from 'mastodon/actions/timelines';
|
||||
import { Account } from 'mastodon/components/account';
|
||||
import { ColumnBackButton } from 'mastodon/components/column_back_button';
|
||||
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
||||
import { RemoteHint } from 'mastodon/components/remote_hint';
|
||||
import StatusContainer from 'mastodon/containers/status_container';
|
||||
import { AccountHeader } from 'mastodon/features/account_timeline/components/account_header';
|
||||
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
|
||||
import Column from 'mastodon/features/ui/components/column';
|
||||
import { useAccountId } from 'mastodon/hooks/useAccountId';
|
||||
import { useAccountVisibility } from 'mastodon/hooks/useAccountVisibility';
|
||||
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
||||
|
||||
import { AccountHeader } from '../account_timeline/components/account_header';
|
||||
import Column from '../ui/components/column';
|
||||
|
||||
import { EmptyMessage } from './components/empty_message';
|
||||
import { FeaturedTag } from './components/featured_tag';
|
||||
import type { TagMap } from './components/featured_tag';
|
||||
@@ -29,7 +31,9 @@ interface Params {
|
||||
id?: string;
|
||||
}
|
||||
|
||||
const AccountFeatured = () => {
|
||||
const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
|
||||
multiColumn,
|
||||
}) => {
|
||||
const accountId = useAccountId();
|
||||
const { suspended, blockedBy, hidden } = useAccountVisibility(accountId);
|
||||
const forceEmptyState = suspended || blockedBy || hidden;
|
||||
@@ -40,7 +44,8 @@ const AccountFeatured = () => {
|
||||
useEffect(() => {
|
||||
if (accountId) {
|
||||
void dispatch(expandAccountFeaturedTimeline(accountId));
|
||||
dispatch(fetchFeaturedTags(accountId));
|
||||
void dispatch(fetchFeaturedTags({ accountId }));
|
||||
void dispatch(fetchEndorsedAccounts({ accountId }));
|
||||
}
|
||||
}, [accountId, dispatch]);
|
||||
|
||||
@@ -67,6 +72,17 @@ const AccountFeatured = () => {
|
||||
ImmutableList(),
|
||||
) as ImmutableList<string>,
|
||||
);
|
||||
const featuredAccountIds = useAppSelector(
|
||||
(state) =>
|
||||
state.user_lists.getIn(
|
||||
['featured_accounts', accountId, 'items'],
|
||||
ImmutableList(),
|
||||
) as ImmutableList<string>,
|
||||
);
|
||||
|
||||
if (accountId === null) {
|
||||
return <BundleColumnError multiColumn={multiColumn} errorType='routing' />;
|
||||
}
|
||||
|
||||
if (isLoading) {
|
||||
return (
|
||||
@@ -78,7 +94,11 @@ const AccountFeatured = () => {
|
||||
);
|
||||
}
|
||||
|
||||
if (featuredStatusIds.isEmpty() && featuredTags.isEmpty()) {
|
||||
if (
|
||||
featuredStatusIds.isEmpty() &&
|
||||
featuredTags.isEmpty() &&
|
||||
featuredAccountIds.isEmpty()
|
||||
) {
|
||||
return (
|
||||
<AccountFeaturedWrapper accountId={accountId}>
|
||||
<EmptyMessage
|
||||
@@ -131,6 +151,19 @@ const AccountFeatured = () => {
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
{!featuredAccountIds.isEmpty() && (
|
||||
<>
|
||||
<h4 className='column-subheading'>
|
||||
<FormattedMessage
|
||||
id='account.featured.accounts'
|
||||
defaultMessage='Profiles'
|
||||
/>
|
||||
</h4>
|
||||
{featuredAccountIds.map((featuredAccountId) => (
|
||||
<Account key={featuredAccountId} id={featuredAccountId} />
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
<RemoteHint accountId={accountId} />
|
||||
</div>
|
||||
</Column>
|
||||
|
||||
@@ -147,7 +147,7 @@ export const AccountGallery: React.FC<{
|
||||
[dispatch],
|
||||
);
|
||||
|
||||
if (accountId && !isAccount) {
|
||||
if (accountId === null) {
|
||||
return <BundleColumnError multiColumn={multiColumn} errorType='routing' />;
|
||||
}
|
||||
|
||||
|
||||
@@ -107,7 +107,6 @@ const messages = defineMessages({
|
||||
id: 'account.disable_notifications',
|
||||
defaultMessage: 'Stop notifying me when @{name} posts',
|
||||
},
|
||||
pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned posts' },
|
||||
preferences: {
|
||||
id: 'navigation_bar.preferences',
|
||||
defaultMessage: 'Preferences',
|
||||
@@ -451,7 +450,6 @@ export const AccountHeader: React.FC<{
|
||||
text: intl.formatMessage(messages.preferences),
|
||||
href: '/settings/preferences',
|
||||
});
|
||||
arr.push({ text: intl.formatMessage(messages.pins), to: '/pinned' });
|
||||
arr.push(null);
|
||||
arr.push({
|
||||
text: intl.formatMessage(messages.follow_requests),
|
||||
|
||||
@@ -13,7 +13,6 @@ import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
|
||||
import { getAccountHidden } from 'mastodon/selectors/accounts';
|
||||
|
||||
import { lookupAccount, fetchAccount } from '../../actions/accounts';
|
||||
import { fetchFeaturedTags } from '../../actions/featured_tags';
|
||||
import { expandAccountFeaturedTimeline, expandAccountTimeline, connectTimeline, disconnectTimeline } from '../../actions/timelines';
|
||||
import { ColumnBackButton } from '../../components/column_back_button';
|
||||
import { LoadingIndicator } from '../../components/loading_indicator';
|
||||
@@ -27,7 +26,7 @@ import { LimitedAccountHint } from './components/limited_account_hint';
|
||||
const emptyList = ImmutableList();
|
||||
|
||||
const mapStateToProps = (state, { params: { acct, id, tagged }, withReplies = false }) => {
|
||||
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
|
||||
const accountId = id || state.accounts_map[normalizeForLookup(acct)];
|
||||
|
||||
if (accountId === null) {
|
||||
return {
|
||||
@@ -86,7 +85,6 @@ class AccountTimeline extends ImmutablePureComponent {
|
||||
dispatch(expandAccountFeaturedTimeline(accountId, { tagged }));
|
||||
}
|
||||
|
||||
dispatch(fetchFeaturedTags(accountId));
|
||||
dispatch(expandAccountTimeline(accountId, { withReplies, tagged }));
|
||||
|
||||
if (accountId === me) {
|
||||
|
||||
@@ -9,7 +9,6 @@ import { useAppDispatch } from 'mastodon/store';
|
||||
|
||||
const messages = defineMessages({
|
||||
edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
|
||||
pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned posts' },
|
||||
preferences: {
|
||||
id: 'navigation_bar.preferences',
|
||||
defaultMessage: 'Preferences',
|
||||
@@ -53,7 +52,6 @@ export const ActionBar: React.FC = () => {
|
||||
text: intl.formatMessage(messages.preferences),
|
||||
href: '/settings/preferences',
|
||||
},
|
||||
{ text: intl.formatMessage(messages.pins), to: '/pinned' },
|
||||
null,
|
||||
{
|
||||
text: intl.formatMessage(messages.follow_requests),
|
||||
|
||||
@@ -40,7 +40,7 @@ let EmojiPicker, Emoji; // load asynchronously
|
||||
|
||||
const listenerOptions = supportsPassiveEvents ? { passive: true, capture: true } : true;
|
||||
|
||||
const backgroundImageFn = () => `${assetHost}/emoji/sheet_15.png`;
|
||||
const backgroundImageFn = () => `${assetHost}/emoji/sheet_15_1.png`;
|
||||
|
||||
const notFoundFn = () => (
|
||||
<div className='emoji-mart-no-results'>
|
||||
|
||||
@@ -130,6 +130,7 @@ export const Directory: React.FC<{
|
||||
}, [dispatch, order, local]);
|
||||
|
||||
const pinned = !!columnId;
|
||||
const initialLoad = isLoading && accountIds.size === 0;
|
||||
|
||||
const scrollableArea = (
|
||||
<div className='scrollable'>
|
||||
@@ -170,7 +171,7 @@ export const Directory: React.FC<{
|
||||
</div>
|
||||
|
||||
<div className='directory__list'>
|
||||
{isLoading ? (
|
||||
{initialLoad ? (
|
||||
<LoadingIndicator />
|
||||
) : (
|
||||
accountIds.map((accountId) => (
|
||||
@@ -179,7 +180,11 @@ export const Directory: React.FC<{
|
||||
)}
|
||||
</div>
|
||||
|
||||
<LoadMore onClick={handleLoadMore} visible={!isLoading} />
|
||||
<LoadMore
|
||||
onClick={handleLoadMore}
|
||||
visible={!initialLoad}
|
||||
loading={isLoading}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
|
||||
@@ -7,94 +7,21 @@
|
||||
|
||||
// This version comment should be bumped each time the emoji data is changed
|
||||
// to ensure that the prevaled file is regenerated by Babel
|
||||
// version: 3
|
||||
// version: 4
|
||||
|
||||
// This json file contains the names of the categories.
|
||||
const emojiMart5LocalesData = require('@emoji-mart/data/i18n/en.json');
|
||||
const emojiMart5Data = require('@emoji-mart/data/sets/15/all.json');
|
||||
const { NimbleEmojiIndex } = require('emoji-mart');
|
||||
const { uncompress: emojiMartUncompress } = require('emoji-mart/dist/utils/data');
|
||||
const _ = require('lodash');
|
||||
|
||||
|
||||
let data = require('./emoji_data.json');
|
||||
const emojiMap = require('./emoji_map.json');
|
||||
// This json file is downloaded from https://github.com/iamcal/emoji-data/
|
||||
// and is used to correct the sheet coordinates since we're using that repo's sheet
|
||||
const emojiSheetData = require('./emoji_sheet.json');
|
||||
const { unicodeToFilename } = require('./unicode_to_filename');
|
||||
const { unicodeToUnifiedName } = require('./unicode_to_unified_name');
|
||||
|
||||
// Grabbed from `emoji_utils` to avoid circular dependency
|
||||
function unifiedToNative(unified) {
|
||||
let unicodes = unified.split('-'),
|
||||
codePoints = unicodes.map((u) => `0x${u}`);
|
||||
|
||||
return String.fromCodePoint(...codePoints);
|
||||
}
|
||||
|
||||
let data = {
|
||||
compressed: true,
|
||||
categories: emojiMart5Data.categories.map(cat => {
|
||||
return {
|
||||
...cat,
|
||||
name: emojiMart5LocalesData.categories[cat.id]
|
||||
};
|
||||
}),
|
||||
aliases: emojiMart5Data.aliases,
|
||||
emojis: _(emojiMart5Data.emojis).values().map(emoji => {
|
||||
let skin_variations = {};
|
||||
const unified = emoji.skins[0].unified.toUpperCase();
|
||||
const emojiFromRawData = emojiSheetData.find(e => e.unified === unified);
|
||||
|
||||
if (!emojiFromRawData) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (emoji.skins.length > 1) {
|
||||
const [, ...nonDefaultSkins] = emoji.skins;
|
||||
nonDefaultSkins.forEach(skin => {
|
||||
const [matchingRawCodePoints,matchingRawEmoji] = Object.entries(emojiFromRawData.skin_variations).find((pair) => {
|
||||
const [, value] = pair;
|
||||
return value.unified.toLowerCase() === skin.unified;
|
||||
});
|
||||
|
||||
if (matchingRawEmoji && matchingRawCodePoints) {
|
||||
// At the time of writing, the json from `@emoji-mart/data` doesn't have data
|
||||
// for emoji like `woman-heart-woman` with two different skin tones.
|
||||
const skinToneCode = matchingRawCodePoints.split('-')[0];
|
||||
skin_variations[skinToneCode] = {
|
||||
unified: matchingRawEmoji.unified.toUpperCase(),
|
||||
non_qualified: null,
|
||||
sheet_x: matchingRawEmoji.sheet_x,
|
||||
sheet_y: matchingRawEmoji.sheet_y,
|
||||
has_img_twitter: true,
|
||||
native: unifiedToNative(matchingRawEmoji.unified.toUpperCase())
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
a: emoji.name,
|
||||
b: unified,
|
||||
c: undefined,
|
||||
f: true,
|
||||
j: [emoji.id, ...emoji.keywords],
|
||||
k: [emojiFromRawData.sheet_x, emojiFromRawData.sheet_y],
|
||||
m: emoji.emoticons?.[0],
|
||||
l: emoji.emoticons,
|
||||
o: emoji.version,
|
||||
id: emoji.id,
|
||||
skin_variations,
|
||||
native: unifiedToNative(unified.toUpperCase())
|
||||
};
|
||||
}).compact().keyBy(e => e.id).mapValues(e => _.omit(e, 'id')).value()
|
||||
};
|
||||
|
||||
if (data.compressed) {
|
||||
emojiMartUncompress(data);
|
||||
}
|
||||
emojiMartUncompress(data);
|
||||
|
||||
const emojiMartData = data;
|
||||
const emojiIndex = new NimbleEmojiIndex(emojiMartData);
|
||||
|
||||
const excluded = ['®', '©', '™'];
|
||||
const skinTones = ['🏻', '🏼', '🏽', '🏾', '🏿'];
|
||||
@@ -103,10 +30,15 @@ const shortcodeMap = {};
|
||||
const shortCodesToEmojiData = {};
|
||||
const emojisWithoutShortCodes = [];
|
||||
|
||||
Object.keys(emojiMart5Data.emojis).forEach(key => {
|
||||
let emoji = emojiMart5Data.emojis[key];
|
||||
Object.keys(emojiIndex.emojis).forEach(key => {
|
||||
let emoji = emojiIndex.emojis[key];
|
||||
|
||||
shortcodeMap[emoji.skins[0].native] = emoji.id;
|
||||
// Emojis with skin tone modifiers are stored like this
|
||||
if (Object.hasOwn(emoji, '1')) {
|
||||
emoji = emoji['1'];
|
||||
}
|
||||
|
||||
shortcodeMap[emoji.native] = emoji.id;
|
||||
});
|
||||
|
||||
const stripModifiers = unicode => {
|
||||
@@ -150,9 +82,13 @@ Object.keys(emojiMap).forEach(key => {
|
||||
}
|
||||
});
|
||||
|
||||
Object.keys(emojiMartData.emojis).forEach(key => {
|
||||
let emoji = emojiMartData.emojis[key];
|
||||
Object.keys(emojiIndex.emojis).forEach(key => {
|
||||
let emoji = emojiIndex.emojis[key];
|
||||
|
||||
// Emojis with skin tone modifiers are stored like this
|
||||
if (Object.hasOwn(emoji, '1')) {
|
||||
emoji = emoji['1'];
|
||||
}
|
||||
|
||||
const { native } = emoji;
|
||||
let { short_names, search, unified } = emojiMartData.emojis[key];
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"compressed":true,"categories":[{"id":"people","name":"Smileys & People","emojis":["grinning","smiley","smile","grin","laughing","sweat_smile","rolling_on_the_floor_laughing","joy","slightly_smiling_face","upside_down_face","melting_face","wink","blush","innocent","smiling_face_with_3_hearts","heart_eyes","star-struck","kissing_heart","kissing","relaxed","kissing_closed_eyes","kissing_smiling_eyes","smiling_face_with_tear","yum","stuck_out_tongue","stuck_out_tongue_winking_eye","zany_face","stuck_out_tongue_closed_eyes","money_mouth_face","hugging_face","face_with_hand_over_mouth","face_with_open_eyes_and_hand_over_mouth","face_with_peeking_eye","shushing_face","thinking_face","saluting_face","zipper_mouth_face","face_with_raised_eyebrow","neutral_face","expressionless","no_mouth","dotted_line_face","face_in_clouds","smirk","unamused","face_with_rolling_eyes","grimacing","face_exhaling","lying_face","shaking_face","head_shaking_horizontally","head_shaking_vertically","relieved","pensive","sleepy","drooling_face","sleeping","mask","face_with_thermometer","face_with_head_bandage","nauseated_face","face_vomiting","sneezing_face","hot_face","cold_face","woozy_face","dizzy_face","face_with_spiral_eyes","exploding_head","face_with_cowboy_hat","partying_face","disguised_face","sunglasses","nerd_face","face_with_monocle","confused","face_with_diagonal_mouth","worried","slightly_frowning_face","white_frowning_face","open_mouth","hushed","astonished","flushed","pleading_face","face_holding_back_tears","frowning","anguished","fearful","cold_sweat","disappointed_relieved","cry","sob","scream","confounded","persevere","disappointed","sweat","weary","tired_face","yawning_face","triumph","rage","angry","face_with_symbols_on_mouth","smiling_imp","imp","skull","skull_and_crossbones","hankey","clown_face","japanese_ogre","japanese_goblin","ghost","alien","space_invader","robot_face","smiley_cat","smile_cat","joy_cat","heart_eyes_cat","smirk_cat","kissing_cat","scream_cat","crying_cat_face","pouting_cat","see_no_evil","hear_no_evil","speak_no_evil","wave","raised_back_of_hand","raised_hand_with_fingers_splayed","hand","spock-hand","rightwards_hand","leftwards_hand","palm_down_hand","palm_up_hand","leftwards_pushing_hand","rightwards_pushing_hand","ok_hand","pinched_fingers","pinching_hand","v","crossed_fingers","hand_with_index_finger_and_thumb_crossed","i_love_you_hand_sign","the_horns","call_me_hand","point_left","point_right","point_up_2","middle_finger","point_down","point_up","index_pointing_at_the_viewer","+1","-1","fist","facepunch","left-facing_fist","right-facing_fist","clap","raised_hands","heart_hands","open_hands","palms_up_together","handshake","pray","writing_hand","nail_care","selfie","muscle","mechanical_arm","mechanical_leg","leg","foot","ear","ear_with_hearing_aid","nose","brain","anatomical_heart","lungs","tooth","bone","eyes","eye","tongue","lips","biting_lip","baby","child","boy","girl","adult","person_with_blond_hair","man","bearded_person","man_with_beard","woman_with_beard","red_haired_man","curly_haired_man","white_haired_man","bald_man","woman","red_haired_woman","red_haired_person","curly_haired_woman","curly_haired_person","white_haired_woman","white_haired_person","bald_woman","bald_person","blond-haired-woman","blond-haired-man","older_adult","older_man","older_woman","person_frowning","man-frowning","woman-frowning","person_with_pouting_face","man-pouting","woman-pouting","no_good","man-gesturing-no","woman-gesturing-no","ok_woman","man-gesturing-ok","woman-gesturing-ok","information_desk_person","man-tipping-hand","woman-tipping-hand","raising_hand","man-raising-hand","woman-raising-hand","deaf_person","deaf_man","deaf_woman","bow","man-bowing","woman-bowing","face_palm","man-facepalming","woman-facepalming","shrug","man-shrugging","woman-shrugging","health_worker","male-doctor","female-doctor","student","male-student","female-student","teacher","male-teacher","female-teacher","judge","male-judge","female-judge","farmer","male-farmer","female-farmer","cook","male-cook","female-cook","mechanic","male-mechanic","female-mechanic","factory_worker","male-factory-worker","female-factory-worker","office_worker","male-office-worker","female-office-worker","scientist","male-scientist","female-scientist","technologist","male-technologist","female-technologist","singer","male-singer","female-singer","artist","male-artist","female-artist","pilot","male-pilot","female-pilot","astronaut","male-astronaut","female-astronaut","firefighter","male-firefighter","female-firefighter","cop","male-police-officer","female-police-officer","sleuth_or_spy","male-detective","female-detective","guardsman","male-guard","female-guard","ninja","construction_worker","male-construction-worker","female-construction-worker","person_with_crown","prince","princess","man_with_turban","man-wearing-turban","woman-wearing-turban","man_with_gua_pi_mao","person_with_headscarf","person_in_tuxedo","man_in_tuxedo","woman_in_tuxedo","bride_Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"😀":"1f600","😃":"1f603","😄":"1f604","😁":"1f601","😆":"1f606","😅":"1f605","🤣":"1f923","😂":"1f602","🙂":"1f642","🙃":"1f643","🫠":"1fae0","😉":"1f609","😊":"1f60a","😇":"1f607","🥰":"1f970","😍":"1f60d","🤩":"1f929","😘":"1f618","😗":"1f617","☺":"263a","😚":"1f61a","😙":"1f619","🥲":"1f972","😋":"1f60b","😛":"1f61b","😜":"1f61c","🤪":"1f92a","😝":"1f61d","🤑":"1f911","🤗":"1f917","🤭":"1f92d","🫢":"1fae2","🫣":"1fae3","🤫":"1f92b","🤔":"1f914","🫡":"1fae1","🤐":"1f910","🤨":"1f928","😐":"1f610","😑":"1f611","😶":"1f636","🫥":"1fae5","😏":"1f60f","😒":"1f612","🙄":"1f644","😬":"1f62c","🤥":"1f925","🫨":"1fae8","😌":"1f60c","😔":"1f614","😪":"1f62a","🤤":"1f924","😴":"1f634","😷":"1f637","🤒":"1f912","🤕":"1f915","🤢":"1f922","🤮":"1f92e","🤧":"1f927","🥵":"1f975","🥶":"1f976","🥴":"1f974","😵":"1f635","🤯":"1f92f","🤠":"1f920","🥳":"1f973","🥸":"1f978","😎":"1f60e","🤓":"1f913","🧐":"1f9d0","😕":"1f615","🫤":"1fae4","😟":"1f61f","🙁":"1f641","☹":"2639","😮":"1f62e","😯":"1f62f","😲":"1f632","😳":"1f633","🥺":"1f97a","🥹":"1f979","😦":"1f626","😧":"1f627","😨":"1f628","😰":"1f630","😥":"1f625","😢":"1f622","😭":"1f62d","😱":"1f631","😖":"1f616","😣":"1f623","😞":"1f61e","😓":"1f613","😩":"1f629","😫":"1f62b","🥱":"1f971","😤":"1f624","😡":"1f621","😠":"1f620","🤬":"1f92c","😈":"1f608","👿":"1f47f","💀":"1f480","☠":"2620","💩":"1f4a9","🤡":"1f921","👹":"1f479","👺":"1f47a","👻":"1f47b","👽":"1f47d","👾":"1f47e","🤖":"1f916","😺":"1f63a","😸":"1f638","😹":"1f639","😻":"1f63b","😼":"1f63c","😽":"1f63d","🙀":"1f640","😿":"1f63f","😾":"1f63e","🙈":"1f648","🙉":"1f649","🙊":"1f64a","💌":"1f48c","💘":"1f498","💝":"1f49d","💖":"1f496","💗":"1f497","💓":"1f493","💞":"1f49e","💕":"1f495","💟":"1f49f","❣":"2763","💔":"1f494","❤":"2764","🩷":"1fa77","🧡":"1f9e1","💛":"1f49b","💚":"1f49a","💙":"1f499","🩵":"1fa75","💜":"1f49c","🤎":"1f90e","🖤":"1f5a4","🩶":"1fa76","🤍":"1f90d","💋":"1f48b","💯":"1f4af","💢":"1f4a2","💥":"1f4a5","💫":"1f4ab","💦":"1f4a6","💨":"1f4a8","🕳":"1f573","💬":"1f4ac","🗨":"1f5e8","🗯":"1f5ef","💭":"1f4ad","💤":"1f4a4","👋":"1f44b","🤚":"1f91a","🖐":"1f590","✋":"270b","🖖":"1f596","🫱":"1faf1","🫲":"1faf2","🫳":"1faf3","🫴":"1faf4","🫷":"1faf7","🫸":"1faf8","👌":"1f44c","🤌":"1f90c","🤏":"1f90f","✌":"270c","🤞":"1f91e","🫰":"1faf0","🤟":"1f91f","🤘":"1f918","🤙":"1f919","👈":"1f448","👉":"1f449","👆":"1f446","🖕":"1f595","👇":"1f447","☝":"261d","🫵":"1faf5","👍":"1f44d","👎":"1f44e","✊":"270a","👊":"1f44a","🤛":"1f91b","🤜":"1f91c","👏":"1f44f","🙌":"1f64c","🫶":"1faf6","👐":"1f450","🤲":"1f932","🤝":"1f91d","🙏":"1f64f","✍":"270d","💅":"1f485","🤳":"1f933","💪":"1f4aa","🦾":"1f9be","🦿":"1f9bf","🦵":"1f9b5","🦶":"1f9b6","👂":"1f442","🦻":"1f9bb","👃":"1f443","🧠":"1f9e0","🫀":"1fac0","🫁":"1fac1","🦷":"1f9b7","🦴":"1f9b4","👀":"1f440","👁":"1f441","👅":"1f445","👄":"1f444","🫦":"1fae6","👶":"1f476","🧒":"1f9d2","👦":"1f466","👧":"1f467","🧑":"1f9d1","👱":"1f471","👨":"1f468","🧔":"1f9d4","👩":"1f469","🧓":"1f9d3","👴":"1f474","👵":"1f475","🙍":"1f64d","🙎":"1f64e","🙅":"1f645","🙆":"1f646","💁":"1f481","🙋":"1f64b","🧏":"1f9cf","🙇":"1f647","🤦":"1f926","🤷":"1f937","👮":"1f46e","🕵":"1f575","💂":"1f482","🥷":"1f977","👷":"1f477","🫅":"1fac5","🤴":"1f934","👸":"1f478","👳":"1f473","👲":"1f472","🧕":"1f9d5","🤵":"1f935","👰":"1f470","🤰":"1f930","🫃":"1fac3","🫄":"1fac4","🤱":"1f931","👼":"1f47c","🎅":"1f385","🤶":"1f936","🦸":"1f9b8","🦹":"1f9b9","🧙":"1f9d9","🧚":"1f9da","🧛":"1f9db","🧜":"1f9dc","🧝":"1f9dd","🧞":"1f9de","🧟":"1f9df","🧌":"1f9cc","💆":"1f486","💇":"1f487","🚶":"1f6b6","🧍":"1f9cd","🧎":"1f9ce","🏃":"1f3c3","💃":"1f483","🕺":"1f57a","🕴":"1f574","👯":"1f46f","🧖":"1f9d6","🧗":"1f9d7","🤺":"1f93a","🏇":"1f3c7","⛷":"26f7","🏂":"1f3c2","🏌":"1f3cc","🏄":"1f3c4","🚣":"1f6a3","🏊":"1f3ca","⛹":"26f9","🏋":"1f3cb","🚴":"1f6b4","🚵":"1f6b5","🤸":"1f938","🤼":"1f93c","🤽":"1f93d","🤾":"1f93e","🤹":"1f939","🧘":"1f9d8","🛀":"1f6c0","🛌":"1f6cc","👭":"1f46d","👫":"1f46b","👬":"1f46c","💏":"1f48f","💑":"1f491","👪":"1f46a","🗣":"1f5e3","👤":"1f464","👥":"1f465","🫂":"1fac2","👣":"1f463","🏻":"1f463","🏼":"1f463","🏽":"1f463","🏾":"1f463","🏿":"1f463","🦰":"1f463","🦱":"1f463","🦳":"1f463","🦲":"1f463","🐵":"1f435","🐒":"1f412","🦍":"1f98d","🦧":"1f9a7","🐶":"1f436","🐕":"1f415","🦮":"1f9ae","🐩":"1f429","🐺":"1f43a","🦊":"1f98Line truncated
|
||||
{"😀":"1f600","😃":"1f603","😄":"1f604","😁":"1f601","😆":"1f606","😅":"1f605","🤣":"1f923","😂":"1f602","🙂":"1f642","🙃":"1f643","🫠":"1fae0","😉":"1f609","😊":"1f60a","😇":"1f607","🥰":"1f970","😍":"1f60d","🤩":"1f929","😘":"1f618","😗":"1f617","☺":"263a","😚":"1f61a","😙":"1f619","🥲":"1f972","😋":"1f60b","😛":"1f61b","😜":"1f61c","🤪":"1f92a","😝":"1f61d","🤑":"1f911","🤗":"1f917","🤭":"1f92d","🫢":"1fae2","🫣":"1fae3","🤫":"1f92b","🤔":"1f914","🫡":"1fae1","🤐":"1f910","🤨":"1f928","😐":"1f610","😑":"1f611","😶":"1f636","🫥":"1fae5","😏":"1f60f","😒":"1f612","🙄":"1f644","😬":"1f62c","🤥":"1f925","🫨":"1fae8","😌":"1f60c","😔":"1f614","😪":"1f62a","🤤":"1f924","😴":"1f634","😷":"1f637","🤒":"1f912","🤕":"1f915","🤢":"1f922","🤮":"1f92e","🤧":"1f927","🥵":"1f975","🥶":"1f976","🥴":"1f974","😵":"1f635","🤯":"1f92f","🤠":"1f920","🥳":"1f973","🥸":"1f978","😎":"1f60e","🤓":"1f913","🧐":"1f9d0","😕":"1f615","🫤":"1fae4","😟":"1f61f","🙁":"1f641","☹":"2639","😮":"1f62e","😯":"1f62f","😲":"1f632","😳":"1f633","🥺":"1f97a","🥹":"1f979","😦":"1f626","😧":"1f627","😨":"1f628","😰":"1f630","😥":"1f625","😢":"1f622","😭":"1f62d","😱":"1f631","😖":"1f616","😣":"1f623","😞":"1f61e","😓":"1f613","😩":"1f629","😫":"1f62b","🥱":"1f971","😤":"1f624","😡":"1f621","😠":"1f620","🤬":"1f92c","😈":"1f608","👿":"1f47f","💀":"1f480","☠":"2620","💩":"1f4a9","🤡":"1f921","👹":"1f479","👺":"1f47a","👻":"1f47b","👽":"1f47d","👾":"1f47e","🤖":"1f916","😺":"1f63a","😸":"1f638","😹":"1f639","😻":"1f63b","😼":"1f63c","😽":"1f63d","🙀":"1f640","😿":"1f63f","😾":"1f63e","🙈":"1f648","🙉":"1f649","🙊":"1f64a","💌":"1f48c","💘":"1f498","💝":"1f49d","💖":"1f496","💗":"1f497","💓":"1f493","💞":"1f49e","💕":"1f495","💟":"1f49f","❣":"2763","💔":"1f494","❤":"2764","🩷":"1fa77","🧡":"1f9e1","💛":"1f49b","💚":"1f49a","💙":"1f499","🩵":"1fa75","💜":"1f49c","🤎":"1f90e","🖤":"1f5a4","🩶":"1fa76","🤍":"1f90d","💋":"1f48b","💯":"1f4af","💢":"1f4a2","💥":"1f4a5","💫":"1f4ab","💦":"1f4a6","💨":"1f4a8","🕳":"1f573","💬":"1f4ac","🗨":"1f5e8","🗯":"1f5ef","💭":"1f4ad","💤":"1f4a4","👋":"1f44b","🤚":"1f91a","🖐":"1f590","✋":"270b","🖖":"1f596","🫱":"1faf1","🫲":"1faf2","🫳":"1faf3","🫴":"1faf4","🫷":"1faf7","🫸":"1faf8","👌":"1f44c","🤌":"1f90c","🤏":"1f90f","✌":"270c","🤞":"1f91e","🫰":"1faf0","🤟":"1f91f","🤘":"1f918","🤙":"1f919","👈":"1f448","👉":"1f449","👆":"1f446","🖕":"1f595","👇":"1f447","☝":"261d","🫵":"1faf5","👍":"1f44d","👎":"1f44e","✊":"270a","👊":"1f44a","🤛":"1f91b","🤜":"1f91c","👏":"1f44f","🙌":"1f64c","🫶":"1faf6","👐":"1f450","🤲":"1f932","🤝":"1f91d","🙏":"1f64f","✍":"270d","💅":"1f485","🤳":"1f933","💪":"1f4aa","🦾":"1f9be","🦿":"1f9bf","🦵":"1f9b5","🦶":"1f9b6","👂":"1f442","🦻":"1f9bb","👃":"1f443","🧠":"1f9e0","🫀":"1fac0","🫁":"1fac1","🦷":"1f9b7","🦴":"1f9b4","👀":"1f440","👁":"1f441","👅":"1f445","👄":"1f444","🫦":"1fae6","👶":"1f476","🧒":"1f9d2","👦":"1f466","👧":"1f467","🧑":"1f9d1","👱":"1f471","👨":"1f468","🧔":"1f9d4","👩":"1f469","🧓":"1f9d3","👴":"1f474","👵":"1f475","🙍":"1f64d","🙎":"1f64e","🙅":"1f645","🙆":"1f646","💁":"1f481","🙋":"1f64b","🧏":"1f9cf","🙇":"1f647","🤦":"1f926","🤷":"1f937","👮":"1f46e","🕵":"1f575","💂":"1f482","🥷":"1f977","👷":"1f477","🫅":"1fac5","🤴":"1f934","👸":"1f478","👳":"1f473","👲":"1f472","🧕":"1f9d5","🤵":"1f935","👰":"1f470","🤰":"1f930","🫃":"1fac3","🫄":"1fac4","🤱":"1f931","👼":"1f47c","🎅":"1f385","🤶":"1f936","🦸":"1f9b8","🦹":"1f9b9","🧙":"1f9d9","🧚":"1f9da","🧛":"1f9db","🧜":"1f9dc","🧝":"1f9dd","🧞":"1f9de","🧟":"1f9df","🧌":"1f9cc","💆":"1f486","💇":"1f487","🚶":"1f6b6","🧍":"1f9cd","🧎":"1f9ce","🏃":"1f3c3","💃":"1f483","🕺":"1f57a","🕴":"1f574","👯":"1f46f","🧖":"1f9d6","🧗":"1f9d7","🤺":"1f93a","🏇":"1f3c7","⛷":"26f7","🏂":"1f3c2","🏌":"1f3cc","🏄":"1f3c4","🚣":"1f6a3","🏊":"1f3ca","⛹":"26f9","🏋":"1f3cb","🚴":"1f6b4","🚵":"1f6b5","🤸":"1f938","🤼":"1f93c","🤽":"1f93d","🤾":"1f93e","🤹":"1f939","🧘":"1f9d8","🛀":"1f6c0","🛌":"1f6cc","👭":"1f46d","👫":"1f46b","👬":"1f46c","💏":"1f48f","💑":"1f491","🗣":"1f5e3","👤":"1f464","👥":"1f465","🫂":"1fac2","👪":"1f46a","👣":"1f463","🏻":"1f463","🏼":"1f463","🏽":"1f463","🏾":"1f463","🏿":"1f463","🦰":"1f463","🦱":"1f463","🦳":"1f463","🦲":"1f463","🐵":"1f435","🐒":"1f412","🦍":"1f98d","🦧":"1f9a7","🐶":"1f436","🐕":"1f415","🦮":"1f9ae","🐩":"1f429","🐺":"1f43a","🦊":"1f98Line truncated
|
||||
@@ -1 +0,0 @@
|
||||
[{"unified":"0023-FE0F-20E3","sheet_x":0,"sheet_y":0,"skin_variations":{}},{"unified":"002A-FE0F-20E3","sheet_x":0,"sheet_y":1,"skin_variations":{}},{"unified":"0030-FE0F-20E3","sheet_x":0,"sheet_y":2,"skin_variations":{}},{"unified":"0031-FE0F-20E3","sheet_x":0,"sheet_y":3,"skin_variations":{}},{"unified":"0032-FE0F-20E3","sheet_x":0,"sheet_y":4,"skin_variations":{}},{"unified":"0033-FE0F-20E3","sheet_x":0,"sheet_y":5,"skin_variations":{}},{"unified":"0034-FE0F-20E3","sheet_x":0,"sheet_y":6,"skin_variations":{}},{"unified":"0035-FE0F-20E3","sheet_x":0,"sheet_y":7,"skin_variations":{}},{"unified":"0036-FE0F-20E3","sheet_x":0,"sheet_y":8,"skin_variations":{}},{"unified":"0037-FE0F-20E3","sheet_x":0,"sheet_y":9,"skin_variations":{}},{"unified":"0038-FE0F-20E3","sheet_x":0,"sheet_y":10,"skin_variations":{}},{"unified":"0039-FE0F-20E3","sheet_x":0,"sheet_y":11,"skin_variations":{}},{"unified":"00A9-FE0F","sheet_x":0,"sheet_y":12,"skin_variations":{}},{"unified":"00AE-FE0F","sheet_x":0,"sheet_y":13,"skin_variations":{}},{"unified":"1F004","sheet_x":0,"sheet_y":14,"skin_variations":{}},{"unified":"1F0CF","sheet_x":0,"sheet_y":15,"skin_variations":{}},{"unified":"1F170-FE0F","sheet_x":0,"sheet_y":16,"skin_variations":{}},{"unified":"1F171-FE0F","sheet_x":0,"sheet_y":17,"skin_variations":{}},{"unified":"1F17E-FE0F","sheet_x":0,"sheet_y":18,"skin_variations":{}},{"unified":"1F17F-FE0F","sheet_x":0,"sheet_y":19,"skin_variations":{}},{"unified":"1F18E","sheet_x":0,"sheet_y":20,"skin_variations":{}},{"unified":"1F191","sheet_x":0,"sheet_y":21,"skin_variations":{}},{"unified":"1F192","sheet_x":0,"sheet_y":22,"skin_variations":{}},{"unified":"1F193","sheet_x":0,"sheet_y":23,"skin_variations":{}},{"unified":"1F194","sheet_x":0,"sheet_y":24,"skin_variations":{}},{"unified":"1F195","sheet_x":0,"sheet_y":25,"skin_variations":{}},{"unified":"1F196","sheet_x":0,"sheet_y":26,"skin_variations":{}},{"unified":"1F197","sheet_x":0,"sheet_y":27,"skin_variations":{}},{"unified":"1F198","sheet_x":0,"sheet_y":28,"skin_variations":{}},{"unified":"1F199","sheet_x":0,"sheet_y":29,"skin_variations":{}},{"unified":"1F19A","sheet_x":0,"sheet_y":30,"skin_variations":{}},{"unified":"1F1E6-1F1E8","sheet_x":0,"sheet_y":31,"skin_variations":{}},{"unified":"1F1E6-1F1E9","sheet_x":0,"sheet_y":32,"skin_variations":{}},{"unified":"1F1E6-1F1EA","sheet_x":0,"sheet_y":33,"skin_variations":{}},{"unified":"1F1E6-1F1EB","sheet_x":0,"sheet_y":34,"skin_variations":{}},{"unified":"1F1E6-1F1EC","sheet_x":0,"sheet_y":35,"skin_variations":{}},{"unified":"1F1E6-1F1EE","sheet_x":0,"sheet_y":36,"skin_variations":{}},{"unified":"1F1E6-1F1F1","sheet_x":0,"sheet_y":37,"skin_variations":{}},{"unified":"1F1E6-1F1F2","sheet_x":0,"sheet_y":38,"skin_variations":{}},{"unified":"1F1E6-1F1F4","sheet_x":0,"sheet_y":39,"skin_variations":{}},{"unified":"1F1E6-1F1F6","sheet_x":0,"sheet_y":40,"skin_variations":{}},{"unified":"1F1E6-1F1F7","sheet_x":0,"sheet_y":41,"skin_variations":{}},{"unified":"1F1E6-1F1F8","sheet_x":0,"sheet_y":42,"skin_variations":{}},{"unified":"1F1E6-1F1F9","sheet_x":0,"sheet_y":43,"skin_variations":{}},{"unified":"1F1E6-1F1FA","sheet_x":0,"sheet_y":44,"skin_variations":{}},{"unified":"1F1E6-1F1FC","sheet_x":0,"sheet_y":45,"skin_variations":{}},{"unified":"1F1E6-1F1FD","sheet_x":0,"sheet_y":46,"skin_variations":{}},{"unified":"1F1E6-1F1FF","sheet_x":0,"sheet_y":47,"skin_variations":{}},{"unified":"1F1E7-1F1E6","sheet_x":0,"sheet_y":48,"skin_variations":{}},{"unified":"1F1E7-1F1E7","sheet_x":0,"sheet_y":49,"skin_variations":{}},{"unified":"1F1E7-1F1E9","sheet_x":0,"sheet_y":50,"skin_variations":{}},{"unified":"1F1E7-1F1EA","sheet_x":0,"sheet_y":51,"skin_variations":{}},{"unified":"1F1E7-1F1EB","sheet_x":0,"sheet_y":52,"skin_variations":{}},{"unified":"1F1E7-1F1EC","sheet_x":0,"sheet_y":53,"skin_variations":{}},{"unified":"1F1E7-1F1ED","sheet_x":0,"sheet_y":54,"skin_variations":{}},{"unified":"1F1E7-1F1EE","sheet_x":0,"sheet_y":55,"skin_variations":{}},{"unified":"1F1E7-1F1EF","sheet_x":0,"sheet_y":56,"skin_variations":{}},{"unified":"1F1E7-1F1F1","sheet_x":0,"sheet_y":57,"skin_variations":{}},{"unified":"1F1E7-1F1F2","sheet_x":0,"sheet_y":58,"skin_variations":{}},{"unified":"1F1E7-1F1F3","sheet_x":0,"sheet_y":59,"skin_variations":{}},{"unified":"1F1E7-1F1F4","sheet_x":0,"sheet_y":60,"skin_variations":{}},{"unified":"1F1E7-1F1F6","sheet_x":0,"sheet_y":61,"skin_variations":{}},{"unified":"1F1E7-1F1F7","sheet_x":1,"sheet_y":0,"skin_variations":{}},{"unified":"1F1E7-1F1F8","sheet_x":1,"sheet_y":1,"skin_variations":{}},{"unified":"1F1E7-1F1F9","sheet_x":1,"sheet_y":2,"skin_variations":{}},{"unified":"1F1E7-1F1FB","sheet_x":1,"sheet_y":3,"skin_variations":{}},{"unified":"1F1E7-1F1FC","sheet_x":1,"sheet_y":4,"skin_variations":{}},{"unified":"1F1E7-1F1FE","sheet_x":1,"sheet_y":5,"skin_variations":{}},{"unified":"1F1E7-1F1FF","sheet_x":1,"sheet_y":6,"skin_variations":{}},{"unified":"1F1E8-1F1E6","sheet_x":1,"sheet_y":7,"skin_variations":{}},{"unified":"1F1E8-1F1E8","Line truncated
|
||||
@@ -29,7 +29,7 @@ import { LimitedAccountHint } from '../account_timeline/components/limited_accou
|
||||
import Column from '../ui/components/column';
|
||||
|
||||
const mapStateToProps = (state, { params: { acct, id } }) => {
|
||||
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
|
||||
const accountId = id || state.accounts_map[normalizeForLookup(acct)];
|
||||
|
||||
if (!accountId) {
|
||||
return {
|
||||
|
||||
@@ -29,7 +29,7 @@ import { LimitedAccountHint } from '../account_timeline/components/limited_accou
|
||||
import Column from '../ui/components/column';
|
||||
|
||||
const mapStateToProps = (state, { params: { acct, id } }) => {
|
||||
const accountId = id || state.getIn(['accounts_map', normalizeForLookup(acct)]);
|
||||
const accountId = id || state.accounts_map[normalizeForLookup(acct)];
|
||||
|
||||
if (!accountId) {
|
||||
return {
|
||||
|
||||
@@ -11,27 +11,25 @@ interface Params {
|
||||
id?: string;
|
||||
}
|
||||
|
||||
export function useAccountId() {
|
||||
export const useAccountId = () => {
|
||||
const { acct, id } = useParams<Params>();
|
||||
const dispatch = useAppDispatch();
|
||||
const accountId = useAppSelector(
|
||||
(state) =>
|
||||
id ??
|
||||
(state.accounts_map.get(normalizeForLookup(acct)) as string | undefined),
|
||||
id ?? (acct ? state.accounts_map[normalizeForLookup(acct)] : undefined),
|
||||
);
|
||||
|
||||
const account = useAppSelector((state) =>
|
||||
accountId ? state.accounts.get(accountId) : undefined,
|
||||
);
|
||||
const isAccount = !!account;
|
||||
const accountInStore = !!account;
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
useEffect(() => {
|
||||
if (!accountId) {
|
||||
if (typeof accountId === 'undefined' && acct) {
|
||||
dispatch(lookupAccount(acct));
|
||||
} else if (!isAccount) {
|
||||
} else if (accountId && !accountInStore) {
|
||||
dispatch(fetchAccount(accountId));
|
||||
}
|
||||
}, [dispatch, accountId, acct, isAccount]);
|
||||
}, [dispatch, accountId, acct, accountInStore]);
|
||||
|
||||
return accountId;
|
||||
}
|
||||
};
|
||||
@@ -1,12 +1,14 @@
|
||||
import { getAccountHidden } from 'mastodon/selectors/accounts';
|
||||
import { useAppSelector } from 'mastodon/store';
|
||||
|
||||
export function useAccountVisibility(accountId?: string) {
|
||||
const blockedBy = useAppSelector(
|
||||
(state) => !!state.relationships.getIn([accountId, 'blocked_by'], false),
|
||||
export function useAccountVisibility(accountId?: string | null) {
|
||||
const blockedBy = useAppSelector((state) =>
|
||||
accountId
|
||||
? !!state.relationships.getIn([accountId, 'blocked_by'], false)
|
||||
: false,
|
||||
);
|
||||
const suspended = useAppSelector(
|
||||
(state) => !!state.accounts.getIn([accountId, 'suspended'], false),
|
||||
const suspended = useAppSelector((state) =>
|
||||
accountId ? !!state.accounts.getIn([accountId, 'suspended'], false) : false,
|
||||
);
|
||||
const hidden = useAppSelector((state) =>
|
||||
accountId ? Boolean(getAccountHidden(state, accountId)) : false,
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Notifica'm els tuts de @{name}",
|
||||
"account.endorse": "Recomana en el perfil",
|
||||
"account.featured": "Destacat",
|
||||
"account.featured.accounts": "Perfils",
|
||||
"account.featured.hashtags": "Etiquetes",
|
||||
"account.featured.posts": "Publicacions",
|
||||
"account.featured_tags.last_status_at": "Darrer tut el {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} tut} other {{counter} tuts}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} tut} other {{counter} tuts}} avui",
|
||||
"hashtag.feature": "Destaca al perfil",
|
||||
"hashtag.follow": "Segueix l'etiqueta",
|
||||
"hashtag.mute": "Silencia #{hashtag}",
|
||||
"hashtag.unfeature": "No destaquis al perfil",
|
||||
"hashtag.unfollow": "Deixa de seguir l'etiqueta",
|
||||
"hashtags.and_other": "…i {count, plural, other {# més}}",
|
||||
"hints.profiles.followers_may_be_missing": "Es poden haver perdut seguidors d'aquest perfil.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Oznamovat mi příspěvky @{name}",
|
||||
"account.endorse": "Zvýraznit na profilu",
|
||||
"account.featured": "Zvýrazněné",
|
||||
"account.featured.accounts": "Profily",
|
||||
"account.featured.hashtags": "Hashtagy",
|
||||
"account.featured.posts": "Příspěvky",
|
||||
"account.featured_tags.last_status_at": "Poslední příspěvek {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} účastník*ice} few {{counter} účastníci} other {{counter} účastníků}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
|
||||
"hashtag.counter_by_uses_today": "Dnes {count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}",
|
||||
"hashtag.feature": "Zvýraznit na profilu",
|
||||
"hashtag.follow": "Sledovat hashtag",
|
||||
"hashtag.mute": "Skrýt #{hashtag}",
|
||||
"hashtag.unfeature": "Nezvýrazňovat na profilu",
|
||||
"hashtag.unfollow": "Přestat sledovat hashtag",
|
||||
"hashtags.and_other": "…a {count, plural, one {# další} few {# další} other {# dalších}}",
|
||||
"hints.profiles.followers_may_be_missing": "Sledující mohou pro tento profil chybět.",
|
||||
|
||||
@@ -6,19 +6,19 @@
|
||||
"about.domain_blocks.preamble": "Fel rheol, mae Mastodon yn caniatáu i chi weld cynnwys gan unrhyw weinyddwr arall yn y ffedysawd a rhyngweithio â hi. Dyma'r eithriadau a wnaed ar y gweinydd penodol hwn.",
|
||||
"about.domain_blocks.silenced.explanation": "Fel rheol, fyddwch chi ddim yn gweld proffiliau a chynnwys o'r gweinydd hwn, oni bai eich bod yn chwilio'n benodol amdano neu yn ymuno drwy ei ddilyn.",
|
||||
"about.domain_blocks.silenced.title": "Cyfyngedig",
|
||||
"about.domain_blocks.suspended.explanation": "Ni fydd data o'r gweinydd hwn yn cael ei brosesu, ei gadw na'i gyfnewid, gan wneud unrhyw ryngweithio neu gyfathrebu gyda defnyddwyr o'r gweinydd hwn yn amhosibl.",
|
||||
"about.domain_blocks.suspended.explanation": "Fydd data o'r gweinydd hwn ddim yn cael ei brosesu, ei gadw na'i gyfnewid, gan wneud unrhyw ryngweithio neu gyfathrebu gyda defnyddwyr o'r gweinydd hwn yn amhosibl.",
|
||||
"about.domain_blocks.suspended.title": "Wedi'i atal",
|
||||
"about.not_available": "Nid yw'r wybodaeth hon ar gael ar y gweinydd hwn.",
|
||||
"about.not_available": "Dyw'r wybodaeth yma heb ei wneud ar gael ar y gweinydd hwn.",
|
||||
"about.powered_by": "Cyfrwng cymdeithasol datganoledig wedi ei yrru gan {mastodon}",
|
||||
"about.rules": "Rheolau'r gweinydd",
|
||||
"account.account_note_header": "Nodyn personol",
|
||||
"account.add_or_remove_from_list": "Ychwanegu neu Ddileu o'r rhestrau",
|
||||
"account.badges.bot": "Awtomataidd",
|
||||
"account.badges.group": "Grŵp",
|
||||
"account.block": "Blocio @{name}",
|
||||
"account.block_domain": "Blocio'r parth {domain}",
|
||||
"account.block_short": "Blocio",
|
||||
"account.blocked": "Blociwyd",
|
||||
"account.block": "Rhwystro @{name}",
|
||||
"account.block_domain": "Rhwystro'r parth {domain}",
|
||||
"account.block_short": "Rhwystro",
|
||||
"account.blocked": "Wedi'i rwystro",
|
||||
"account.blocking": "Yn Rhwystro",
|
||||
"account.cancel_follow_request": "Tynnu cais i ddilyn",
|
||||
"account.copy": "Copïo dolen i'r proffil",
|
||||
@@ -28,7 +28,7 @@
|
||||
"account.edit_profile": "Golygu'r proffil",
|
||||
"account.enable_notifications": "Rhowch wybod i fi pan fydd @{name} yn postio",
|
||||
"account.endorse": "Dangos ar fy mhroffil",
|
||||
"account.featured": "Dethol",
|
||||
"account.featured": "Nodwedd",
|
||||
"account.featured.hashtags": "Hashnodau",
|
||||
"account.featured.posts": "Postiadau",
|
||||
"account.featured_tags.last_status_at": "Y postiad olaf ar {date}",
|
||||
@@ -40,7 +40,7 @@
|
||||
"account.followers_counter": "{count, plural, one {{counter} dilynwr} two {{counter} ddilynwr} other {{counter} dilynwyr}}",
|
||||
"account.following": "Yn dilyn",
|
||||
"account.following_counter": "{count, plural, one {Yn dilyn {counter}} other {Yn dilyn {counter} arall}}",
|
||||
"account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.",
|
||||
"account.follows.empty": "Dyw'r defnyddiwr hwn ddim yn dilyn unrhyw un eto.",
|
||||
"account.follows_you": "Yn eich dilyn chi",
|
||||
"account.go_to_profile": "Mynd i'r proffil",
|
||||
"account.hide_reblogs": "Cuddio hybiau gan @{name}",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Advisér mig, når @{name} poster",
|
||||
"account.endorse": "Fremhæv på profil",
|
||||
"account.featured": "Fremhævet",
|
||||
"account.featured.accounts": "Profiler",
|
||||
"account.featured.hashtags": "Hashtags",
|
||||
"account.featured.posts": "Indlæg",
|
||||
"account.featured_tags.last_status_at": "Seneste indlæg {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} deltager} other {{counter} deltagere}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
|
||||
"hashtag.feature": "Fremhæv på profil",
|
||||
"hashtag.follow": "Følg etiket",
|
||||
"hashtag.mute": "Tavsgør #{hashtag}",
|
||||
"hashtag.unfeature": "Fremhæv ikke på profil",
|
||||
"hashtag.unfollow": "Stop med at følge etiket",
|
||||
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
|
||||
"hints.profiles.followers_may_be_missing": "Der kan mangle følgere for denne profil.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Benachrichtige mich wenn @{name} etwas postet",
|
||||
"account.endorse": "Im Profil vorstellen",
|
||||
"account.featured": "Vorgestellt",
|
||||
"account.featured.accounts": "Profile",
|
||||
"account.featured.hashtags": "Hashtags",
|
||||
"account.featured.posts": "Beiträge",
|
||||
"account.featured_tags.last_status_at": "Letzter Beitrag am {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one{{counter} Beteiligte*r} other{{counter} Beteiligte}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}} heute",
|
||||
"hashtag.feature": "Im Profil vorstellen",
|
||||
"hashtag.follow": "Hashtag folgen",
|
||||
"hashtag.mute": "#{hashtag} stummschalten",
|
||||
"hashtag.unfeature": "Im Profil nicht mehr vorstellen",
|
||||
"hashtag.unfollow": "Hashtag entfolgen",
|
||||
"hashtags.and_other": "… und {count, plural, one{# weiterer} other {# weitere}}",
|
||||
"hints.profiles.followers_may_be_missing": "Möglicherweise werden für dieses Profil nicht alle Follower angezeigt.",
|
||||
@@ -426,7 +429,7 @@
|
||||
"home.show_announcements": "Ankündigungen anzeigen",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon kann anderen Nutzer*innen nicht mitteilen, dass du deren Benachrichtigungen ignorierst. Das Ignorieren von Benachrichtigungen wird nicht das Absenden der Nachricht selbst unterbinden.",
|
||||
"ignore_notifications_modal.filter_instead": "Stattdessen filtern",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Du wirst weiterhin die Möglichkeit haben, andere Nutzer*innen zu genehmigen, abzulehnen oder zu melden",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Du wirst weiterhin die Möglichkeit haben, andere Nutzer*innen zu akzeptieren, abzulehnen oder zu melden",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtern hilft, mögliches Durcheinander zu vermeiden",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Gefilterte Benachrichtigungen können separat überprüft werden",
|
||||
"ignore_notifications_modal.ignore": "Benachrichtigungen ignorieren",
|
||||
@@ -610,11 +613,11 @@
|
||||
"notification.relationships_severance_event.user_domain_block": "Du hast {target} blockiert – {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst, wurden entfernt.",
|
||||
"notification.status": "{name} postete …",
|
||||
"notification.update": "{name} bearbeitete einen Beitrag",
|
||||
"notification_requests.accept": "Genehmigen",
|
||||
"notification_requests.accept_multiple": "{count, plural, one {# Anfrage genehmigen …} other {# Anfragen genehmigen …}}",
|
||||
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Anfrage genehmigen} other {Anfragen genehmigen}}",
|
||||
"notification_requests.confirm_accept_multiple.message": "Du bist dabei, {{count, plural, one {eine Benachrichtigungsanfrage} other {# Benachrichtigungsanfragen}} zu genehmigen. Möchtest du wirklich fortfahren?",
|
||||
"notification_requests.confirm_accept_multiple.title": "Benachrichtigungsanfragen genehmigen?",
|
||||
"notification_requests.accept": "Akzeptieren",
|
||||
"notification_requests.accept_multiple": "{count, plural, one {# Anfrage akzeptieren …} other {# Anfragen akzeptieren …}}",
|
||||
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Anfrage akzeptieren} other {Anfragen akzeptieren}}",
|
||||
"notification_requests.confirm_accept_multiple.message": "Du bist dabei, {{count, plural, one {eine Benachrichtigungsanfrage} other {# Benachrichtigungsanfragen}} zu akzeptieren. Möchtest du wirklich fortfahren?",
|
||||
"notification_requests.confirm_accept_multiple.title": "Benachrichtigungsanfragen akzeptieren?",
|
||||
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Anfrage ablehnen} other {Anfragen ablehnen}}",
|
||||
"notification_requests.confirm_dismiss_multiple.message": "Du bist dabei, {count, plural, one {eine Benachrichtigungsanfrage} other {# Benachrichtigungsanfragen}} abzulehnen. Du wirst nicht mehr ohne Weiteres auf {count, plural, one {sie} other {sie}} zugreifen können. Möchtest du wirklich fortfahren?",
|
||||
"notification_requests.confirm_dismiss_multiple.title": "Benachrichtigungsanfragen ablehnen?",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Feature on profile",
|
||||
"account.featured": "Featured",
|
||||
"account.featured.accounts": "Profiles",
|
||||
"account.featured.hashtags": "Hashtags",
|
||||
"account.featured.posts": "Posts",
|
||||
"account.featured_tags.last_status_at": "Last post on {date}",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Notificarme cuando @{name} envíe mensajes",
|
||||
"account.endorse": "Destacar en el perfil",
|
||||
"account.featured": "Destacados",
|
||||
"account.featured.accounts": "Perfiles",
|
||||
"account.featured.hashtags": "Etiquetas",
|
||||
"account.featured.posts": "Mensajes",
|
||||
"account.featured_tags.last_status_at": "Último mensaje: {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}} hoy",
|
||||
"hashtag.feature": "Destacar en el perfil",
|
||||
"hashtag.follow": "Seguir etiqueta",
|
||||
"hashtag.mute": "Silenciar #{hashtag}",
|
||||
"hashtag.unfeature": "No destacar en el perfil",
|
||||
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
||||
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
||||
"hints.profiles.followers_may_be_missing": "Es posible que falten seguidores de este perfil.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Notificarme cuando @{name} publique algo",
|
||||
"account.endorse": "Destacar en mi perfil",
|
||||
"account.featured": "Destacado",
|
||||
"account.featured.accounts": "Perfiles",
|
||||
"account.featured.hashtags": "Etiquetas",
|
||||
"account.featured.posts": "Publicaciones",
|
||||
"account.featured_tags.last_status_at": "Última publicación el {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy",
|
||||
"hashtag.feature": "Destacar en el perfil",
|
||||
"hashtag.follow": "Seguir etiqueta",
|
||||
"hashtag.mute": "Silenciar #{hashtag}",
|
||||
"hashtag.unfeature": "No destacar en el perfil",
|
||||
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
||||
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
||||
"hints.profiles.followers_may_be_missing": "Puede que no se muestren todos los seguidores de este perfil.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Notificarme cuando @{name} publique algo",
|
||||
"account.endorse": "Destacar en el perfil",
|
||||
"account.featured": "Destacado",
|
||||
"account.featured.accounts": "Perfiles",
|
||||
"account.featured.hashtags": "Etiquetas",
|
||||
"account.featured.posts": "Publicaciones",
|
||||
"account.featured_tags.last_status_at": "Última publicación el {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy",
|
||||
"hashtag.feature": "Destacar en el perfil",
|
||||
"hashtag.follow": "Seguir etiqueta",
|
||||
"hashtag.mute": "Silenciar #{hashtag}",
|
||||
"hashtag.unfeature": "No destacar en el perfil",
|
||||
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
||||
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
||||
"hints.profiles.followers_may_be_missing": "Puede que no se muestren todos los seguidores de este perfil.",
|
||||
@@ -581,7 +584,7 @@
|
||||
"notification.favourite_pm": "{name} ha marcado como favorita tu mención privada",
|
||||
"notification.favourite_pm.name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a> han marcado como favorita tu mención privada",
|
||||
"notification.follow": "{name} te empezó a seguir",
|
||||
"notification.follow.name_and_others": "{name} y <a>{count, plural, one {# otro} other {# otros}}</a> te siguieron",
|
||||
"notification.follow.name_and_others": "{name} y <a>{count, plural, one {# otro} other {otros #}}</a> te siguieron",
|
||||
"notification.follow_request": "{name} ha solicitado seguirte",
|
||||
"notification.follow_request.name_and_others": "{name} y {count, plural, one {# más} other {# más}} han solicitado seguirte",
|
||||
"notification.label.mention": "Mención",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Ilmoita minulle, kun @{name} julkaisee",
|
||||
"account.endorse": "Suosittele profiilissa",
|
||||
"account.featured": "Suositellut",
|
||||
"account.featured.accounts": "Profiilit",
|
||||
"account.featured.hashtags": "Aihetunnisteet",
|
||||
"account.featured.posts": "Julkaisut",
|
||||
"account.featured_tags.last_status_at": "Viimeisin julkaisu {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} osallistuja} other {{counter} osallistujaa}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one{{counter} julkaisu} other {{counter} julkaisua}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}} tänään",
|
||||
"hashtag.feature": "Suosittele profiilissa",
|
||||
"hashtag.follow": "Seuraa aihetunnistetta",
|
||||
"hashtag.mute": "Mykistä #{hashtag}",
|
||||
"hashtag.unfeature": "Kumoa suosittelu profiilissa",
|
||||
"hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen",
|
||||
"hashtags.and_other": "…ja {count, plural, other {# lisää}}",
|
||||
"hints.profiles.followers_may_be_missing": "Tämän profiilin seuraajia saattaa puuttua.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Boða mær frá, tá @{name} skrivar",
|
||||
"account.endorse": "Víst á vangamyndini",
|
||||
"account.featured": "Tikin fram",
|
||||
"account.featured.accounts": "Vangar",
|
||||
"account.featured.hashtags": "Frámerki",
|
||||
"account.featured.posts": "Postar",
|
||||
"account.featured_tags.last_status_at": "Seinasta strongur skrivaður {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} luttakari} other {{counter} luttakarar}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} postur} other {{counter} postar}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} postur} other {{counter} postar}} í dag",
|
||||
"hashtag.feature": "Vís á vanga",
|
||||
"hashtag.follow": "Fylg frámerki",
|
||||
"hashtag.mute": "Doyv @#{hashtag}",
|
||||
"hashtag.unfeature": "Vís ikki á vanga",
|
||||
"hashtag.unfollow": "Gevst at fylgja frámerki",
|
||||
"hashtags.and_other": "…og {count, plural, other {# afturat}}",
|
||||
"hints.profiles.followers_may_be_missing": "Fylgjarar hjá hesum vanganum kunnu mangla.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Noficarme cando @{name} publique",
|
||||
"account.endorse": "Amosar no perfil",
|
||||
"account.featured": "Destacado",
|
||||
"account.featured.accounts": "Perfís",
|
||||
"account.featured.hashtags": "Cancelos",
|
||||
"account.featured.posts": "Publicacións",
|
||||
"account.featured_tags.last_status_at": "Última publicación o {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicacións}} hoxe",
|
||||
"hashtag.feature": "Destacar no perfil",
|
||||
"hashtag.follow": "Seguir cancelo",
|
||||
"hashtag.mute": "Acalar a #{hashtag}",
|
||||
"hashtag.unfeature": "Non destacar no perfil",
|
||||
"hashtag.unfollow": "Deixar de seguir cancelo",
|
||||
"hashtags.and_other": "…e {count, plural, one {}other {# máis}}",
|
||||
"hints.profiles.followers_may_be_missing": "Poderían faltar seguidoras deste perfil.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "שלח לי התראות כש@{name} מפרסם",
|
||||
"account.endorse": "קדם את החשבון בפרופיל",
|
||||
"account.featured": "מומלץ",
|
||||
"account.featured.accounts": "פרופילים",
|
||||
"account.featured.hashtags": "תגיות",
|
||||
"account.featured.posts": "הודעות",
|
||||
"account.featured_tags.last_status_at": "חצרוץ אחרון בתאריך {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{counter} משתתפיםות}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}} היום",
|
||||
"hashtag.feature": "מובלט בפרופיל",
|
||||
"hashtag.follow": "לעקוב אחרי תגית",
|
||||
"hashtag.mute": "להשתיק את #{hashtag}",
|
||||
"hashtag.unfeature": "לא להבליט בפרופיל",
|
||||
"hashtag.unfollow": "להפסיק לעקוב אחרי תגית",
|
||||
"hashtags.and_other": "…{count, plural,other {ועוד #}}",
|
||||
"hints.profiles.followers_may_be_missing": "יתכן כי עוקבים של פרופיל זה חסרים.",
|
||||
|
||||
@@ -19,13 +19,19 @@
|
||||
"account.block_domain": "Blocar dominio {domain}",
|
||||
"account.block_short": "Blocar",
|
||||
"account.blocked": "Blocate",
|
||||
"account.blocking": "Blocate",
|
||||
"account.cancel_follow_request": "Cancellar sequimento",
|
||||
"account.copy": "Copiar ligamine a profilo",
|
||||
"account.direct": "Mentionar privatemente @{name}",
|
||||
"account.disable_notifications": "Non plus notificar me quando @{name} publica",
|
||||
"account.domain_blocking": "Dominio blocate",
|
||||
"account.edit_profile": "Modificar profilo",
|
||||
"account.enable_notifications": "Notificar me quando @{name} publica",
|
||||
"account.endorse": "Evidentiar sur le profilo",
|
||||
"account.featured": "In evidentia",
|
||||
"account.featured.accounts": "Profilos",
|
||||
"account.featured.hashtags": "Hashtags",
|
||||
"account.featured.posts": "Messages",
|
||||
"account.featured_tags.last_status_at": "Ultime message publicate le {date}",
|
||||
"account.featured_tags.last_status_never": "Necun message",
|
||||
"account.follow": "Sequer",
|
||||
@@ -36,6 +42,7 @@
|
||||
"account.following": "Sequente",
|
||||
"account.following_counter": "{count, plural, one {{counter} sequite} other {{counter} sequites}}",
|
||||
"account.follows.empty": "Iste usator non seque ancora alcuno.",
|
||||
"account.follows_you": "Te seque",
|
||||
"account.go_to_profile": "Vader al profilo",
|
||||
"account.hide_reblogs": "Celar impulsos de @{name}",
|
||||
"account.in_memoriam": "In memoriam.",
|
||||
@@ -50,18 +57,23 @@
|
||||
"account.mute_notifications_short": "Silentiar le notificationes",
|
||||
"account.mute_short": "Silentiar",
|
||||
"account.muted": "Silentiate",
|
||||
"account.muting": "Silentiate",
|
||||
"account.mutual": "Sequimento mutue",
|
||||
"account.no_bio": "Nulle description fornite.",
|
||||
"account.open_original_page": "Aperir le pagina original",
|
||||
"account.posts": "Messages",
|
||||
"account.posts_with_replies": "Messages e responsas",
|
||||
"account.remove_from_followers": "Remover {name} del sequitores",
|
||||
"account.report": "Reportar @{name}",
|
||||
"account.requested": "Attendente le approbation. Clicca pro cancellar le requesta de sequer",
|
||||
"account.requested_follow": "{name} ha requestate de sequer te",
|
||||
"account.requests_to_follow_you": "Requestas de sequer te",
|
||||
"account.share": "Compartir profilo de @{name}",
|
||||
"account.show_reblogs": "Monstrar impulsos de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||
"account.unblock": "Disblocar @{name}",
|
||||
"account.unblock_domain": "Disblocar dominio {domain}",
|
||||
"account.unblock_domain_short": "Disblocar",
|
||||
"account.unblock_short": "Disblocar",
|
||||
"account.unendorse": "Non evidentiar sur le profilo",
|
||||
"account.unfollow": "Non plus sequer",
|
||||
@@ -157,6 +169,7 @@
|
||||
"column.lists": "Listas",
|
||||
"column.mutes": "Usatores silentiate",
|
||||
"column.notifications": "Notificationes",
|
||||
"column.pins": "Messages in evidentia",
|
||||
"column.public": "Chronologia federate",
|
||||
"column_back_button.label": "Retro",
|
||||
"column_header.hide_settings": "Celar le parametros",
|
||||
@@ -222,6 +235,9 @@
|
||||
"confirmations.redraft.confirm": "Deler e rescriber",
|
||||
"confirmations.redraft.message": "Es tu secur de voler deler iste message e rescriber lo? Le favorites e le impulsos essera perdite, e le responsas al message original essera orphanate.",
|
||||
"confirmations.redraft.title": "Deler e rescriber le message?",
|
||||
"confirmations.remove_from_followers.confirm": "Remover sequitor",
|
||||
"confirmations.remove_from_followers.message": "{name} non plus te sequera. Es tu secur de voler continuar?",
|
||||
"confirmations.remove_from_followers.title": "Remover sequitor?",
|
||||
"confirmations.reply.confirm": "Responder",
|
||||
"confirmations.reply.message": "Si tu responde ora, le message in curso de composition essera perdite. Es tu secur de voler continuar?",
|
||||
"confirmations.reply.title": "Superscriber le message?",
|
||||
@@ -289,6 +305,9 @@
|
||||
"emoji_button.search_results": "Resultatos de recerca",
|
||||
"emoji_button.symbols": "Symbolos",
|
||||
"emoji_button.travel": "Viages e locos",
|
||||
"empty_column.account_featured.me": "Tu non ha ancora mittite alcun cosa in evidentia. Sapeva tu que tu pote mitter in evidentia tu messages, le hashtags que tu usa le plus, e mesmo le contos de tu amicos sur tu profilo?",
|
||||
"empty_column.account_featured.other": "{acct} non ha ancora mittite alcun cosa in evidentia. Sapeva tu que tu pote mitter in evidentia tu messages, le hashtags que tu usa le plus, e mesmo le contos de tu amicos sur tu profilo?",
|
||||
"empty_column.account_featured_other.unknown": "Iste conto non ha ancora mittite alcun cosa in evidentia.",
|
||||
"empty_column.account_hides_collections": "Le usator non ha rendite iste information disponibile",
|
||||
"empty_column.account_suspended": "Conto suspendite",
|
||||
"empty_column.account_timeline": "Nulle messages hic!",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Láta mig vita þegar @{name} sendir inn",
|
||||
"account.endorse": "Birta á notandasniði",
|
||||
"account.featured": "Með aukið vægi",
|
||||
"account.featured.accounts": "Notendasnið",
|
||||
"account.featured.hashtags": "Myllumerki",
|
||||
"account.featured.posts": "Færslur",
|
||||
"account.featured_tags.last_status_at": "Síðasta færsla þann {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} þátttakandi} other {{counter} þátttakendur}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} færsla} other {{counter} færslur}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} færsla} other {{counter} færslur}} í dag",
|
||||
"hashtag.feature": "Birta á notandasniði",
|
||||
"hashtag.follow": "Fylgjast með myllumerki",
|
||||
"hashtag.mute": "Þagga #{hashtag}",
|
||||
"hashtag.unfeature": "Ekki birta á notandasniði",
|
||||
"hashtag.unfollow": "Hætta að fylgjast með myllumerki",
|
||||
"hashtags.and_other": "…og {count, plural, other {# til viðbótar}}",
|
||||
"hints.profiles.followers_may_be_missing": "Fylgjendur frá þessum notanda gæti vantað.",
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
"account.edit_profile": "Ẓreg amaɣnu",
|
||||
"account.enable_notifications": "Azen-iyi-d ilɣa mi ara d-isuffeɣ @{name}",
|
||||
"account.endorse": "Welleh fell-as deg umaɣnu-inek",
|
||||
"account.featured.accounts": "Imeɣna",
|
||||
"account.featured.hashtags": "Ihacṭagen",
|
||||
"account.featured.posts": "Tisuffaɣ",
|
||||
"account.featured_tags.last_status_at": "Tasuffeɣt taneggarut ass n {date}",
|
||||
@@ -36,6 +37,7 @@
|
||||
"account.following": "Yeṭṭafaṛ",
|
||||
"account.following_counter": "{count, plural, one {{counter} yettwaḍfaren} other {{counter} yettwaḍfaren}}",
|
||||
"account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.",
|
||||
"account.follows_you": "Yeṭṭafaṛ-ik·em-id",
|
||||
"account.go_to_profile": "Ddu ɣer umaɣnu",
|
||||
"account.hide_reblogs": "Ffer ayen i ibeṭṭu @{name}",
|
||||
"account.joined_short": "Izeddi da seg ass n",
|
||||
@@ -415,6 +417,7 @@
|
||||
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
||||
"notification.admin.report": "Yemla-t-id {name} {target}",
|
||||
"notification.admin.sign_up": "Ijerred {name}",
|
||||
"notification.annual_report.view": "Wali #Wrapstodon",
|
||||
"notification.favourite": "{name} yesmenyaf addad-ik·im",
|
||||
"notification.follow": "iṭṭafar-ik·em-id {name}",
|
||||
"notification.follow.name_and_others": "{name} akked <a>{count, plural, one {# nniḍen} other {# nniḍen}}</a> iḍfeṛ-k·m-id",
|
||||
@@ -466,6 +469,7 @@
|
||||
"notifications.group": "{count} n yilɣa",
|
||||
"notifications.mark_as_read": "Creḍ akk ilɣa am wakken ttwaɣran",
|
||||
"notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel",
|
||||
"notifications.policy.accept": "Qbel",
|
||||
"notifications.policy.drop": "Anef-as",
|
||||
"notifications.policy.filter": "Sizdeg",
|
||||
"notifications.policy.filter_new_accounts.hint": "Imiḍanen imaynuten i d-yennulfan deg {days, plural, one {yiwen n wass} other {# n wussan}} yezrin",
|
||||
@@ -580,6 +584,7 @@
|
||||
"search_results.all": "Akk",
|
||||
"search_results.hashtags": "Ihacṭagen",
|
||||
"search_results.no_results": "Ulac igemmaḍ.",
|
||||
"search_results.no_search_yet": "Ɛreḍ ad d-tnadiḍ ɣef iznan, imaɣnuten neɣ ihacṭagen.",
|
||||
"search_results.see_all": "Wali-ten akk",
|
||||
"search_results.statuses": "Tisuffaɣ",
|
||||
"search_results.title": "Igemmaḍ n unadi ɣef \"{q}\"",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "@{name} 의 게시물 알림 켜기",
|
||||
"account.endorse": "프로필에 추천하기",
|
||||
"account.featured": "추천",
|
||||
"account.featured.accounts": "프로필",
|
||||
"account.featured.hashtags": "해시태그",
|
||||
"account.featured.posts": "게시물",
|
||||
"account.featured_tags.last_status_at": "{date}에 마지막으로 게시",
|
||||
@@ -168,6 +169,7 @@
|
||||
"column.lists": "리스트",
|
||||
"column.mutes": "뮤트한 사용자",
|
||||
"column.notifications": "알림",
|
||||
"column.pins": "추천 게시물",
|
||||
"column.public": "연합 타임라인",
|
||||
"column_back_button.label": "돌아가기",
|
||||
"column_header.hide_settings": "설정 숨기기",
|
||||
@@ -226,9 +228,9 @@
|
||||
"confirmations.logout.message": "정말로 로그아웃 하시겠습니까?",
|
||||
"confirmations.logout.title": "로그아웃 할까요?",
|
||||
"confirmations.missing_alt_text.confirm": "대체 텍스트 추가",
|
||||
"confirmations.missing_alt_text.message": "대체 텍스트가 없는 미디어를 포함하고 있습니다. 설명을 추가하면 더 많은 사람들이 내 콘텐츠에 접근할 수 있습니다.",
|
||||
"confirmations.missing_alt_text.message": "대체 텍스트가 없는 미디어를 포함하고 있습니다. 설명을 추가하면 더 많은 사람들이 내 콘텐츠에 접근할 수 있습니다. ",
|
||||
"confirmations.missing_alt_text.secondary": "그냥 게시하기",
|
||||
"confirmations.missing_alt_text.title": "대체 텍스트를 추가할까요?",
|
||||
"confirmations.missing_alt_text.title": "대체 텍스트를 추가할까요? ",
|
||||
"confirmations.mute.confirm": "뮤트",
|
||||
"confirmations.redraft.confirm": "삭제하고 다시 쓰기",
|
||||
"confirmations.redraft.message": "정말로 이 게시물을 삭제하고 다시 쓰시겠습니까? 해당 게시물에 대한 부스트와 좋아요를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.",
|
||||
@@ -435,7 +437,7 @@
|
||||
"ignore_notifications_modal.not_following_title": "내가 팔로우하지 않는 사람들의 알림을 무시할까요?",
|
||||
"ignore_notifications_modal.private_mentions_title": "요청하지 않은 개인 멘션 알림을 무시할까요?",
|
||||
"info_button.label": "도움말",
|
||||
"info_button.what_is_alt_text": "<h1>대체 텍스트가 무었인가요?</h1> <p>대체 텍스트는 저시력자, 낮은 인터넷 대역폭 사용자, 더 자세한 문맥을 위해 이미지에 대한 설명을 제공하는 것입니다.</p> <p>깔끔하고 간결하고 객관적인 대체 텍스트를 작성해 모두가 이해하기 쉽게 만들고 접근성이 높아질 수 있습니다.</p><ul><li>중요한 요소에 중점을 두세요</li> <li>이미지 안의 글자를 요약하세요</li> <li>정형화된 문장 구조를 사용하세요</li> <li>중복된 정보를 피하세요</li> <li>복잡한 시각자료(도표나 지도 같은)에선 추세와 주요 결과에 중점을 두세요</li> </ul>",
|
||||
"info_button.what_is_alt_text": "<h1>대체 텍스트가 무엇인가요?</h1> <p>대체 텍스트는 저시력자, 낮은 인터넷 대역폭 사용자, 더 자세한 문맥을 위해 이미지에 대한 설명을 제공하는 것입니다.</p> <p>깔끔하고 간결하고 객관적인 대체 텍스트를 작성해 모두가 이해하기 쉽게 만들고 접근성이 높아질 수 있습니다.</p><ul><li>중요한 요소에 중점을 두세요</li> <li>이미지 안의 글자를 요약하세요</li> <li>정형화된 문장 구조를 사용하세요</li> <li>중복된 정보를 피하세요</li> <li>복잡한 시각자료(도표나 지도 같은)에선 추세와 주요 결과에 중점을 두세요</li> </ul>",
|
||||
"interaction_modal.action.favourite": "계속하려면 내 계정으로 즐겨찾기해야 합니다.",
|
||||
"interaction_modal.action.follow": "계속하려면 내 계정으로 팔로우해야 합니다.",
|
||||
"interaction_modal.action.reblog": "계속하려면 내 계정으로 리블로그해야 합니다.",
|
||||
@@ -476,6 +478,7 @@
|
||||
"keyboard_shortcuts.my_profile": "내 프로필 열기",
|
||||
"keyboard_shortcuts.notifications": "알림 컬럼 열기",
|
||||
"keyboard_shortcuts.open_media": "미디어 열기",
|
||||
"keyboard_shortcuts.pinned": "추천 게시물 목록 열기",
|
||||
"keyboard_shortcuts.profile": "작성자의 프로필 열기",
|
||||
"keyboard_shortcuts.reply": "게시물에 답장",
|
||||
"keyboard_shortcuts.requests": "팔로우 요청 리스트 열기",
|
||||
@@ -559,6 +562,7 @@
|
||||
"navigation_bar.mutes": "뮤트한 사용자",
|
||||
"navigation_bar.opened_in_classic_interface": "게시물, 계정, 기타 특정 페이지들은 기본적으로 기존 웹 인터페이스로 열리게 됩니다.",
|
||||
"navigation_bar.personal": "개인용",
|
||||
"navigation_bar.pins": "추천 게시물",
|
||||
"navigation_bar.preferences": "환경설정",
|
||||
"navigation_bar.public_timeline": "연합 타임라인",
|
||||
"navigation_bar.search": "검색",
|
||||
@@ -753,12 +757,12 @@
|
||||
"report.comment.title": "우리가 더 알아야 할 내용이 있나요?",
|
||||
"report.forward": "{target}에 전달",
|
||||
"report.forward_hint": "이 계정은 다른 서버에 있습니다. 익명화 된 사본을 해당 서버에도 전송할까요?",
|
||||
"report.mute": "침묵",
|
||||
"report.mute": "뮤트",
|
||||
"report.mute_explanation": "당신은 해당 계정의 게시물을 보지 않게 됩니다. 해당 계정은 여전히 당신을 팔로우 하거나 당신의 게시물을 볼 수 있으며 해당 계정은 자신이 뮤트 되었는지 알지 못합니다.",
|
||||
"report.next": "다음",
|
||||
"report.placeholder": "코멘트",
|
||||
"report.placeholder": "추가 정보 입력",
|
||||
"report.reasons.dislike": "마음에 안 듭니다",
|
||||
"report.reasons.dislike_description": "내가 보기 싫은 종류에 속합니다",
|
||||
"report.reasons.dislike_description": "원치 않는 게시물입니다",
|
||||
"report.reasons.legal": "불법입니다",
|
||||
"report.reasons.legal_description": "내 서버가 속한 국가의 법률을 위반한다고 생각합니다",
|
||||
"report.reasons.other": "기타",
|
||||
@@ -843,17 +847,18 @@
|
||||
"status.favourite": "좋아요",
|
||||
"status.favourites": "{count, plural, other {좋아요}}",
|
||||
"status.filter": "이 게시물을 필터",
|
||||
"status.history.created": "{name} 님이 {date}에 처음 게시함",
|
||||
"status.history.created": "{name} 님이 {date}에 게시함",
|
||||
"status.history.edited": "{name} 님이 {date}에 수정함",
|
||||
"status.load_more": "더 보기",
|
||||
"status.load_more": "더보기",
|
||||
"status.media.open": "클릭하여 열기",
|
||||
"status.media.show": "클릭하여 보기",
|
||||
"status.media_hidden": "미디어 숨겨짐",
|
||||
"status.mention": "@{name} 님에게 멘션",
|
||||
"status.more": "자세히",
|
||||
"status.mute": "@{name} 뮤트",
|
||||
"status.mute_conversation": "이 대화를 뮤트",
|
||||
"status.mute_conversation": "대화 뮤트",
|
||||
"status.open": "상세 정보 표시",
|
||||
"status.pin": "고정",
|
||||
"status.read_more": "더 보기",
|
||||
"status.reblog": "부스트",
|
||||
"status.reblog_private": "원래의 수신자들에게 부스트",
|
||||
@@ -878,6 +883,7 @@
|
||||
"status.translated_from_with": "{provider}에 의해 {lang}에서 번역됨",
|
||||
"status.uncached_media_warning": "미리보기를 사용할 수 없습니다",
|
||||
"status.unmute_conversation": "이 대화의 뮤트 해제하기",
|
||||
"status.unpin": "고정 취소",
|
||||
"subscribed_languages.lead": "변경 후에는 선택한 언어들로 작성된 게시물들만 홈 타임라인과 리스트 타임라인에 나타나게 됩니다. 아무 것도 선택하지 않으면 모든 언어로 작성된 게시물을 받아봅니다.",
|
||||
"subscribed_languages.save": "변경사항 저장",
|
||||
"subscribed_languages.target": "{target}에 대한 구독 언어 변경",
|
||||
@@ -894,9 +900,9 @@
|
||||
"trends.counter_by_accounts": "이전 {days}일 동안 {counter} 명의 사용자",
|
||||
"trends.trending_now": "지금 유행 중",
|
||||
"ui.beforeunload": "지금 나가면 저장되지 않은 항목을 잃게 됩니다.",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}B",
|
||||
"units.short.thousand": "{count}K",
|
||||
"units.short.billion": "{count}십억",
|
||||
"units.short.million": "{count}백만",
|
||||
"units.short.thousand": "{count}천",
|
||||
"upload_area.title": "드래그 & 드롭으로 업로드",
|
||||
"upload_button.label": "이미지, 영상, 오디오 파일 추가",
|
||||
"upload_error.limit": "파일 업로드 제한에 도달했습니다.",
|
||||
@@ -909,7 +915,7 @@
|
||||
"upload_form.edit": "수정",
|
||||
"upload_progress.label": "업로드 중...",
|
||||
"upload_progress.processing": "처리 중...",
|
||||
"username.taken": "이미 쓰인 사용자명입니다. 다른 것으로 시도해보세요",
|
||||
"username.taken": "이미 사용중인 사용자명입니다. 다시 시도해보세요",
|
||||
"video.close": "동영상 닫기",
|
||||
"video.download": "파일 다운로드",
|
||||
"video.exit_fullscreen": "전체화면 나가기",
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
"account.edit_profile": "Labot profilu",
|
||||
"account.enable_notifications": "Paziņot man, kad @{name} izveido ierakstu",
|
||||
"account.endorse": "Izcelts profilā",
|
||||
"account.featured.accounts": "Profili",
|
||||
"account.featured.hashtags": "Tēmturi",
|
||||
"account.featured.posts": "Ieraksti",
|
||||
"account.featured_tags.last_status_at": "Pēdējais ieraksts {date}",
|
||||
@@ -369,7 +370,9 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, zero{{counter} dalībnieku} one {{counter} dalībnieks} other {{counter} dalībnieki}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}} šodien",
|
||||
"hashtag.feature": "Attēlot profilā",
|
||||
"hashtag.follow": "Sekot tēmturim",
|
||||
"hashtag.unfeature": "Neattēlot profilā",
|
||||
"hashtag.unfollow": "Pārstāt sekot tēmturim",
|
||||
"hashtags.and_other": "… un {count, plural, other {vēl #}}",
|
||||
"hints.profiles.see_more_followers": "Skatīt vairāk sekotāju {domain}",
|
||||
|
||||
@@ -670,8 +670,14 @@
|
||||
"notifications.policy.drop_hint": "送去虛空,bē koh看見",
|
||||
"notifications.policy.filter": "過濾器",
|
||||
"notifications.policy.filter_hint": "送kàu受過濾ê通知ê收件kheh-á",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Hōo服侍器ê管理員限制",
|
||||
"notifications.policy.filter_limited_accounts_title": "受管制ê口座",
|
||||
"notifications.policy.filter_new_accounts.hint": "建立tī最近 {days, plural, other {# kang}}內",
|
||||
"notifications.policy.filter_new_accounts_title": "新ê口座",
|
||||
"notifications.policy.filter_not_followers_hint": "包含最近{days, plural, other {# kang}}內跟tuè lí ê lâng",
|
||||
"notifications.policy.filter_not_followers_title": "無跟tuè lí ê lâng",
|
||||
"notifications.policy.filter_not_following_hint": "直到lí手動允准in",
|
||||
"notifications.policy.filter_not_following_title": "Lí無跟tuè ê lâng",
|
||||
"notifications_permission_banner.title": "逐ê著看",
|
||||
"onboarding.follows.back": "轉去",
|
||||
"onboarding.follows.done": "做好ah",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Geef een melding wanneer @{name} een bericht plaatst",
|
||||
"account.endorse": "Op profiel weergeven",
|
||||
"account.featured": "Uitgelicht",
|
||||
"account.featured.accounts": "Profielen",
|
||||
"account.featured.hashtags": "Hashtags",
|
||||
"account.featured.posts": "Berichten",
|
||||
"account.featured_tags.last_status_at": "Laatste bericht op {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} deelnemer} other {{counter} deelnemers}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} bericht} other {{counter} berichten}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} bericht} other {{counter} berichten}} vandaag",
|
||||
"hashtag.feature": "Op profiel uitlichten",
|
||||
"hashtag.follow": "Hashtag volgen",
|
||||
"hashtag.mute": "#{hashtag} negeren",
|
||||
"hashtag.unfeature": "Niet op profiel uitlichten",
|
||||
"hashtag.unfollow": "Hashtag ontvolgen",
|
||||
"hashtags.and_other": "…en {count, plural, one {}other {# meer}}",
|
||||
"hints.profiles.followers_may_be_missing": "Volgers voor dit profiel kunnen ontbreken.",
|
||||
@@ -857,7 +860,7 @@
|
||||
"status.mute": "@{name} negeren",
|
||||
"status.mute_conversation": "Gesprek negeren",
|
||||
"status.open": "Volledig bericht tonen",
|
||||
"status.pin": "Uitlichten op profiel",
|
||||
"status.pin": "Op profiel uitlichten",
|
||||
"status.read_more": "Meer lezen",
|
||||
"status.reblog": "Boosten",
|
||||
"status.reblog_private": "Boost naar oorspronkelijke ontvangers",
|
||||
@@ -882,7 +885,7 @@
|
||||
"status.translated_from_with": "Vertaald vanuit het {lang} met behulp van {provider}",
|
||||
"status.uncached_media_warning": "Voorvertoning niet beschikbaar",
|
||||
"status.unmute_conversation": "Gesprek niet langer negeren",
|
||||
"status.unpin": "Niet uitlichten op profiel",
|
||||
"status.unpin": "Niet op profiel uitlichten",
|
||||
"subscribed_languages.lead": "Na de wijziging worden alleen berichten van geselecteerde talen op jouw starttijdlijn en in lijsten weergegeven.",
|
||||
"subscribed_languages.save": "Wijzigingen opslaan",
|
||||
"subscribed_languages.target": "Getoonde talen voor {target} wijzigen",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Varsle meg når @{name} skriv innlegg",
|
||||
"account.endorse": "Vis på profilen",
|
||||
"account.featured": "Utvald",
|
||||
"account.featured.accounts": "Profilar",
|
||||
"account.featured.hashtags": "Emneknaggar",
|
||||
"account.featured.posts": "Innlegg",
|
||||
"account.featured_tags.last_status_at": "Sist nytta {date}",
|
||||
@@ -168,6 +169,7 @@
|
||||
"column.lists": "Lister",
|
||||
"column.mutes": "Målbundne brukarar",
|
||||
"column.notifications": "Varsel",
|
||||
"column.pins": "Utvalde innlegg",
|
||||
"column.public": "Samla tidsline",
|
||||
"column_back_button.label": "Attende",
|
||||
"column_header.hide_settings": "Gøym innstillingane",
|
||||
@@ -303,9 +305,9 @@
|
||||
"emoji_button.search_results": "Søkeresultat",
|
||||
"emoji_button.symbols": "Symbol",
|
||||
"emoji_button.travel": "Reise & stader",
|
||||
"empty_column.account_featured.me": "Du har ikkje framheva noko enno. Visste du at du kan framheva innlegg, merkelappar du bruker mykje, og til og med venekontoar på profilen din?",
|
||||
"empty_column.account_featured.other": "{acct} har ikkje framheva noko enno. Visste du at du kan framheva innlegg, merkelappar du bruker mykje, og til og med venekontoar på profilen din?",
|
||||
"empty_column.account_featured_other.unknown": "Denne kontoen har ikkje framheva noko enno.",
|
||||
"empty_column.account_featured.me": "Du har ikkje valt ut noko enno. Visste du at du kan velja ut innlegg, merkelappar du bruker mykje, og til og med venekontoar på profilen din?",
|
||||
"empty_column.account_featured.other": "{acct} har ikkje valt ut noko enno. Visste du at du kan velja ut innlegg, merkelappar du bruker mykje, og til og med venekontoar på profilen din?",
|
||||
"empty_column.account_featured_other.unknown": "Denne kontoen har ikkje valt ut noko enno.",
|
||||
"empty_column.account_hides_collections": "Denne brukaren har valt å ikkje gjere denne informasjonen tilgjengeleg",
|
||||
"empty_column.account_suspended": "Kontoen er utestengd",
|
||||
"empty_column.account_timeline": "Ingen tut her!",
|
||||
@@ -404,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural,one {{counter} deltakar} other {{counter} deltakarar}}",
|
||||
"hashtag.counter_by_uses": "{count, plural,one {{counter} innlegg} other {{counter} innlegg}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural,one {{counter} innlegg} other {{counter} innlegg}} i dag",
|
||||
"hashtag.feature": "Vis på profilen",
|
||||
"hashtag.follow": "Fylg emneknagg",
|
||||
"hashtag.mute": "Demp @#{hashtag}",
|
||||
"hashtag.unfeature": "Ikkje vis på profilen",
|
||||
"hashtag.unfollow": "Slutt å fylgje emneknaggen",
|
||||
"hashtags.and_other": "…og {count, plural, one {}other {# fleire}}",
|
||||
"hints.profiles.followers_may_be_missing": "Kven som fylgjer denne profilen manglar kanskje.",
|
||||
@@ -476,6 +480,7 @@
|
||||
"keyboard_shortcuts.my_profile": "Opne profilen din",
|
||||
"keyboard_shortcuts.notifications": "Opne varselkolonna",
|
||||
"keyboard_shortcuts.open_media": "Opne media",
|
||||
"keyboard_shortcuts.pinned": "Opne lista over utvalde innlegg",
|
||||
"keyboard_shortcuts.profile": "Opne forfattaren sin profil",
|
||||
"keyboard_shortcuts.reply": "Svar på innlegg",
|
||||
"keyboard_shortcuts.requests": "Opne lista med fylgjeførespurnader",
|
||||
@@ -559,6 +564,7 @@
|
||||
"navigation_bar.mutes": "Målbundne brukarar",
|
||||
"navigation_bar.opened_in_classic_interface": "Innlegg, kontoar, og enkelte andre sider blir opna som standard i det klassiske webgrensesnittet.",
|
||||
"navigation_bar.personal": "Personleg",
|
||||
"navigation_bar.pins": "Utvalde innlegg",
|
||||
"navigation_bar.preferences": "Innstillingar",
|
||||
"navigation_bar.public_timeline": "Føderert tidsline",
|
||||
"navigation_bar.search": "Søk",
|
||||
@@ -854,6 +860,7 @@
|
||||
"status.mute": "Demp @{name}",
|
||||
"status.mute_conversation": "Demp samtale",
|
||||
"status.open": "Utvid denne statusen",
|
||||
"status.pin": "Vis på profilen",
|
||||
"status.read_more": "Les meir",
|
||||
"status.reblog": "Framhev",
|
||||
"status.reblog_private": "Framhev til dei originale mottakarane",
|
||||
@@ -878,6 +885,7 @@
|
||||
"status.translated_from_with": "Omsett frå {lang} ved bruk av {provider}",
|
||||
"status.uncached_media_warning": "Førehandsvisning er ikkje tilgjengeleg",
|
||||
"status.unmute_conversation": "Opphev demping av samtalen",
|
||||
"status.unpin": "Ikkje vis på profilen",
|
||||
"subscribed_languages.lead": "Kun innlegg på valde språk vil bli dukke opp i heimestraumen din og i listene dine etter denne endringa. For å motta innlegg på alle språk, la vere å velje nokon.",
|
||||
"subscribed_languages.save": "Lagre endringar",
|
||||
"subscribed_languages.target": "Endre abonnerte språk for {target}",
|
||||
|
||||
@@ -386,7 +386,9 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural,one {{counter} participante} other {{counter} participantes}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicação} other {{counter} publicações}} hoje",
|
||||
"hashtag.feature": "Destacar no perfil",
|
||||
"hashtag.follow": "Seguir #etiqueta",
|
||||
"hashtag.unfeature": "Não destacar no perfil",
|
||||
"hashtag.unfollow": "Deixar de seguir #etiqueta",
|
||||
"hashtags.and_other": "…e {count, plural, other {mais #}}",
|
||||
"hints.profiles.followers_may_be_missing": "É possível que não estejam a ser mostrados todos os seguidores deste perfil.",
|
||||
|
||||
@@ -330,8 +330,8 @@
|
||||
"empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других серверов, чтобы заполнить ленту",
|
||||
"error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде эта страница не может быть корректно отображена.",
|
||||
"error.unexpected_crash.explanation_addons": "Эта страница не может быть корректно отображена. Скорее всего, ошибка вызвана расширением браузера или инструментом автоматического перевода.",
|
||||
"error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.",
|
||||
"error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и перезагрузить страницу. Если это не поможет, вы по-прежнему сможете войти в Mastodon через другой браузер или приложение.",
|
||||
"error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если это не поможет, вы, скорее всего, всё ещё сможете использовать Mastodon в другом браузере или приложении.",
|
||||
"error.unexpected_crash.next_steps_addons": "Попробуйте их отключить и обновить страницу. Если это не поможет, вы, скорее всего, всё ещё сможете использовать Mastodon в другом браузере или приложении.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Скопировать диагностическую информацию",
|
||||
"errors.unexpected_crash.report_issue": "Сообщить о проблеме",
|
||||
"explore.suggested_follows": "Люди",
|
||||
@@ -339,47 +339,47 @@
|
||||
"explore.trending_links": "Новости",
|
||||
"explore.trending_statuses": "Посты",
|
||||
"explore.trending_tags": "Хэштеги",
|
||||
"filter_modal.added.context_mismatch_explanation": "Эта категория не применяется к контексту, в котором вы получили доступ к этому посту. Если вы хотите, чтобы пост был отфильтрован в этом контексте, вам придётся отредактировать фильтр.",
|
||||
"filter_modal.added.context_mismatch_explanation": "Этот фильтр не применяется в том контексте, в котором вы видели этот пост. Если вы хотите, чтобы пост был отфильтрован в этом контексте, необходимо редактировать фильтр.",
|
||||
"filter_modal.added.context_mismatch_title": "Несоответствие контекста!",
|
||||
"filter_modal.added.expired_explanation": "Эта категория фильтра устарела, вам нужно изменить дату окончания фильтра, чтобы применить его.",
|
||||
"filter_modal.added.expired_explanation": "Этот фильтр истёк. Чтобы он был применён, вам нужно изменить срок действия фильтра.",
|
||||
"filter_modal.added.expired_title": "Истёкший фильтр!",
|
||||
"filter_modal.added.review_and_configure": "Для просмотра и настройки этой категории фильтра, перейдите в {settings_link}.",
|
||||
"filter_modal.added.review_and_configure": "Для просмотра или редактирования этого фильтра перейдите в {settings_link}.",
|
||||
"filter_modal.added.review_and_configure_title": "Настройки фильтра",
|
||||
"filter_modal.added.settings_link": "настройки",
|
||||
"filter_modal.added.short_explanation": "Этот пост был добавлен в следующую категорию фильтра: {title}.",
|
||||
"filter_modal.added.short_explanation": "Этот пост был добавлен к фильтру «{title}».",
|
||||
"filter_modal.added.title": "Фильтр добавлен!",
|
||||
"filter_modal.select_filter.context_mismatch": "не применяется к этому контексту",
|
||||
"filter_modal.select_filter.context_mismatch": "не применяется в этом контексте",
|
||||
"filter_modal.select_filter.expired": "истёкший",
|
||||
"filter_modal.select_filter.prompt_new": "Новая категория: {name}",
|
||||
"filter_modal.select_filter.search": "Поиск или создание",
|
||||
"filter_modal.select_filter.subtitle": "Используйте существующую категорию или создайте новую",
|
||||
"filter_modal.select_filter.prompt_new": "Новый фильтр: {name}",
|
||||
"filter_modal.select_filter.search": "Поиск или название нового фильтра",
|
||||
"filter_modal.select_filter.subtitle": "Используйте существующий фильтр или создайте новый",
|
||||
"filter_modal.select_filter.title": "Фильтровать этот пост",
|
||||
"filter_modal.title.status": "Фильтровать пост",
|
||||
"filter_warning.matches_filter": "Соответствует фильтру \"<span>{title}</span>\"",
|
||||
"filter_warning.matches_filter": "Соответствует фильтру «<span>{title}</span>»",
|
||||
"filtered_notifications_banner.pending_requests": "От {count, plural, =0 {не известных вам людей} one {# возможно вам известного человека} other {# возможно вам известных человек}}",
|
||||
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
|
||||
"firehose.all": "Всё вместе",
|
||||
"firehose.local": "Этот сервер",
|
||||
"firehose.remote": "Другие серверы",
|
||||
"follow_request.authorize": "Авторизовать",
|
||||
"follow_request.authorize": "Разрешить",
|
||||
"follow_request.reject": "Отказать",
|
||||
"follow_requests.unlocked_explanation": "Хотя ваша учетная запись не закрыта, команда {domain} подумала, что вы захотите просмотреть запросы от этих учетных записей вручную.",
|
||||
"follow_requests.unlocked_explanation": "Хотя ваша учётная запись не закрыта, команда сервера {domain} подумала, что вы захотите рассмотреть запросы на подписку от этих учётных записей вручную.",
|
||||
"follow_suggestions.curated_suggestion": "Выбор команды сервера",
|
||||
"follow_suggestions.dismiss": "Больше не показывать",
|
||||
"follow_suggestions.featured_longer": "Отобранные командой {domain} вручную",
|
||||
"follow_suggestions.dismiss": "Не показывать снова",
|
||||
"follow_suggestions.featured_longer": "Вручную выбрано командой сервера {domain}",
|
||||
"follow_suggestions.friends_of_friends_longer": "Популярно среди людей, на которых вы подписаны",
|
||||
"follow_suggestions.hints.featured": "Этот профиль был вручную выбран командой {domain}.",
|
||||
"follow_suggestions.hints.featured": "Этот профиль был вручную выбран командой сервера {domain}.",
|
||||
"follow_suggestions.hints.friends_of_friends": "Этот профиль популярен среди людей, на которых вы подписаны.",
|
||||
"follow_suggestions.hints.most_followed": "Этот профиль один из самых отслеживаемых на {domain}.",
|
||||
"follow_suggestions.hints.most_interactions": "Этот профиль в последнее время привлекает много внимания на {domain}.",
|
||||
"follow_suggestions.hints.most_followed": "Этот профиль лидирует по числу подписчиков с сервера {domain}.",
|
||||
"follow_suggestions.hints.most_interactions": "Этот профиль в последнее время привлекает много внимания на сервере {domain}.",
|
||||
"follow_suggestions.hints.similar_to_recently_followed": "Этот профиль похож на другие профили, на которые вы подписывались в последнее время.",
|
||||
"follow_suggestions.personalized_suggestion": "Персонализированное предложение",
|
||||
"follow_suggestions.personalized_suggestion": "Персональное предложение",
|
||||
"follow_suggestions.popular_suggestion": "Популярное предложение",
|
||||
"follow_suggestions.popular_suggestion_longer": "Популярное на {domain}",
|
||||
"follow_suggestions.similar_to_recently_followed_longer": "Похоже на профили, на которые вы недавно подписались",
|
||||
"follow_suggestions.popular_suggestion_longer": "Популярно на сервере {domain}",
|
||||
"follow_suggestions.similar_to_recently_followed_longer": "Похоже на профили, на которые вы подписывались в последнее время",
|
||||
"follow_suggestions.view_all": "Посмотреть все",
|
||||
"follow_suggestions.who_to_follow": "На кого подписаться",
|
||||
"followed_tags": "Отслеживаемые хэштеги",
|
||||
"followed_tags": "Подписки на хэштеги",
|
||||
"footer.about": "О проекте",
|
||||
"footer.directory": "Каталог профилей",
|
||||
"footer.get_app": "Скачать приложение",
|
||||
@@ -401,21 +401,21 @@
|
||||
"hashtag.column_settings.tag_mode.all": "Все из списка",
|
||||
"hashtag.column_settings.tag_mode.any": "Любой из списка",
|
||||
"hashtag.column_settings.tag_mode.none": "Ни один из списка",
|
||||
"hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этой колонки",
|
||||
"hashtag.column_settings.tag_toggle": "Включить дополнительные теги для этого столбца",
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} пользователь} few {{counter} пользователя} other {{counter} пользователей}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}} сегодня",
|
||||
"hashtag.follow": "Подписаться на новые посты",
|
||||
"hashtag.mute": "Игнорировать #{hashtag}",
|
||||
"hashtag.unfollow": "Отписаться",
|
||||
"hashtag.unfollow": "Отписаться от новых постов",
|
||||
"hashtags.and_other": "…и {count, plural, other {ещё #}}",
|
||||
"hints.profiles.followers_may_be_missing": "Подписчики этого профиля могут отсутствовать.",
|
||||
"hints.profiles.follows_may_be_missing": "Подписки этого профиля могут отсутствовать.",
|
||||
"hints.profiles.posts_may_be_missing": "Некоторые сообщения этого профиля могут отсутствовать.",
|
||||
"hints.profiles.followers_may_be_missing": "Некоторые подписчики этого профиля могут отсутствовать.",
|
||||
"hints.profiles.follows_may_be_missing": "Некоторые подписки этого профиля могут отсутствовать.",
|
||||
"hints.profiles.posts_may_be_missing": "Некоторые посты в этом профиле могут отсутствовать.",
|
||||
"hints.profiles.see_more_followers": "Перейдите на {domain}, чтобы увидеть всех подписчиков",
|
||||
"hints.profiles.see_more_follows": "Перейдите на {domain}, чтобы увидеть все подписки",
|
||||
"hints.profiles.see_more_posts": "Перейдите на {domain}, чтобы увидеть все посты",
|
||||
"hints.threads.replies_may_be_missing": "Ответы с других серверов могут отсутствовать.",
|
||||
"hints.threads.replies_may_be_missing": "Некоторые ответы с других серверов могут отсутствовать.",
|
||||
"hints.threads.see_more": "Перейдите на {domain}, чтобы увидеть все ответы",
|
||||
"home.column_settings.show_reblogs": "Показывать продвижения",
|
||||
"home.column_settings.show_replies": "Показывать ответы",
|
||||
@@ -495,11 +495,11 @@
|
||||
"lightbox.previous": "Назад",
|
||||
"lightbox.zoom_in": "Масштаб до фактического размера",
|
||||
"lightbox.zoom_out": "Масштаб по размеру экрана",
|
||||
"limited_account_hint.action": "Все равно показать профиль",
|
||||
"limited_account_hint.title": "Этот профиль был скрыт модераторами {domain}.",
|
||||
"limited_account_hint.action": "Всё равно показать",
|
||||
"limited_account_hint.title": "Этот профиль был скрыт модераторами сервера {domain}.",
|
||||
"link_preview.author": "Автор: {name}",
|
||||
"link_preview.more_from_author": "Больше от {name}",
|
||||
"link_preview.shares": "{count, plural, one {{counter} пост} other {{counter} посты}}",
|
||||
"link_preview.more_from_author": "Автор: {name}",
|
||||
"link_preview.shares": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}",
|
||||
"lists.add_member": "Добавить",
|
||||
"lists.add_to_list": "Добавить в список",
|
||||
"lists.add_to_lists": "Добавить {name} в списки",
|
||||
@@ -508,7 +508,7 @@
|
||||
"lists.create_list": "Создать список",
|
||||
"lists.delete": "Удалить список",
|
||||
"lists.done": "Готово",
|
||||
"lists.edit": "Изменить список",
|
||||
"lists.edit": "Редактировать список",
|
||||
"lists.exclusive": "Не показывать участников в домашней ленте",
|
||||
"lists.exclusive_hint": "Если кто-то есть в этом списке, скрыть его в домашней ленте, чтобы не видеть его посты дважды.",
|
||||
"lists.find_users_to_add": "Найти пользователей для добавления",
|
||||
@@ -603,7 +603,6 @@
|
||||
"notification.poll": "Опрос, в котором вы приняли участие, завершился",
|
||||
"notification.reblog": "{name} продвинул(а) ваш пост",
|
||||
"notification.reblog.name_and_others_with_link": "{name} и ещё <a>{count, plural, one {# пользователь} few {# пользователя} other {# пользователей}}</a> продвинули ваш пост",
|
||||
"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 {# аккаунта} other {# аккаунтов}}, на которые вы подписаны.",
|
||||
"notification.relationships_severance_event.learn_more": "Узнать больше",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Njoftomë, kur poston @{name}",
|
||||
"account.endorse": "Pasqyrojeni në profil",
|
||||
"account.featured": "Të zgjedhur",
|
||||
"account.featured.accounts": "Profile",
|
||||
"account.featured.hashtags": "Hashtag-ë",
|
||||
"account.featured.posts": "Postime",
|
||||
"account.featured_tags.last_status_at": "Postimi i fundit më {date}",
|
||||
@@ -400,8 +401,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} pjesëmarrës} other {{counter} pjesëmarrës}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} postim} other {{counter} postime}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} postim} other {{counter} postime}} sot",
|
||||
"hashtag.feature": "Pasqyrojeni në profil",
|
||||
"hashtag.follow": "Ndiqe hashtag-un",
|
||||
"hashtag.mute": "Heshtoje #{hashtag}",
|
||||
"hashtag.unfeature": "Mos e përfshi në profil",
|
||||
"hashtag.unfollow": "Hiqe ndjekjen e hashtag-ut",
|
||||
"hashtags.and_other": "…dhe {count, plural, one {}other {# më tepër}}",
|
||||
"hints.profiles.followers_may_be_missing": "Mund të mungojnë ndjekës për këtë profil.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "@{name} kişisinin gönderi bildirimlerini aç",
|
||||
"account.endorse": "Profilimde öne çıkar",
|
||||
"account.featured": "Öne çıkan",
|
||||
"account.featured.accounts": "Profiller",
|
||||
"account.featured.hashtags": "Etiketler",
|
||||
"account.featured.posts": "Gönderiler",
|
||||
"account.featured_tags.last_status_at": "Son gönderinin tarihi {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} katılımcı} other {{counter} katılımcı}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} gönderi} other {{counter} gönderi}}",
|
||||
"hashtag.counter_by_uses_today": "bugün {count, plural, one {{counter} gönderi} other {{counter} gönderi}}",
|
||||
"hashtag.feature": "Profilimde öne çıkar",
|
||||
"hashtag.follow": "Etiketi takip et",
|
||||
"hashtag.mute": "#{hashtag} gönderilerini sessize al",
|
||||
"hashtag.unfeature": "Profilimde öne çıkarma",
|
||||
"hashtag.unfollow": "Etiketi takibi bırak",
|
||||
"hashtags.and_other": "…ve {count, plural, one {}other {# fazlası}}",
|
||||
"hints.profiles.followers_may_be_missing": "Bu profilin takipçileri eksik olabilir.",
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
"account.enable_notifications": "Повідомляти мене про дописи @{name}",
|
||||
"account.endorse": "Рекомендувати у моєму профілі",
|
||||
"account.featured": "Рекомендоване",
|
||||
"account.featured.accounts": "Профілі",
|
||||
"account.featured.hashtags": "Хештеги",
|
||||
"account.featured.posts": "Дописи",
|
||||
"account.featured_tags.last_status_at": "Останній допис {date}",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "Nhận thông báo khi @{name} đăng tút",
|
||||
"account.endorse": "Tôn vinh người này",
|
||||
"account.featured": "Nêu bật",
|
||||
"account.featured.accounts": "Mọi người",
|
||||
"account.featured.hashtags": "Hashtag",
|
||||
"account.featured.posts": "Tút",
|
||||
"account.featured_tags.last_status_at": "Tút gần nhất {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, other {{counter} người dùng}}",
|
||||
"hashtag.counter_by_uses": "{count, plural, other {{counter} tút}}",
|
||||
"hashtag.counter_by_uses_today": "{count, plural, other {{counter} tút}} hôm nay",
|
||||
"hashtag.feature": "Nêu bật trên hồ sơ",
|
||||
"hashtag.follow": "Theo dõi hashtag",
|
||||
"hashtag.mute": "Ẩn #{hashtag}",
|
||||
"hashtag.unfeature": "Bỏ nêu bật trên hồ sơ",
|
||||
"hashtag.unfollow": "Bỏ theo dõi hashtag",
|
||||
"hashtags.and_other": "…và {count, plural, other {# nữa}}",
|
||||
"hints.profiles.followers_may_be_missing": "Số người theo dõi có thể không đầy đủ.",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
"account.enable_notifications": "當 @{name} 嘟文時通知我",
|
||||
"account.endorse": "於個人檔案推薦對方",
|
||||
"account.featured": "精選內容",
|
||||
"account.featured.accounts": "個人檔案",
|
||||
"account.featured.hashtags": "主題標籤",
|
||||
"account.featured.posts": "嘟文",
|
||||
"account.featured_tags.last_status_at": "上次嘟文於 {date}",
|
||||
@@ -405,8 +406,10 @@
|
||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} 名} other {{counter} 名}}參與者",
|
||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} 則} other {{counter} 則}}嘟文",
|
||||
"hashtag.counter_by_uses_today": "本日有 {count, plural, one {{counter} 則} other {{counter} 則}}嘟文",
|
||||
"hashtag.feature": "於個人檔案推薦",
|
||||
"hashtag.follow": "跟隨主題標籤",
|
||||
"hashtag.mute": "靜音 #{hashtag}",
|
||||
"hashtag.unfeature": "取消於個人檔案推薦",
|
||||
"hashtag.unfollow": "取消跟隨主題標籤",
|
||||
"hashtags.and_other": "…及其他 {count, plural, other {# 個}}",
|
||||
"hints.profiles.followers_may_be_missing": "此個人檔案之跟隨者或有缺失。",
|
||||
@@ -525,7 +528,7 @@
|
||||
"lists.replies_policy.none": "沒有人",
|
||||
"lists.save": "儲存",
|
||||
"lists.search": "搜尋",
|
||||
"lists.show_replies_to": "包含來自列表成員的回覆到",
|
||||
"lists.show_replies_to": "包含來自列表成員的回覆至",
|
||||
"load_pending": "{count, plural, other {# 個新項目}}",
|
||||
"loading_indicator.label": "正在載入...",
|
||||
"media_gallery.hide": "隱藏",
|
||||
|
||||
@@ -4,9 +4,9 @@ import { Map as ImmutableMap } from 'immutable';
|
||||
import {
|
||||
followAccountSuccess,
|
||||
unfollowAccountSuccess,
|
||||
importAccounts,
|
||||
revealAccount,
|
||||
} from 'mastodon/actions/accounts_typed';
|
||||
import { importAccounts } from 'mastodon/actions/importer/accounts';
|
||||
import type { ApiAccountJSON } from 'mastodon/api_types/accounts';
|
||||
import { me } from 'mastodon/initial_state';
|
||||
import type { Account } from 'mastodon/models/account';
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
import { Map as ImmutableMap } from 'immutable';
|
||||
|
||||
import { ACCOUNT_LOOKUP_FAIL } from '../actions/accounts';
|
||||
import { importAccounts } from '../actions/accounts_typed';
|
||||
import { domain } from '../initial_state';
|
||||
|
||||
const pattern = new RegExp(`@${domain}$`, 'gi');
|
||||
|
||||
export const normalizeForLookup = str =>
|
||||
str.toLowerCase().replace(pattern, '');
|
||||
|
||||
const initialState = ImmutableMap();
|
||||
|
||||
export default function accountsMap(state = initialState, action) {
|
||||
switch(action.type) {
|
||||
case ACCOUNT_LOOKUP_FAIL:
|
||||
return action.error?.response?.status === 404 ? state.set(normalizeForLookup(action.acct), null) : state;
|
||||
case importAccounts.type:
|
||||
return state.withMutations(map => action.payload.accounts.forEach(account => map.set(normalizeForLookup(account.acct), account.id)));
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
import { createReducer } from '@reduxjs/toolkit';
|
||||
import type { UnknownAction } from '@reduxjs/toolkit';
|
||||
|
||||
import type { AxiosError } from 'axios';
|
||||
|
||||
import { ACCOUNT_LOOKUP_FAIL } from 'mastodon/actions/accounts';
|
||||
import { importAccounts } from 'mastodon/actions/importer/accounts';
|
||||
import { domain } from 'mastodon/initial_state';
|
||||
|
||||
interface AccountLookupFailAction extends UnknownAction {
|
||||
acct: string;
|
||||
error?: AxiosError;
|
||||
}
|
||||
|
||||
const pattern = new RegExp(`@${domain}$`, 'gi');
|
||||
|
||||
export const normalizeForLookup = (str: string) =>
|
||||
str.toLowerCase().replace(pattern, '');
|
||||
|
||||
const initialState: Record<string, string | null> = {};
|
||||
|
||||
export const accountsMapReducer = createReducer(initialState, (builder) => {
|
||||
builder
|
||||
.addCase(importAccounts, (state, action) => {
|
||||
action.payload.accounts.forEach((account) => {
|
||||
state[normalizeForLookup(account.acct)] = account.id;
|
||||
});
|
||||
})
|
||||
.addMatcher(
|
||||
(action: UnknownAction): action is AccountLookupFailAction =>
|
||||
action.type === ACCOUNT_LOOKUP_FAIL,
|
||||
(state, action) => {
|
||||
if (action.error?.response?.status === 404) {
|
||||
state[normalizeForLookup(action.acct)] = null;
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
@@ -4,7 +4,7 @@ import { loadingBarReducer } from 'react-redux-loading-bar';
|
||||
import { combineReducers } from 'redux-immutable';
|
||||
|
||||
import { accountsReducer } from './accounts';
|
||||
import accounts_map from './accounts_map';
|
||||
import { accountsMapReducer } from './accounts_map';
|
||||
import { alertsReducer } from './alerts';
|
||||
import announcements from './announcements';
|
||||
import { composeReducer } from './compose';
|
||||
@@ -49,7 +49,7 @@ const reducers = {
|
||||
user_lists,
|
||||
status_lists,
|
||||
accounts: accountsReducer,
|
||||
accounts_map,
|
||||
accounts_map: accountsMapReducer,
|
||||
statuses,
|
||||
relationships: relationshipsReducer,
|
||||
settings,
|
||||
|
||||
@@ -5,9 +5,7 @@ import {
|
||||
fetchDirectory
|
||||
} from 'mastodon/actions/directory';
|
||||
import {
|
||||
FEATURED_TAGS_FETCH_REQUEST,
|
||||
FEATURED_TAGS_FETCH_SUCCESS,
|
||||
FEATURED_TAGS_FETCH_FAIL,
|
||||
fetchFeaturedTags
|
||||
} from 'mastodon/actions/featured_tags';
|
||||
|
||||
import {
|
||||
@@ -31,6 +29,7 @@ import {
|
||||
FOLLOW_REQUESTS_EXPAND_FAIL,
|
||||
authorizeFollowRequestSuccess,
|
||||
rejectFollowRequestSuccess,
|
||||
fetchEndorsedAccounts,
|
||||
} from '../actions/accounts';
|
||||
import {
|
||||
BLOCKS_FETCH_REQUEST,
|
||||
@@ -191,21 +190,27 @@ export default function userLists(state = initialState, action) {
|
||||
case MUTES_FETCH_FAIL:
|
||||
case MUTES_EXPAND_FAIL:
|
||||
return state.setIn(['mutes', 'isLoading'], false);
|
||||
case FEATURED_TAGS_FETCH_SUCCESS:
|
||||
return normalizeFeaturedTags(state, ['featured_tags', action.id], action.tags, action.id);
|
||||
case FEATURED_TAGS_FETCH_REQUEST:
|
||||
return state.setIn(['featured_tags', action.id, 'isLoading'], true);
|
||||
case FEATURED_TAGS_FETCH_FAIL:
|
||||
return state.setIn(['featured_tags', action.id, 'isLoading'], false);
|
||||
default:
|
||||
if(fetchDirectory.fulfilled.match(action))
|
||||
if (fetchEndorsedAccounts.fulfilled.match(action))
|
||||
return normalizeList(state, ['featured_accounts', action.meta.arg.accountId], action.payload, undefined);
|
||||
else if (fetchEndorsedAccounts.pending.match(action))
|
||||
return state.setIn(['featured_accounts', action.meta.arg.accountId, 'isLoading'], true);
|
||||
else if (fetchEndorsedAccounts.rejected.match(action))
|
||||
return state.setIn(['featured_accounts', action.meta.arg.accountId, 'isLoading'], false);
|
||||
else if (fetchFeaturedTags.fulfilled.match(action))
|
||||
return normalizeFeaturedTags(state, ['featured_tags', action.meta.arg.accountId], action.payload, action.meta.arg.accountId);
|
||||
else if (fetchFeaturedTags.pending.match(action))
|
||||
return state.setIn(['featured_tags', action.meta.arg.accountId, 'isLoading'], true);
|
||||
else if (fetchFeaturedTags.rejected.match(action))
|
||||
return state.setIn(['featured_tags', action.meta.arg.accountId, 'isLoading'], false);
|
||||
else if (fetchDirectory.fulfilled.match(action))
|
||||
return normalizeList(state, ['directory'], action.payload.accounts, undefined);
|
||||
else if( expandDirectory.fulfilled.match(action))
|
||||
else if (expandDirectory.fulfilled.match(action))
|
||||
return appendToList(state, ['directory'], action.payload.accounts, undefined);
|
||||
else if(fetchDirectory.pending.match(action) ||
|
||||
else if (fetchDirectory.pending.match(action) ||
|
||||
expandDirectory.pending.match(action))
|
||||
return state.setIn(['directory', 'isLoading'], true);
|
||||
else if(fetchDirectory.rejected.match(action) ||
|
||||
else if (fetchDirectory.rejected.match(action) ||
|
||||
expandDirectory.rejected.match(action))
|
||||
return state.setIn(['directory', 'isLoading'], false);
|
||||
else
|
||||
|
||||
@@ -41,7 +41,7 @@ export const getDescendantsIds = createAppSelector(
|
||||
}
|
||||
|
||||
if (replies) {
|
||||
replies.reverse().forEach((replyId) => {
|
||||
replies.toReversed().forEach((replyId) => {
|
||||
if (
|
||||
!visitIds.includes(replyId) &&
|
||||
!descendantsIds.includes(replyId) &&
|
||||
|
||||
Reference in new issue
Block a user