mirror of
https://github.com/glitch-soc/mastodon.git
synced 2026-03-28 17:50:01 +01:00
Compare commits
34 Commits
6c2d53372b
...
6c6ea030f4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c6ea030f4 | ||
|
|
9ce81baff9 | ||
|
|
baa6af0e18 | ||
|
|
ff20ab7510 | ||
|
|
4bfd92310f | ||
|
|
97ff0f94bf | ||
|
|
ba4710debe | ||
|
|
a8109e50fc | ||
|
|
2a7e5fb3f7 | ||
|
|
8bc0170c02 | ||
|
|
787b00813e | ||
|
|
ffdf56b1e6 | ||
|
|
38bc7d2864 | ||
|
|
ed2a8c32ce | ||
|
|
830ffbe2da | ||
|
|
177d3c59d0 | ||
|
|
392a241637 | ||
|
|
34dbea26a7 | ||
|
|
516f0ce131 | ||
|
|
22724d2367 | ||
|
|
84feffd6e6 | ||
|
|
009275e66b | ||
|
|
3d55dcdf7f | ||
|
|
7e817f2471 | ||
|
|
c4a760d6ba | ||
|
|
dbc5af6641 | ||
|
|
71af094f97 | ||
|
|
d6a40c2891 | ||
|
|
a5362a4002 | ||
|
|
42d4753d30 | ||
|
|
8debc5760b | ||
|
|
5e8b8f9c23 | ||
|
|
db62d70492 | ||
|
|
a292162c5f |
@@ -1 +1 @@
|
||||
3.4.7
|
||||
3.4.8
|
||||
|
||||
@@ -27,6 +27,7 @@ const config: StorybookConfig = {
|
||||
'oops.gif',
|
||||
'oops.png',
|
||||
].map((path) => ({ from: `../public/${path}`, to: `/${path}` })),
|
||||
{ from: '../app/javascript/images/logo.svg', to: '/custom-emoji/logo.svg' },
|
||||
],
|
||||
viteFinal(config) {
|
||||
// For an unknown reason, Storybook does not use the root
|
||||
|
||||
@@ -13,7 +13,7 @@ ARG BASE_REGISTRY="docker.io"
|
||||
|
||||
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"]
|
||||
# renovate: datasource=docker depName=docker.io/ruby
|
||||
ARG RUBY_VERSION="3.4.7"
|
||||
ARG RUBY_VERSION="3.4.8"
|
||||
# # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="22"]
|
||||
# renovate: datasource=node-version depName=node
|
||||
ARG NODE_MAJOR_VERSION="24"
|
||||
|
||||
@@ -1093,4 +1093,4 @@ RUBY VERSION
|
||||
ruby 3.4.1p0
|
||||
|
||||
BUNDLED WITH
|
||||
4.0.1
|
||||
4.0.2
|
||||
|
||||
@@ -6,9 +6,9 @@ module Api::InteractionPoliciesConcern
|
||||
def quote_approval_policy
|
||||
case status_params[:quote_approval_policy].presence || current_user.setting_default_quote_policy
|
||||
when 'public'
|
||||
Status::QUOTE_APPROVAL_POLICY_FLAGS[:public] << 16
|
||||
InteractionPolicy::POLICY_FLAGS[:public] << 16
|
||||
when 'followers'
|
||||
Status::QUOTE_APPROVAL_POLICY_FLAGS[:followers] << 16
|
||||
InteractionPolicy::POLICY_FLAGS[:followers] << 16
|
||||
when 'nobody'
|
||||
0
|
||||
else
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module FiltersHelper
|
||||
KEYWORDS_LIMIT = 5
|
||||
|
||||
def filter_action_label(action)
|
||||
safe_join(
|
||||
[
|
||||
@@ -9,4 +11,10 @@ module FiltersHelper
|
||||
]
|
||||
)
|
||||
end
|
||||
|
||||
def filter_keywords(filter)
|
||||
filter.keywords.map(&:keyword).take(KEYWORDS_LIMIT).tap do |list|
|
||||
list << '…' if filter.keywords.size > KEYWORDS_LIMIT
|
||||
end.join(', ')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -709,7 +709,16 @@ export function selectComposeSuggestion(position, token, suggestion, path) {
|
||||
|
||||
dispatch(useEmoji(suggestion));
|
||||
} else if (suggestion.type === 'hashtag') {
|
||||
completion = token + suggestion.name.slice(token.length - 1);
|
||||
// TODO: it could make sense to keep the “most capitalized” of the two
|
||||
const tokenName = token.slice(1); // strip leading '#'
|
||||
const suggestionPrefix = suggestion.name.slice(0, tokenName.length);
|
||||
const prefixMatchesSuggestion = suggestionPrefix.localeCompare(tokenName, undefined, { sensitivity: 'accent' }) === 0;
|
||||
if (prefixMatchesSuggestion) {
|
||||
completion = token + suggestion.name.slice(tokenName.length);
|
||||
} else {
|
||||
completion = `${token.slice(0, 1)}${suggestion.name}`;
|
||||
}
|
||||
|
||||
startPosition = position - 1;
|
||||
} else if (suggestion.type === 'account') {
|
||||
completion = `@${getState().getIn(['accounts', suggestion.id, 'acct'])}`;
|
||||
|
||||
22
app/javascript/flavours/glitch/actions/importer/emoji.ts
Normal file
22
app/javascript/flavours/glitch/actions/importer/emoji.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import type { ApiCustomEmojiJSON } from '@/flavours/glitch/api_types/custom_emoji';
|
||||
import { loadCustomEmoji } from '@/flavours/glitch/features/emoji';
|
||||
|
||||
export async function importCustomEmoji(emojis: ApiCustomEmojiJSON[]) {
|
||||
if (emojis.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// First, check if we already have them all.
|
||||
const { searchCustomEmojisByShortcodes, clearEtag } =
|
||||
await import('@/flavours/glitch/features/emoji/database');
|
||||
|
||||
const existingEmojis = await searchCustomEmojisByShortcodes(
|
||||
emojis.map((emoji) => emoji.shortcode),
|
||||
);
|
||||
|
||||
// If there's a mismatch, re-import all custom emojis.
|
||||
if (existingEmojis.length < emojis.length) {
|
||||
await clearEtag('custom');
|
||||
await loadCustomEmoji();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import { createPollFromServerJSON } from 'flavours/glitch/models/poll';
|
||||
|
||||
import { importAccounts } from './accounts';
|
||||
import { importCustomEmoji } from './emoji';
|
||||
import { normalizeStatus } from './normalizer';
|
||||
import { importPolls } from './polls';
|
||||
|
||||
@@ -39,6 +40,10 @@ export function importFetchedAccounts(accounts) {
|
||||
if (account.moved) {
|
||||
processAccount(account.moved);
|
||||
}
|
||||
|
||||
if (account.emojis && account.username === account.acct) {
|
||||
importCustomEmoji(account.emojis);
|
||||
}
|
||||
}
|
||||
|
||||
accounts.forEach(processAccount);
|
||||
@@ -80,6 +85,10 @@ export function importFetchedStatuses(statuses, options = {}) {
|
||||
if (status.card) {
|
||||
status.card.authors.forEach(author => author.account && pushUnique(accounts, author.account));
|
||||
}
|
||||
|
||||
if (status.emojis && status.account.username === status.account.acct) {
|
||||
importCustomEmoji(status.emojis);
|
||||
}
|
||||
}
|
||||
|
||||
statuses.forEach(processStatus);
|
||||
|
||||
@@ -2,6 +2,8 @@ import escapeTextContentForBrowser from 'escape-html';
|
||||
|
||||
import { autoHideCW } from '../../utils/content_warning';
|
||||
|
||||
import { importCustomEmoji } from './emoji';
|
||||
|
||||
const domParser = new DOMParser();
|
||||
|
||||
export function searchTextFromRawStatus (status) {
|
||||
@@ -143,5 +145,9 @@ export function normalizeAnnouncement(announcement) {
|
||||
|
||||
normalAnnouncement.contentHtml = normalAnnouncement.content;
|
||||
|
||||
if (normalAnnouncement.emojis) {
|
||||
importCustomEmoji(normalAnnouncement.emojis);
|
||||
}
|
||||
|
||||
return normalAnnouncement;
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ export const ContentWarning: React.FC<{
|
||||
<EmojiHTML
|
||||
as='span'
|
||||
htmlString={text}
|
||||
extraEmojis={status.get('emoji') as List<CustomEmoji>}
|
||||
extraEmojis={status.get('emojis') as List<CustomEmoji>}
|
||||
/>
|
||||
</StatusBanner>
|
||||
);
|
||||
|
||||
@@ -2,6 +2,9 @@ import type { ComponentProps } from 'react';
|
||||
|
||||
import type { Meta, StoryObj } from '@storybook/react-vite';
|
||||
|
||||
import { customEmojiFactory } from '@/testing/factories';
|
||||
|
||||
import { CustomEmojiProvider } from './context';
|
||||
import { Emoji } from './index';
|
||||
|
||||
type EmojiProps = ComponentProps<typeof Emoji> & {
|
||||
@@ -34,7 +37,11 @@ const meta = {
|
||||
},
|
||||
},
|
||||
render(args) {
|
||||
return <Emoji {...args} />;
|
||||
return (
|
||||
<CustomEmojiProvider emojis={[customEmojiFactory()]}>
|
||||
<Emoji {...args} />
|
||||
</CustomEmojiProvider>
|
||||
);
|
||||
},
|
||||
} satisfies Meta<EmojiProps>;
|
||||
|
||||
@@ -49,9 +56,3 @@ export const CustomEmoji: Story = {
|
||||
code: ':custom:',
|
||||
},
|
||||
};
|
||||
|
||||
export const LegacyEmoji: Story = {
|
||||
args: {
|
||||
code: ':copyright:',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
.inlineIcon {
|
||||
vertical-align: middle;
|
||||
}
|
||||
@@ -12,6 +12,8 @@ import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||
import { Button } from '../button';
|
||||
import { Icon } from '../icon';
|
||||
|
||||
import classes from './remove_quote_hint.module.css';
|
||||
|
||||
const DISMISSIBLE_BANNER_ID = 'notifications/remove_quote_hint';
|
||||
|
||||
/**
|
||||
@@ -92,7 +94,7 @@ export const RemoveQuoteHint: React.FC<{
|
||||
id: 'status.more',
|
||||
defaultMessage: 'More',
|
||||
})}
|
||||
style={{ verticalAlign: 'middle' }}
|
||||
className={classes.inlineIcon}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
import { useCallback, useState, useRef, useEffect, useMemo } from 'react';
|
||||
import {
|
||||
useCallback,
|
||||
useState,
|
||||
useRef,
|
||||
useEffect,
|
||||
useMemo,
|
||||
useId,
|
||||
} from 'react';
|
||||
|
||||
import {
|
||||
defineMessages,
|
||||
@@ -432,12 +439,17 @@ export const Search: React.FC<{
|
||||
switch (e.key) {
|
||||
case 'Escape':
|
||||
e.preventDefault();
|
||||
unfocus();
|
||||
searchInputRef.current?.focus();
|
||||
setExpanded(false);
|
||||
|
||||
break;
|
||||
case 'ArrowDown':
|
||||
e.preventDefault();
|
||||
|
||||
if (!expanded) {
|
||||
setExpanded(true);
|
||||
}
|
||||
|
||||
if (navigableOptions.length > 0) {
|
||||
setSelectedOption(
|
||||
Math.min(selectedOption + 1, navigableOptions.length - 1),
|
||||
@@ -476,10 +488,10 @@ export const Search: React.FC<{
|
||||
break;
|
||||
}
|
||||
},
|
||||
[unfocus, navigableOptions, selectedOption, submit, value],
|
||||
[expanded, navigableOptions, selectedOption, submit, value],
|
||||
);
|
||||
|
||||
const handleFocus = useCallback(() => {
|
||||
const handleInputFocus = useCallback(() => {
|
||||
setExpanded(true);
|
||||
setSelectedOption(-1);
|
||||
|
||||
@@ -495,10 +507,16 @@ export const Search: React.FC<{
|
||||
}
|
||||
}, [setExpanded, setSelectedOption, singleColumn]);
|
||||
|
||||
const handleBlur = useCallback(() => {
|
||||
const handleInputBlur = useCallback(() => {
|
||||
setSelectedOption(-1);
|
||||
}, [setSelectedOption]);
|
||||
|
||||
const getOptionFocusHandler = useCallback((index: number) => {
|
||||
return () => {
|
||||
setSelectedOption(index);
|
||||
};
|
||||
}, []);
|
||||
|
||||
const formRef = useRef<HTMLFormElement>(null);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -526,6 +544,8 @@ export const Search: React.FC<{
|
||||
return () => null;
|
||||
}, [expanded]);
|
||||
|
||||
const searchOptionsHeading = useId();
|
||||
|
||||
return (
|
||||
<form ref={formRef} className={classNames('search', { active: expanded })}>
|
||||
<input
|
||||
@@ -541,13 +561,20 @@ export const Search: React.FC<{
|
||||
value={value}
|
||||
onChange={handleChange}
|
||||
onKeyDown={handleKeyDown}
|
||||
onFocus={handleFocus}
|
||||
onBlur={handleBlur}
|
||||
onFocus={handleInputFocus}
|
||||
onBlur={handleInputBlur}
|
||||
/>
|
||||
|
||||
<ClearButton hasValue={hasValue} onClick={handleClear} />
|
||||
|
||||
<div className='search__popout' tabIndex={-1}>
|
||||
{/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}
|
||||
<div
|
||||
className='search__popout'
|
||||
role='dialog'
|
||||
tabIndex={-1}
|
||||
aria-labelledby={searchOptionsHeading}
|
||||
onKeyDown={handleKeyDown}
|
||||
>
|
||||
{!hasValue && (
|
||||
<>
|
||||
<h4>
|
||||
@@ -565,6 +592,7 @@ export const Search: React.FC<{
|
||||
tabIndex={0}
|
||||
role='button'
|
||||
onMouseDown={action}
|
||||
onFocus={getOptionFocusHandler(i)}
|
||||
className={classNames(
|
||||
'search__popout__menu__item search__popout__menu__item--flex',
|
||||
{ selected: selectedOption === i },
|
||||
@@ -606,6 +634,7 @@ export const Search: React.FC<{
|
||||
<button
|
||||
key={key}
|
||||
onMouseDown={action}
|
||||
onFocus={getOptionFocusHandler(i)}
|
||||
className={classNames('search__popout__menu__item', {
|
||||
selected: selectedOption === i,
|
||||
})}
|
||||
@@ -618,7 +647,7 @@ export const Search: React.FC<{
|
||||
</>
|
||||
)}
|
||||
|
||||
<h4>
|
||||
<h4 id={searchOptionsHeading}>
|
||||
<FormattedMessage
|
||||
id='search_popout.options'
|
||||
defaultMessage='Search options'
|
||||
@@ -627,20 +656,22 @@ export const Search: React.FC<{
|
||||
|
||||
{searchEnabled && signedIn ? (
|
||||
<div className='search__popout__menu'>
|
||||
{searchOptions.map(({ key, label, action }, i) => (
|
||||
<button
|
||||
key={key}
|
||||
onMouseDown={action}
|
||||
className={classNames('search__popout__menu__item', {
|
||||
selected:
|
||||
selectedOption ===
|
||||
(quickActions.length || recent.length) + i,
|
||||
})}
|
||||
type='button'
|
||||
>
|
||||
{label}
|
||||
</button>
|
||||
))}
|
||||
{searchOptions.map(({ key, label, action }, i) => {
|
||||
const currentIndex = (quickActions.length || recent.length) + i;
|
||||
return (
|
||||
<button
|
||||
key={key}
|
||||
onMouseDown={action}
|
||||
onFocus={getOptionFocusHandler(currentIndex)}
|
||||
className={classNames('search__popout__menu__item', {
|
||||
selected: selectedOption === currentIndex,
|
||||
})}
|
||||
type='button'
|
||||
>
|
||||
{label}
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
) : (
|
||||
<div className='search__popout__menu__message'>
|
||||
|
||||
@@ -43,11 +43,26 @@ describe('emoji database', () => {
|
||||
describe('putCustomEmojiData', () => {
|
||||
test('loads custom emoji into indexedDB', async () => {
|
||||
const { db } = await testGet();
|
||||
await putCustomEmojiData([customEmojiFactory()]);
|
||||
await putCustomEmojiData({ emojis: [customEmojiFactory()] });
|
||||
await expect(db.get('custom', 'custom')).resolves.toEqual(
|
||||
customEmojiFactory(),
|
||||
);
|
||||
});
|
||||
|
||||
test('clears existing custom emoji if specified', async () => {
|
||||
const { db } = await testGet();
|
||||
await putCustomEmojiData({
|
||||
emojis: [customEmojiFactory({ shortcode: 'emoji1' })],
|
||||
});
|
||||
await putCustomEmojiData({
|
||||
emojis: [customEmojiFactory({ shortcode: 'emoji2' })],
|
||||
clear: true,
|
||||
});
|
||||
await expect(db.get('custom', 'emoji1')).resolves.toBeUndefined();
|
||||
await expect(db.get('custom', 'emoji2')).resolves.toEqual(
|
||||
customEmojiFactory({ shortcode: 'emoji2' }),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('putLegacyShortcodes', () => {
|
||||
|
||||
@@ -5,11 +5,7 @@ import { openDB } from 'idb';
|
||||
|
||||
import { EMOJI_DB_SHORTCODE_TEST } from './constants';
|
||||
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
|
||||
import type {
|
||||
CustomEmojiData,
|
||||
UnicodeEmojiData,
|
||||
LocaleOrCustom,
|
||||
} from './types';
|
||||
import type { CustomEmojiData, UnicodeEmojiData, EtagTypes } from './types';
|
||||
import { emojiLogger } from './utils';
|
||||
|
||||
interface EmojiDB extends LocaleTables, DBSchema {
|
||||
@@ -32,7 +28,7 @@ interface EmojiDB extends LocaleTables, DBSchema {
|
||||
};
|
||||
};
|
||||
etags: {
|
||||
key: LocaleOrCustom;
|
||||
key: EtagTypes;
|
||||
value: string;
|
||||
};
|
||||
}
|
||||
@@ -161,11 +157,26 @@ export async function putEmojiData(emojis: UnicodeEmojiData[], locale: Locale) {
|
||||
await trx.done;
|
||||
}
|
||||
|
||||
export async function putCustomEmojiData(emojis: CustomEmojiData[]) {
|
||||
export async function putCustomEmojiData({
|
||||
emojis,
|
||||
clear = false,
|
||||
}: {
|
||||
emojis: CustomEmojiData[];
|
||||
clear?: boolean;
|
||||
}) {
|
||||
const db = await loadDB();
|
||||
const trx = db.transaction('custom', 'readwrite');
|
||||
|
||||
// When importing from the API, clear everything first.
|
||||
if (clear) {
|
||||
await trx.store.clear();
|
||||
log('Cleared existing custom emojis in database');
|
||||
}
|
||||
|
||||
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
|
||||
await trx.done;
|
||||
|
||||
log('Imported %d custom emojis into database', emojis.length);
|
||||
}
|
||||
|
||||
export async function putLegacyShortcodes(shortcodes: ShortcodesDataset) {
|
||||
@@ -182,10 +193,16 @@ export async function putLegacyShortcodes(shortcodes: ShortcodesDataset) {
|
||||
await trx.done;
|
||||
}
|
||||
|
||||
export async function putLatestEtag(etag: string, localeString: string) {
|
||||
export async function putLatestEtag(etag: string, name: EtagTypes) {
|
||||
const db = await loadDB();
|
||||
await db.put('etags', etag, name);
|
||||
}
|
||||
|
||||
export async function clearEtag(localeString: string) {
|
||||
const locale = toSupportedLocaleOrCustom(localeString);
|
||||
const db = await loadDB();
|
||||
await db.put('etags', etag, locale);
|
||||
await db.delete('etags', locale);
|
||||
log('Cleared etag for %s', locale);
|
||||
}
|
||||
|
||||
export async function loadEmojiByHexcode(
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
import type { Locale } from 'emojibase';
|
||||
|
||||
import { initialState } from '@/flavours/glitch/initial_state';
|
||||
|
||||
import type { EMOJI_DB_NAME_SHORTCODES, EMOJI_TYPE_CUSTOM } from './constants';
|
||||
import { importLegacyShortcodes, localeToShortcodesPath } from './loader';
|
||||
import type { EMOJI_DB_NAME_SHORTCODES } from './constants';
|
||||
import { toSupportedLocale } from './locale';
|
||||
import type { LocaleOrCustom } from './types';
|
||||
import { emojiLogger } from './utils';
|
||||
// eslint-disable-next-line import/default -- Importing via worker loader.
|
||||
import EmojiWorker from './worker?worker&inline';
|
||||
|
||||
const userLocale = toSupportedLocale(initialState?.meta.locale ?? 'en');
|
||||
|
||||
@@ -16,50 +11,57 @@ let worker: Worker | null = null;
|
||||
|
||||
const log = emojiLogger('index');
|
||||
|
||||
const WORKER_TIMEOUT = 1_000; // 1 second
|
||||
// This is too short, but better to fallback quickly than wait.
|
||||
const WORKER_TIMEOUT = 1_000;
|
||||
|
||||
export function initializeEmoji() {
|
||||
export async function initializeEmoji() {
|
||||
log('initializing emojis');
|
||||
|
||||
// Create a temp worker, and assign it to the module-level worker once we know it's ready.
|
||||
let tempWorker: Worker | null = null;
|
||||
if (!worker && 'Worker' in window) {
|
||||
try {
|
||||
worker = new EmojiWorker();
|
||||
const { default: EmojiWorker } = await import('./worker?worker&inline');
|
||||
tempWorker = new EmojiWorker();
|
||||
} catch (err) {
|
||||
console.warn('Error creating web worker:', err);
|
||||
}
|
||||
}
|
||||
|
||||
if (worker) {
|
||||
const timeoutId = setTimeout(() => {
|
||||
log('worker is not ready after timeout');
|
||||
worker = null;
|
||||
void fallbackLoad();
|
||||
}, WORKER_TIMEOUT);
|
||||
worker.addEventListener('message', (event: MessageEvent<string>) => {
|
||||
const { data: message } = event;
|
||||
if (message === 'ready') {
|
||||
log('worker ready, loading data');
|
||||
clearTimeout(timeoutId);
|
||||
messageWorker('custom');
|
||||
messageWorker('shortcodes');
|
||||
void loadEmojiLocale(userLocale);
|
||||
} else {
|
||||
log('got worker message: %s', message);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (!tempWorker) {
|
||||
void fallbackLoad();
|
||||
return;
|
||||
}
|
||||
|
||||
const timeoutId = setTimeout(() => {
|
||||
log('worker is not ready after timeout');
|
||||
void fallbackLoad();
|
||||
}, WORKER_TIMEOUT);
|
||||
|
||||
tempWorker.addEventListener('message', (event: MessageEvent<string>) => {
|
||||
const { data: message } = event;
|
||||
|
||||
worker ??= tempWorker;
|
||||
|
||||
if (message === 'ready') {
|
||||
log('worker ready, loading data');
|
||||
clearTimeout(timeoutId);
|
||||
messageWorker('shortcodes');
|
||||
void loadCustomEmoji();
|
||||
void loadEmojiLocale(userLocale);
|
||||
} else {
|
||||
log('got worker message: %s', message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function fallbackLoad() {
|
||||
log('falling back to main thread for loading');
|
||||
const { importCustomEmojiData } = await import('./loader');
|
||||
const emojis = await importCustomEmojiData();
|
||||
if (emojis) {
|
||||
log('loaded %d custom emojis', emojis.length);
|
||||
}
|
||||
|
||||
await loadCustomEmoji();
|
||||
const { importLegacyShortcodes } = await import('./loader');
|
||||
const shortcodes = await importLegacyShortcodes();
|
||||
if (shortcodes.length) {
|
||||
if (shortcodes?.length) {
|
||||
log('loaded %d legacy shortcodes', shortcodes.length);
|
||||
}
|
||||
await loadEmojiLocale(userLocale);
|
||||
@@ -67,14 +69,11 @@ async function fallbackLoad() {
|
||||
|
||||
async function loadEmojiLocale(localeString: string) {
|
||||
const locale = toSupportedLocale(localeString);
|
||||
const { importEmojiData, localeToEmojiPath: localeToPath } =
|
||||
await import('./loader');
|
||||
const { importEmojiData } = await import('./loader');
|
||||
|
||||
if (worker) {
|
||||
const path = await localeToPath(locale);
|
||||
const shortcodesPath = await localeToShortcodesPath(locale);
|
||||
log('asking worker to load locale %s from %s', locale, path);
|
||||
messageWorker(locale, path, shortcodesPath);
|
||||
log('asking worker to load locale %s', locale);
|
||||
messageWorker(locale);
|
||||
} else {
|
||||
const emojis = await importEmojiData(locale);
|
||||
if (emojis) {
|
||||
@@ -83,17 +82,23 @@ async function loadEmojiLocale(localeString: string) {
|
||||
}
|
||||
}
|
||||
|
||||
function messageWorker(
|
||||
locale: typeof EMOJI_TYPE_CUSTOM | typeof EMOJI_DB_NAME_SHORTCODES,
|
||||
): void;
|
||||
function messageWorker(locale: Locale, path: string, shortcodes?: string): void;
|
||||
export async function loadCustomEmoji() {
|
||||
if (worker) {
|
||||
messageWorker('custom');
|
||||
} else {
|
||||
const { importCustomEmojiData } = await import('./loader');
|
||||
const emojis = await importCustomEmojiData();
|
||||
if (emojis && emojis.length > 0) {
|
||||
log('loaded %d custom emojis', emojis.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function messageWorker(
|
||||
locale: LocaleOrCustom | typeof EMOJI_DB_NAME_SHORTCODES,
|
||||
path?: string,
|
||||
shortcodes?: string,
|
||||
) {
|
||||
if (!worker) {
|
||||
return;
|
||||
}
|
||||
worker.postMessage({ locale, path, shortcodes });
|
||||
worker.postMessage({ locale });
|
||||
}
|
||||
|
||||
@@ -13,46 +13,35 @@ import {
|
||||
putLatestEtag,
|
||||
putLegacyShortcodes,
|
||||
} from './database';
|
||||
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
|
||||
import { toSupportedLocale, toValidEtagName } from './locale';
|
||||
import type { CustomEmojiData } from './types';
|
||||
import { emojiLogger } from './utils';
|
||||
|
||||
export async function importEmojiData(
|
||||
localeString: string,
|
||||
path?: string,
|
||||
shortcodes: boolean | string = true,
|
||||
) {
|
||||
const log = emojiLogger('loader');
|
||||
|
||||
export async function importEmojiData(localeString: string, shortcodes = true) {
|
||||
const locale = toSupportedLocale(localeString);
|
||||
|
||||
// Validate the provided path.
|
||||
if (path && !/^[/a-z]*\/packs\/assets\/compact-\w+\.json$/.test(path)) {
|
||||
throw new Error('Invalid path for emoji data');
|
||||
} else {
|
||||
// Otherwise get the path if not provided.
|
||||
path ??= await localeToEmojiPath(locale);
|
||||
}
|
||||
log(
|
||||
'importing emoji data for locale %s%s',
|
||||
locale,
|
||||
shortcodes ? ' and shortcodes' : '',
|
||||
);
|
||||
|
||||
const emojis = await fetchAndCheckEtag<CompactEmoji[]>(locale, path);
|
||||
const emojis = await fetchAndCheckEtag<CompactEmoji[]>({
|
||||
etagString: locale,
|
||||
path: localeToEmojiPath(locale),
|
||||
});
|
||||
if (!emojis) {
|
||||
return;
|
||||
}
|
||||
|
||||
const shortcodesData: ShortcodesDataset[] = [];
|
||||
if (shortcodes) {
|
||||
if (
|
||||
typeof shortcodes === 'string' &&
|
||||
!/^[/a-z]*\/packs\/assets\/shortcodes\/cldr\.json$/.test(shortcodes)
|
||||
) {
|
||||
throw new Error('Invalid path for shortcodes data');
|
||||
}
|
||||
const shortcodesPath =
|
||||
typeof shortcodes === 'string'
|
||||
? shortcodes
|
||||
: await localeToShortcodesPath(locale);
|
||||
const shortcodesResponse = await fetchAndCheckEtag<ShortcodesDataset>(
|
||||
locale,
|
||||
shortcodesPath,
|
||||
false,
|
||||
);
|
||||
const shortcodesResponse = await fetchAndCheckEtag<ShortcodesDataset>({
|
||||
etagString: `${locale}-shortcodes`,
|
||||
path: localeToShortcodesPath(locale),
|
||||
});
|
||||
if (shortcodesResponse) {
|
||||
shortcodesData.push(shortcodesResponse);
|
||||
} else {
|
||||
@@ -69,88 +58,88 @@ export async function importEmojiData(
|
||||
}
|
||||
|
||||
export async function importCustomEmojiData() {
|
||||
const emojis = await fetchAndCheckEtag<CustomEmojiData[]>(
|
||||
'custom',
|
||||
'/api/v1/custom_emojis',
|
||||
);
|
||||
const emojis = await fetchAndCheckEtag<CustomEmojiData[]>({
|
||||
etagString: 'custom',
|
||||
path: '/api/v1/custom_emojis',
|
||||
});
|
||||
if (!emojis) {
|
||||
return;
|
||||
}
|
||||
await putCustomEmojiData(emojis);
|
||||
await putCustomEmojiData({ emojis, clear: true });
|
||||
return emojis;
|
||||
}
|
||||
|
||||
export async function importLegacyShortcodes() {
|
||||
const { default: shortcodesPath } =
|
||||
await import('emojibase-data/en/shortcodes/iamcal.json?url');
|
||||
const response = await fetch(shortcodesPath);
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Failed to fetch legacy shortcodes data: ${response.statusText}`,
|
||||
);
|
||||
const globPaths = import.meta.glob<string>(
|
||||
// We use import.meta.glob to eagerly load the URL, as the regular import() doesn't work inside the Web Worker.
|
||||
'../../../../../../node_modules/emojibase-data/en/shortcodes/iamcal.json',
|
||||
{ eager: true, import: 'default', query: '?url' },
|
||||
);
|
||||
const path = Object.values(globPaths)[0];
|
||||
if (!path) {
|
||||
throw new Error('IAMCAL shortcodes path not found');
|
||||
}
|
||||
const shortcodesData = await fetchAndCheckEtag<ShortcodesDataset>({
|
||||
checkEtag: true,
|
||||
etagString: 'shortcodes',
|
||||
path,
|
||||
});
|
||||
if (!shortcodesData) {
|
||||
return;
|
||||
}
|
||||
const shortcodesData = (await response.json()) as ShortcodesDataset;
|
||||
await putLegacyShortcodes(shortcodesData);
|
||||
return Object.keys(shortcodesData);
|
||||
}
|
||||
|
||||
const emojiModules = new Map(
|
||||
Object.entries(
|
||||
import.meta.glob<string>(
|
||||
'../../../../../../node_modules/emojibase-data/**/compact.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
},
|
||||
),
|
||||
).map(([key, loader]) => {
|
||||
const match = /emojibase-data\/([^/]+)\/compact\.json$/.exec(key);
|
||||
return [match?.at(1) ?? key, loader];
|
||||
}),
|
||||
);
|
||||
|
||||
export function localeToEmojiPath(locale: Locale) {
|
||||
const path = emojiModules.get(locale);
|
||||
function localeToEmojiPath(locale: Locale) {
|
||||
const key = `../../../../../../node_modules/emojibase-data/${locale}/compact.json`;
|
||||
const emojiModules = import.meta.glob<string>(
|
||||
'../../../../../../node_modules/emojibase-data/**/compact.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
eager: true,
|
||||
},
|
||||
);
|
||||
const path = emojiModules[key];
|
||||
if (!path) {
|
||||
throw new Error(`Unsupported locale: ${locale}`);
|
||||
}
|
||||
return path();
|
||||
return path;
|
||||
}
|
||||
|
||||
const shortcodesModules = new Map(
|
||||
Object.entries(
|
||||
import.meta.glob<string>(
|
||||
'../../../../../../node_modules/emojibase-data/**/shortcodes/cldr.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
},
|
||||
),
|
||||
).map(([key, loader]) => {
|
||||
const match = /emojibase-data\/([^/]+)\/shortcodes\/cldr\.json$/.exec(key);
|
||||
return [match?.at(1) ?? key, loader];
|
||||
}),
|
||||
);
|
||||
|
||||
export function localeToShortcodesPath(locale: Locale) {
|
||||
const path = shortcodesModules.get(locale);
|
||||
function localeToShortcodesPath(locale: Locale) {
|
||||
const key = `../../../../../../node_modules/emojibase-data/${locale}/shortcodes/cldr.json`;
|
||||
const shortcodesModules = import.meta.glob<string>(
|
||||
'../../../../../../node_modules/emojibase-data/**/shortcodes/cldr.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
eager: true,
|
||||
},
|
||||
);
|
||||
const path = shortcodesModules[key];
|
||||
if (!path) {
|
||||
throw new Error(`Unsupported locale for shortcodes: ${locale}`);
|
||||
}
|
||||
return path();
|
||||
return path;
|
||||
}
|
||||
|
||||
export async function fetchAndCheckEtag<ResultType extends object[] | object>(
|
||||
localeString: string,
|
||||
path: string,
|
||||
checkEtag = true,
|
||||
): Promise<ResultType | null> {
|
||||
const locale = toSupportedLocaleOrCustom(localeString);
|
||||
async function fetchAndCheckEtag<ResultType extends object[] | object>({
|
||||
etagString,
|
||||
path,
|
||||
checkEtag = false,
|
||||
}: {
|
||||
etagString: string;
|
||||
path: string;
|
||||
checkEtag?: boolean;
|
||||
}): Promise<ResultType | null> {
|
||||
const etagName = toValidEtagName(etagString);
|
||||
|
||||
// Use location.origin as this script may be loaded from a CDN domain.
|
||||
const url = new URL(path, location.origin);
|
||||
|
||||
const oldEtag = checkEtag ? await loadLatestEtag(locale) : null;
|
||||
const oldEtag = checkEtag ? await loadLatestEtag(etagName) : null;
|
||||
const response = await fetch(url, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
@@ -163,7 +152,7 @@ export async function fetchAndCheckEtag<ResultType extends object[] | object>(
|
||||
}
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Failed to fetch emoji data for ${locale}: ${response.statusText}`,
|
||||
`Failed to fetch emoji data for ${etagName}: ${response.statusText}`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -172,7 +161,8 @@ export async function fetchAndCheckEtag<ResultType extends object[] | object>(
|
||||
// Store the ETag for future requests
|
||||
const etag = response.headers.get('ETag');
|
||||
if (etag && checkEtag) {
|
||||
await putLatestEtag(etag, localeString);
|
||||
log(`storing new etag for ${etagName}: ${etag}`);
|
||||
await putLatestEtag(etag, etagName);
|
||||
}
|
||||
|
||||
return data;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import type { Locale } from 'emojibase';
|
||||
import { SUPPORTED_LOCALES } from 'emojibase';
|
||||
|
||||
import type { LocaleOrCustom } from './types';
|
||||
import { EMOJI_DB_NAME_SHORTCODES, EMOJI_TYPE_CUSTOM } from './constants';
|
||||
import type { EtagTypes, LocaleOrCustom, LocaleWithShortcodes } from './types';
|
||||
|
||||
export function toSupportedLocale(localeBase: string): Locale {
|
||||
const locale = localeBase.toLowerCase();
|
||||
@@ -12,12 +13,35 @@ export function toSupportedLocale(localeBase: string): Locale {
|
||||
}
|
||||
|
||||
export function toSupportedLocaleOrCustom(locale: string): LocaleOrCustom {
|
||||
if (locale.toLowerCase() === 'custom') {
|
||||
return 'custom';
|
||||
if (locale.toLowerCase() === EMOJI_TYPE_CUSTOM) {
|
||||
return EMOJI_TYPE_CUSTOM;
|
||||
}
|
||||
return toSupportedLocale(locale);
|
||||
}
|
||||
|
||||
function isSupportedLocale(locale: string): locale is Locale {
|
||||
return SUPPORTED_LOCALES.includes(locale.toLowerCase() as Locale);
|
||||
export function toValidEtagName(input: string): EtagTypes {
|
||||
const lower = input.toLowerCase();
|
||||
if (lower === EMOJI_TYPE_CUSTOM || lower === EMOJI_DB_NAME_SHORTCODES) {
|
||||
return lower;
|
||||
}
|
||||
|
||||
if (isLocaleWithShortcodes(lower)) {
|
||||
return lower;
|
||||
}
|
||||
|
||||
return toSupportedLocale(lower);
|
||||
}
|
||||
|
||||
function isSupportedLocale(locale: string): locale is Locale {
|
||||
return SUPPORTED_LOCALES.includes(locale as Locale);
|
||||
}
|
||||
|
||||
function isLocaleWithShortcodes(input: string): input is LocaleWithShortcodes {
|
||||
const [baseLocale, shortcodes] = input.split('-');
|
||||
return (
|
||||
!!baseLocale &&
|
||||
!!shortcodes &&
|
||||
isSupportedLocale(baseLocale) &&
|
||||
shortcodes === EMOJI_DB_NAME_SHORTCODES
|
||||
);
|
||||
}
|
||||
|
||||
@@ -83,12 +83,8 @@ describe('stringToEmojiState', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('returns custom emoji state for valid custom emoji', () => {
|
||||
expect(stringToEmojiState(':smile:')).toEqual({
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
data: undefined,
|
||||
});
|
||||
test('returns null for custom emoji without data', () => {
|
||||
expect(stringToEmojiState(':smile:')).toBeNull();
|
||||
});
|
||||
|
||||
test('returns custom emoji state with data when provided', () => {
|
||||
@@ -108,7 +104,6 @@ describe('stringToEmojiState', () => {
|
||||
|
||||
test('returns null for invalid emoji strings', () => {
|
||||
expect(stringToEmojiState('notanemoji')).toBeNull();
|
||||
expect(stringToEmojiState(':invalid-emoji:')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -142,21 +137,13 @@ describe('loadEmojiDataToState', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('loads custom emoji data into state', async () => {
|
||||
const dbCall = vi
|
||||
.spyOn(db, 'loadCustomEmojiByShortcode')
|
||||
.mockResolvedValueOnce(customEmojiFactory());
|
||||
test('returns null for custom emoji without data', async () => {
|
||||
const customState = {
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
} as const satisfies EmojiStateCustom;
|
||||
const result = await loadEmojiDataToState(customState, 'en');
|
||||
expect(dbCall).toHaveBeenCalledWith('smile');
|
||||
expect(result).toEqual({
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
data: customEmojiFactory(),
|
||||
});
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('loads unicode data using legacy shortcode', async () => {
|
||||
@@ -194,16 +181,6 @@ describe('loadEmojiDataToState', () => {
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('returns null if custom emoji not found in database', async () => {
|
||||
vi.spyOn(db, 'loadCustomEmojiByShortcode').mockResolvedValueOnce(undefined);
|
||||
const customState = {
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
} as const satisfies EmojiStateCustom;
|
||||
const result = await loadEmojiDataToState(customState, 'en');
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('retries loading emoji data once if initial load fails', async () => {
|
||||
const dbCall = vi
|
||||
.spyOn(db, 'loadEmojiByHexcode')
|
||||
|
||||
@@ -4,13 +4,6 @@ import {
|
||||
EMOJI_TYPE_UNICODE,
|
||||
EMOJI_TYPE_CUSTOM,
|
||||
} from './constants';
|
||||
import {
|
||||
loadCustomEmojiByShortcode,
|
||||
loadEmojiByHexcode,
|
||||
loadLegacyShortcodesByShortcode,
|
||||
LocaleNotLoadedError,
|
||||
} from './database';
|
||||
import { importEmojiData } from './loader';
|
||||
import { emojiToUnicodeHex } from './normalize';
|
||||
import type {
|
||||
EmojiLoadedState,
|
||||
@@ -80,7 +73,7 @@ export function tokenizeText(text: string): TokenizedText {
|
||||
export function stringToEmojiState(
|
||||
code: string,
|
||||
customEmoji: ExtraCustomEmojiMap = {},
|
||||
): EmojiState | null {
|
||||
): EmojiStateUnicode | Required<EmojiStateCustom> | null {
|
||||
if (isUnicodeEmoji(code)) {
|
||||
return {
|
||||
type: EMOJI_TYPE_UNICODE,
|
||||
@@ -90,11 +83,13 @@ export function stringToEmojiState(
|
||||
|
||||
if (isCustomEmoji(code)) {
|
||||
const shortCode = code.slice(1, -1);
|
||||
return {
|
||||
type: EMOJI_TYPE_CUSTOM,
|
||||
code: shortCode,
|
||||
data: customEmoji[shortCode],
|
||||
};
|
||||
if (customEmoji[shortCode]) {
|
||||
return {
|
||||
type: EMOJI_TYPE_CUSTOM,
|
||||
code: shortCode,
|
||||
data: customEmoji[shortCode],
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -115,33 +110,35 @@ export async function loadEmojiDataToState(
|
||||
return state;
|
||||
}
|
||||
|
||||
// Don't try to load data for custom emoji.
|
||||
if (state.type === EMOJI_TYPE_CUSTOM) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const {
|
||||
loadLegacyShortcodesByShortcode,
|
||||
loadEmojiByHexcode,
|
||||
LocaleNotLoadedError,
|
||||
} = await import('./database');
|
||||
|
||||
// First, try to load the data from IndexedDB.
|
||||
try {
|
||||
const legacyCode = await loadLegacyShortcodesByShortcode(state.code);
|
||||
// This is duplicative, but that's because TS can't distinguish the state type easily.
|
||||
if (state.type === EMOJI_TYPE_UNICODE || legacyCode) {
|
||||
const data = await loadEmojiByHexcode(
|
||||
legacyCode?.hexcode ?? state.code,
|
||||
locale,
|
||||
);
|
||||
if (data) {
|
||||
return {
|
||||
...state,
|
||||
type: EMOJI_TYPE_UNICODE,
|
||||
data,
|
||||
// TODO: Use CLDR shortcodes when the picker supports them.
|
||||
shortcode: legacyCode?.shortcodes.at(0),
|
||||
};
|
||||
}
|
||||
} else {
|
||||
const data = await loadCustomEmojiByShortcode(state.code);
|
||||
if (data) {
|
||||
return {
|
||||
...state,
|
||||
data,
|
||||
};
|
||||
}
|
||||
const data = await loadEmojiByHexcode(
|
||||
legacyCode?.hexcode ?? state.code,
|
||||
locale,
|
||||
);
|
||||
if (data) {
|
||||
return {
|
||||
...state,
|
||||
type: EMOJI_TYPE_UNICODE,
|
||||
data,
|
||||
// TODO: Use CLDR shortcodes when the picker supports them.
|
||||
shortcode: legacyCode?.shortcodes.at(0),
|
||||
};
|
||||
}
|
||||
|
||||
// If not found, assume it's not an emoji and return null.
|
||||
log(
|
||||
'Could not find emoji %s of type %s for locale %s',
|
||||
@@ -158,6 +155,7 @@ export async function loadEmojiDataToState(
|
||||
state.code,
|
||||
locale,
|
||||
);
|
||||
const { importEmojiData } = await import('./loader');
|
||||
await importEmojiData(locale); // Use this from the loader file as it can be awaited.
|
||||
return loadEmojiDataToState(state, locale, true);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import type { CustomEmoji } from '@/flavours/glitch/models/custom_emoji';
|
||||
import type { RequiredExcept } from '@/flavours/glitch/utils/types';
|
||||
|
||||
import type {
|
||||
EMOJI_DB_NAME_SHORTCODES,
|
||||
EMOJI_MODE_NATIVE,
|
||||
EMOJI_MODE_NATIVE_WITH_FLAGS,
|
||||
EMOJI_MODE_TWEMOJI,
|
||||
@@ -20,6 +21,11 @@ export type EmojiMode =
|
||||
| typeof EMOJI_MODE_TWEMOJI;
|
||||
|
||||
export type LocaleOrCustom = Locale | typeof EMOJI_TYPE_CUSTOM;
|
||||
export type LocaleWithShortcodes = `${Locale}-shortcodes`;
|
||||
export type EtagTypes =
|
||||
| LocaleOrCustom
|
||||
| typeof EMOJI_DB_NAME_SHORTCODES
|
||||
| LocaleWithShortcodes;
|
||||
|
||||
export interface EmojiAppState {
|
||||
locales: Locale[];
|
||||
|
||||
@@ -8,24 +8,23 @@ import {
|
||||
addEventListener('message', handleMessage);
|
||||
self.postMessage('ready'); // After the worker is ready, notify the main thread
|
||||
|
||||
function handleMessage(event: MessageEvent<{ locale: string; path?: string }>) {
|
||||
function handleMessage(event: MessageEvent<{ locale: string }>) {
|
||||
const {
|
||||
data: { locale, path },
|
||||
data: { locale },
|
||||
} = event;
|
||||
void loadData(locale, path);
|
||||
void loadData(locale);
|
||||
}
|
||||
|
||||
async function loadData(locale: string, path?: string) {
|
||||
async function loadData(locale: string) {
|
||||
let importCount: number | undefined;
|
||||
if (locale === EMOJI_TYPE_CUSTOM) {
|
||||
importCount = (await importCustomEmojiData())?.length;
|
||||
} else if (locale === EMOJI_DB_NAME_SHORTCODES) {
|
||||
importCount = (await importLegacyShortcodes()).length;
|
||||
} else if (path) {
|
||||
importCount = (await importEmojiData(locale, path))?.length;
|
||||
importCount = (await importLegacyShortcodes())?.length;
|
||||
} else {
|
||||
throw new Error('Path is required for loading locale emoji data');
|
||||
importCount = (await importEmojiData(locale))?.length;
|
||||
}
|
||||
|
||||
if (importCount) {
|
||||
self.postMessage(`loaded ${importCount} emojis into ${locale}`);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ export const EmbeddedStatusContent: React.FC<{
|
||||
className={className}
|
||||
lang={status.get('language') as string}
|
||||
htmlString={status.get('contentHtml') as string}
|
||||
extraEmojis={status.get('emoji') as List<CustomEmoji>}
|
||||
extraEmojis={status.get('emojis') as List<CustomEmoji>}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -30,7 +30,7 @@ function main() {
|
||||
}
|
||||
|
||||
const { initializeEmoji } = await import('./features/emoji/index');
|
||||
initializeEmoji();
|
||||
await initializeEmoji();
|
||||
|
||||
const root = createRoot(mountNode);
|
||||
root.render(<Mastodon {...props} />);
|
||||
|
||||
@@ -675,7 +675,16 @@ export function selectComposeSuggestion(position, token, suggestion, path) {
|
||||
|
||||
dispatch(useEmoji(suggestion));
|
||||
} else if (suggestion.type === 'hashtag') {
|
||||
completion = token + suggestion.name.slice(token.length - 1);
|
||||
// TODO: it could make sense to keep the “most capitalized” of the two
|
||||
const tokenName = token.slice(1); // strip leading '#'
|
||||
const suggestionPrefix = suggestion.name.slice(0, tokenName.length);
|
||||
const prefixMatchesSuggestion = suggestionPrefix.localeCompare(tokenName, undefined, { sensitivity: 'accent' }) === 0;
|
||||
if (prefixMatchesSuggestion) {
|
||||
completion = token + suggestion.name.slice(tokenName.length);
|
||||
} else {
|
||||
completion = `${token.slice(0, 1)}${suggestion.name}`;
|
||||
}
|
||||
|
||||
startPosition = position - 1;
|
||||
} else if (suggestion.type === 'account') {
|
||||
completion = `@${getState().getIn(['accounts', suggestion.id, 'acct'])}`;
|
||||
|
||||
22
app/javascript/mastodon/actions/importer/emoji.ts
Normal file
22
app/javascript/mastodon/actions/importer/emoji.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import type { ApiCustomEmojiJSON } from '@/mastodon/api_types/custom_emoji';
|
||||
import { loadCustomEmoji } from '@/mastodon/features/emoji';
|
||||
|
||||
export async function importCustomEmoji(emojis: ApiCustomEmojiJSON[]) {
|
||||
if (emojis.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// First, check if we already have them all.
|
||||
const { searchCustomEmojisByShortcodes, clearEtag } =
|
||||
await import('@/mastodon/features/emoji/database');
|
||||
|
||||
const existingEmojis = await searchCustomEmojisByShortcodes(
|
||||
emojis.map((emoji) => emoji.shortcode),
|
||||
);
|
||||
|
||||
// If there's a mismatch, re-import all custom emojis.
|
||||
if (existingEmojis.length < emojis.length) {
|
||||
await clearEtag('custom');
|
||||
await loadCustomEmoji();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import { createPollFromServerJSON } from 'mastodon/models/poll';
|
||||
|
||||
import { importAccounts } from './accounts';
|
||||
import { importCustomEmoji } from './emoji';
|
||||
import { normalizeStatus } from './normalizer';
|
||||
import { importPolls } from './polls';
|
||||
|
||||
@@ -39,6 +40,10 @@ export function importFetchedAccounts(accounts) {
|
||||
if (account.moved) {
|
||||
processAccount(account.moved);
|
||||
}
|
||||
|
||||
if (account.emojis && account.username === account.acct) {
|
||||
importCustomEmoji(account.emojis);
|
||||
}
|
||||
}
|
||||
|
||||
accounts.forEach(processAccount);
|
||||
@@ -80,6 +85,10 @@ export function importFetchedStatuses(statuses, options = {}) {
|
||||
if (status.card) {
|
||||
status.card.authors.forEach(author => author.account && pushUnique(accounts, author.account));
|
||||
}
|
||||
|
||||
if (status.emojis && status.account.username === status.account.acct) {
|
||||
importCustomEmoji(status.emojis);
|
||||
}
|
||||
}
|
||||
|
||||
statuses.forEach(processStatus);
|
||||
|
||||
@@ -2,6 +2,8 @@ import escapeTextContentForBrowser from 'escape-html';
|
||||
|
||||
import { expandSpoilers } from '../../initial_state';
|
||||
|
||||
import { importCustomEmoji } from './emoji';
|
||||
|
||||
const domParser = new DOMParser();
|
||||
|
||||
export function searchTextFromRawStatus (status) {
|
||||
@@ -151,5 +153,9 @@ export function normalizeAnnouncement(announcement) {
|
||||
|
||||
normalAnnouncement.contentHtml = normalAnnouncement.content;
|
||||
|
||||
if (normalAnnouncement.emojis) {
|
||||
importCustomEmoji(normalAnnouncement.emojis);
|
||||
}
|
||||
|
||||
return normalAnnouncement;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ export const ContentWarning: React.FC<{
|
||||
<EmojiHTML
|
||||
as='span'
|
||||
htmlString={text}
|
||||
extraEmojis={status.get('emoji') as List<CustomEmoji>}
|
||||
extraEmojis={status.get('emojis') as List<CustomEmoji>}
|
||||
/>
|
||||
</StatusBanner>
|
||||
);
|
||||
|
||||
@@ -2,6 +2,9 @@ import type { ComponentProps } from 'react';
|
||||
|
||||
import type { Meta, StoryObj } from '@storybook/react-vite';
|
||||
|
||||
import { customEmojiFactory } from '@/testing/factories';
|
||||
|
||||
import { CustomEmojiProvider } from './context';
|
||||
import { Emoji } from './index';
|
||||
|
||||
type EmojiProps = ComponentProps<typeof Emoji> & {
|
||||
@@ -34,7 +37,11 @@ const meta = {
|
||||
},
|
||||
},
|
||||
render(args) {
|
||||
return <Emoji {...args} />;
|
||||
return (
|
||||
<CustomEmojiProvider emojis={[customEmojiFactory()]}>
|
||||
<Emoji {...args} />
|
||||
</CustomEmojiProvider>
|
||||
);
|
||||
},
|
||||
} satisfies Meta<EmojiProps>;
|
||||
|
||||
@@ -49,9 +56,3 @@ export const CustomEmoji: Story = {
|
||||
code: ':custom:',
|
||||
},
|
||||
};
|
||||
|
||||
export const LegacyEmoji: Story = {
|
||||
args: {
|
||||
code: ':copyright:',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
.inlineIcon {
|
||||
vertical-align: middle;
|
||||
}
|
||||
@@ -12,6 +12,8 @@ import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||
import { Button } from '../button';
|
||||
import { Icon } from '../icon';
|
||||
|
||||
import classes from './remove_quote_hint.module.css';
|
||||
|
||||
const DISMISSIBLE_BANNER_ID = 'notifications/remove_quote_hint';
|
||||
|
||||
/**
|
||||
@@ -92,7 +94,7 @@ export const RemoveQuoteHint: React.FC<{
|
||||
id: 'status.more',
|
||||
defaultMessage: 'More',
|
||||
})}
|
||||
style={{ verticalAlign: 'middle' }}
|
||||
className={classes.inlineIcon}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
import { useCallback, useState, useRef, useEffect, useMemo } from 'react';
|
||||
import {
|
||||
useCallback,
|
||||
useState,
|
||||
useRef,
|
||||
useEffect,
|
||||
useMemo,
|
||||
useId,
|
||||
} from 'react';
|
||||
|
||||
import {
|
||||
defineMessages,
|
||||
@@ -432,12 +439,17 @@ export const Search: React.FC<{
|
||||
switch (e.key) {
|
||||
case 'Escape':
|
||||
e.preventDefault();
|
||||
unfocus();
|
||||
searchInputRef.current?.focus();
|
||||
setExpanded(false);
|
||||
|
||||
break;
|
||||
case 'ArrowDown':
|
||||
e.preventDefault();
|
||||
|
||||
if (!expanded) {
|
||||
setExpanded(true);
|
||||
}
|
||||
|
||||
if (navigableOptions.length > 0) {
|
||||
setSelectedOption(
|
||||
Math.min(selectedOption + 1, navigableOptions.length - 1),
|
||||
@@ -476,10 +488,10 @@ export const Search: React.FC<{
|
||||
break;
|
||||
}
|
||||
},
|
||||
[unfocus, navigableOptions, selectedOption, submit, value],
|
||||
[expanded, navigableOptions, selectedOption, submit, value],
|
||||
);
|
||||
|
||||
const handleFocus = useCallback(() => {
|
||||
const handleInputFocus = useCallback(() => {
|
||||
setExpanded(true);
|
||||
setSelectedOption(-1);
|
||||
|
||||
@@ -495,10 +507,16 @@ export const Search: React.FC<{
|
||||
}
|
||||
}, [setExpanded, setSelectedOption, singleColumn]);
|
||||
|
||||
const handleBlur = useCallback(() => {
|
||||
const handleInputBlur = useCallback(() => {
|
||||
setSelectedOption(-1);
|
||||
}, [setSelectedOption]);
|
||||
|
||||
const getOptionFocusHandler = useCallback((index: number) => {
|
||||
return () => {
|
||||
setSelectedOption(index);
|
||||
};
|
||||
}, []);
|
||||
|
||||
const formRef = useRef<HTMLFormElement>(null);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -526,6 +544,8 @@ export const Search: React.FC<{
|
||||
return () => null;
|
||||
}, [expanded]);
|
||||
|
||||
const searchOptionsHeading = useId();
|
||||
|
||||
return (
|
||||
<form ref={formRef} className={classNames('search', { active: expanded })}>
|
||||
<input
|
||||
@@ -541,13 +561,20 @@ export const Search: React.FC<{
|
||||
value={value}
|
||||
onChange={handleChange}
|
||||
onKeyDown={handleKeyDown}
|
||||
onFocus={handleFocus}
|
||||
onBlur={handleBlur}
|
||||
onFocus={handleInputFocus}
|
||||
onBlur={handleInputBlur}
|
||||
/>
|
||||
|
||||
<ClearButton hasValue={hasValue} onClick={handleClear} />
|
||||
|
||||
<div className='search__popout' tabIndex={-1}>
|
||||
{/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}
|
||||
<div
|
||||
className='search__popout'
|
||||
role='dialog'
|
||||
tabIndex={-1}
|
||||
aria-labelledby={searchOptionsHeading}
|
||||
onKeyDown={handleKeyDown}
|
||||
>
|
||||
{!hasValue && (
|
||||
<>
|
||||
<h4>
|
||||
@@ -565,6 +592,7 @@ export const Search: React.FC<{
|
||||
tabIndex={0}
|
||||
role='button'
|
||||
onMouseDown={action}
|
||||
onFocus={getOptionFocusHandler(i)}
|
||||
className={classNames(
|
||||
'search__popout__menu__item search__popout__menu__item--flex',
|
||||
{ selected: selectedOption === i },
|
||||
@@ -606,6 +634,7 @@ export const Search: React.FC<{
|
||||
<button
|
||||
key={key}
|
||||
onMouseDown={action}
|
||||
onFocus={getOptionFocusHandler(i)}
|
||||
className={classNames('search__popout__menu__item', {
|
||||
selected: selectedOption === i,
|
||||
})}
|
||||
@@ -618,7 +647,7 @@ export const Search: React.FC<{
|
||||
</>
|
||||
)}
|
||||
|
||||
<h4>
|
||||
<h4 id={searchOptionsHeading}>
|
||||
<FormattedMessage
|
||||
id='search_popout.options'
|
||||
defaultMessage='Search options'
|
||||
@@ -627,20 +656,22 @@ export const Search: React.FC<{
|
||||
|
||||
{searchEnabled && signedIn ? (
|
||||
<div className='search__popout__menu'>
|
||||
{searchOptions.map(({ key, label, action }, i) => (
|
||||
<button
|
||||
key={key}
|
||||
onMouseDown={action}
|
||||
className={classNames('search__popout__menu__item', {
|
||||
selected:
|
||||
selectedOption ===
|
||||
(quickActions.length || recent.length) + i,
|
||||
})}
|
||||
type='button'
|
||||
>
|
||||
{label}
|
||||
</button>
|
||||
))}
|
||||
{searchOptions.map(({ key, label, action }, i) => {
|
||||
const currentIndex = (quickActions.length || recent.length) + i;
|
||||
return (
|
||||
<button
|
||||
key={key}
|
||||
onMouseDown={action}
|
||||
onFocus={getOptionFocusHandler(currentIndex)}
|
||||
className={classNames('search__popout__menu__item', {
|
||||
selected: selectedOption === currentIndex,
|
||||
})}
|
||||
type='button'
|
||||
>
|
||||
{label}
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
) : (
|
||||
<div className='search__popout__menu__message'>
|
||||
|
||||
@@ -43,11 +43,26 @@ describe('emoji database', () => {
|
||||
describe('putCustomEmojiData', () => {
|
||||
test('loads custom emoji into indexedDB', async () => {
|
||||
const { db } = await testGet();
|
||||
await putCustomEmojiData([customEmojiFactory()]);
|
||||
await putCustomEmojiData({ emojis: [customEmojiFactory()] });
|
||||
await expect(db.get('custom', 'custom')).resolves.toEqual(
|
||||
customEmojiFactory(),
|
||||
);
|
||||
});
|
||||
|
||||
test('clears existing custom emoji if specified', async () => {
|
||||
const { db } = await testGet();
|
||||
await putCustomEmojiData({
|
||||
emojis: [customEmojiFactory({ shortcode: 'emoji1' })],
|
||||
});
|
||||
await putCustomEmojiData({
|
||||
emojis: [customEmojiFactory({ shortcode: 'emoji2' })],
|
||||
clear: true,
|
||||
});
|
||||
await expect(db.get('custom', 'emoji1')).resolves.toBeUndefined();
|
||||
await expect(db.get('custom', 'emoji2')).resolves.toEqual(
|
||||
customEmojiFactory({ shortcode: 'emoji2' }),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('putLegacyShortcodes', () => {
|
||||
|
||||
@@ -5,11 +5,7 @@ import { openDB } from 'idb';
|
||||
|
||||
import { EMOJI_DB_SHORTCODE_TEST } from './constants';
|
||||
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
|
||||
import type {
|
||||
CustomEmojiData,
|
||||
UnicodeEmojiData,
|
||||
LocaleOrCustom,
|
||||
} from './types';
|
||||
import type { CustomEmojiData, UnicodeEmojiData, EtagTypes } from './types';
|
||||
import { emojiLogger } from './utils';
|
||||
|
||||
interface EmojiDB extends LocaleTables, DBSchema {
|
||||
@@ -32,7 +28,7 @@ interface EmojiDB extends LocaleTables, DBSchema {
|
||||
};
|
||||
};
|
||||
etags: {
|
||||
key: LocaleOrCustom;
|
||||
key: EtagTypes;
|
||||
value: string;
|
||||
};
|
||||
}
|
||||
@@ -161,11 +157,26 @@ export async function putEmojiData(emojis: UnicodeEmojiData[], locale: Locale) {
|
||||
await trx.done;
|
||||
}
|
||||
|
||||
export async function putCustomEmojiData(emojis: CustomEmojiData[]) {
|
||||
export async function putCustomEmojiData({
|
||||
emojis,
|
||||
clear = false,
|
||||
}: {
|
||||
emojis: CustomEmojiData[];
|
||||
clear?: boolean;
|
||||
}) {
|
||||
const db = await loadDB();
|
||||
const trx = db.transaction('custom', 'readwrite');
|
||||
|
||||
// When importing from the API, clear everything first.
|
||||
if (clear) {
|
||||
await trx.store.clear();
|
||||
log('Cleared existing custom emojis in database');
|
||||
}
|
||||
|
||||
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
|
||||
await trx.done;
|
||||
|
||||
log('Imported %d custom emojis into database', emojis.length);
|
||||
}
|
||||
|
||||
export async function putLegacyShortcodes(shortcodes: ShortcodesDataset) {
|
||||
@@ -182,10 +193,16 @@ export async function putLegacyShortcodes(shortcodes: ShortcodesDataset) {
|
||||
await trx.done;
|
||||
}
|
||||
|
||||
export async function putLatestEtag(etag: string, localeString: string) {
|
||||
export async function putLatestEtag(etag: string, name: EtagTypes) {
|
||||
const db = await loadDB();
|
||||
await db.put('etags', etag, name);
|
||||
}
|
||||
|
||||
export async function clearEtag(localeString: string) {
|
||||
const locale = toSupportedLocaleOrCustom(localeString);
|
||||
const db = await loadDB();
|
||||
await db.put('etags', etag, locale);
|
||||
await db.delete('etags', locale);
|
||||
log('Cleared etag for %s', locale);
|
||||
}
|
||||
|
||||
export async function loadEmojiByHexcode(
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
import type { Locale } from 'emojibase';
|
||||
|
||||
import { initialState } from '@/mastodon/initial_state';
|
||||
|
||||
import type { EMOJI_DB_NAME_SHORTCODES, EMOJI_TYPE_CUSTOM } from './constants';
|
||||
import { importLegacyShortcodes, localeToShortcodesPath } from './loader';
|
||||
import type { EMOJI_DB_NAME_SHORTCODES } from './constants';
|
||||
import { toSupportedLocale } from './locale';
|
||||
import type { LocaleOrCustom } from './types';
|
||||
import { emojiLogger } from './utils';
|
||||
// eslint-disable-next-line import/default -- Importing via worker loader.
|
||||
import EmojiWorker from './worker?worker&inline';
|
||||
|
||||
const userLocale = toSupportedLocale(initialState?.meta.locale ?? 'en');
|
||||
|
||||
@@ -16,50 +11,57 @@ let worker: Worker | null = null;
|
||||
|
||||
const log = emojiLogger('index');
|
||||
|
||||
const WORKER_TIMEOUT = 1_000; // 1 second
|
||||
// This is too short, but better to fallback quickly than wait.
|
||||
const WORKER_TIMEOUT = 1_000;
|
||||
|
||||
export function initializeEmoji() {
|
||||
export async function initializeEmoji() {
|
||||
log('initializing emojis');
|
||||
|
||||
// Create a temp worker, and assign it to the module-level worker once we know it's ready.
|
||||
let tempWorker: Worker | null = null;
|
||||
if (!worker && 'Worker' in window) {
|
||||
try {
|
||||
worker = new EmojiWorker();
|
||||
const { default: EmojiWorker } = await import('./worker?worker&inline');
|
||||
tempWorker = new EmojiWorker();
|
||||
} catch (err) {
|
||||
console.warn('Error creating web worker:', err);
|
||||
}
|
||||
}
|
||||
|
||||
if (worker) {
|
||||
const timeoutId = setTimeout(() => {
|
||||
log('worker is not ready after timeout');
|
||||
worker = null;
|
||||
void fallbackLoad();
|
||||
}, WORKER_TIMEOUT);
|
||||
worker.addEventListener('message', (event: MessageEvent<string>) => {
|
||||
const { data: message } = event;
|
||||
if (message === 'ready') {
|
||||
log('worker ready, loading data');
|
||||
clearTimeout(timeoutId);
|
||||
messageWorker('custom');
|
||||
messageWorker('shortcodes');
|
||||
void loadEmojiLocale(userLocale);
|
||||
} else {
|
||||
log('got worker message: %s', message);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (!tempWorker) {
|
||||
void fallbackLoad();
|
||||
return;
|
||||
}
|
||||
|
||||
const timeoutId = setTimeout(() => {
|
||||
log('worker is not ready after timeout');
|
||||
void fallbackLoad();
|
||||
}, WORKER_TIMEOUT);
|
||||
|
||||
tempWorker.addEventListener('message', (event: MessageEvent<string>) => {
|
||||
const { data: message } = event;
|
||||
|
||||
worker ??= tempWorker;
|
||||
|
||||
if (message === 'ready') {
|
||||
log('worker ready, loading data');
|
||||
clearTimeout(timeoutId);
|
||||
messageWorker('shortcodes');
|
||||
void loadCustomEmoji();
|
||||
void loadEmojiLocale(userLocale);
|
||||
} else {
|
||||
log('got worker message: %s', message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function fallbackLoad() {
|
||||
log('falling back to main thread for loading');
|
||||
const { importCustomEmojiData } = await import('./loader');
|
||||
const emojis = await importCustomEmojiData();
|
||||
if (emojis) {
|
||||
log('loaded %d custom emojis', emojis.length);
|
||||
}
|
||||
|
||||
await loadCustomEmoji();
|
||||
const { importLegacyShortcodes } = await import('./loader');
|
||||
const shortcodes = await importLegacyShortcodes();
|
||||
if (shortcodes.length) {
|
||||
if (shortcodes?.length) {
|
||||
log('loaded %d legacy shortcodes', shortcodes.length);
|
||||
}
|
||||
await loadEmojiLocale(userLocale);
|
||||
@@ -67,14 +69,11 @@ async function fallbackLoad() {
|
||||
|
||||
async function loadEmojiLocale(localeString: string) {
|
||||
const locale = toSupportedLocale(localeString);
|
||||
const { importEmojiData, localeToEmojiPath: localeToPath } =
|
||||
await import('./loader');
|
||||
const { importEmojiData } = await import('./loader');
|
||||
|
||||
if (worker) {
|
||||
const path = await localeToPath(locale);
|
||||
const shortcodesPath = await localeToShortcodesPath(locale);
|
||||
log('asking worker to load locale %s from %s', locale, path);
|
||||
messageWorker(locale, path, shortcodesPath);
|
||||
log('asking worker to load locale %s', locale);
|
||||
messageWorker(locale);
|
||||
} else {
|
||||
const emojis = await importEmojiData(locale);
|
||||
if (emojis) {
|
||||
@@ -83,17 +82,23 @@ async function loadEmojiLocale(localeString: string) {
|
||||
}
|
||||
}
|
||||
|
||||
function messageWorker(
|
||||
locale: typeof EMOJI_TYPE_CUSTOM | typeof EMOJI_DB_NAME_SHORTCODES,
|
||||
): void;
|
||||
function messageWorker(locale: Locale, path: string, shortcodes?: string): void;
|
||||
export async function loadCustomEmoji() {
|
||||
if (worker) {
|
||||
messageWorker('custom');
|
||||
} else {
|
||||
const { importCustomEmojiData } = await import('./loader');
|
||||
const emojis = await importCustomEmojiData();
|
||||
if (emojis && emojis.length > 0) {
|
||||
log('loaded %d custom emojis', emojis.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function messageWorker(
|
||||
locale: LocaleOrCustom | typeof EMOJI_DB_NAME_SHORTCODES,
|
||||
path?: string,
|
||||
shortcodes?: string,
|
||||
) {
|
||||
if (!worker) {
|
||||
return;
|
||||
}
|
||||
worker.postMessage({ locale, path, shortcodes });
|
||||
worker.postMessage({ locale });
|
||||
}
|
||||
|
||||
@@ -13,46 +13,35 @@ import {
|
||||
putLatestEtag,
|
||||
putLegacyShortcodes,
|
||||
} from './database';
|
||||
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
|
||||
import { toSupportedLocale, toValidEtagName } from './locale';
|
||||
import type { CustomEmojiData } from './types';
|
||||
import { emojiLogger } from './utils';
|
||||
|
||||
export async function importEmojiData(
|
||||
localeString: string,
|
||||
path?: string,
|
||||
shortcodes: boolean | string = true,
|
||||
) {
|
||||
const log = emojiLogger('loader');
|
||||
|
||||
export async function importEmojiData(localeString: string, shortcodes = true) {
|
||||
const locale = toSupportedLocale(localeString);
|
||||
|
||||
// Validate the provided path.
|
||||
if (path && !/^[/a-z]*\/packs\/assets\/compact-\w+\.json$/.test(path)) {
|
||||
throw new Error('Invalid path for emoji data');
|
||||
} else {
|
||||
// Otherwise get the path if not provided.
|
||||
path ??= await localeToEmojiPath(locale);
|
||||
}
|
||||
log(
|
||||
'importing emoji data for locale %s%s',
|
||||
locale,
|
||||
shortcodes ? ' and shortcodes' : '',
|
||||
);
|
||||
|
||||
const emojis = await fetchAndCheckEtag<CompactEmoji[]>(locale, path);
|
||||
const emojis = await fetchAndCheckEtag<CompactEmoji[]>({
|
||||
etagString: locale,
|
||||
path: localeToEmojiPath(locale),
|
||||
});
|
||||
if (!emojis) {
|
||||
return;
|
||||
}
|
||||
|
||||
const shortcodesData: ShortcodesDataset[] = [];
|
||||
if (shortcodes) {
|
||||
if (
|
||||
typeof shortcodes === 'string' &&
|
||||
!/^[/a-z]*\/packs\/assets\/shortcodes\/cldr\.json$/.test(shortcodes)
|
||||
) {
|
||||
throw new Error('Invalid path for shortcodes data');
|
||||
}
|
||||
const shortcodesPath =
|
||||
typeof shortcodes === 'string'
|
||||
? shortcodes
|
||||
: await localeToShortcodesPath(locale);
|
||||
const shortcodesResponse = await fetchAndCheckEtag<ShortcodesDataset>(
|
||||
locale,
|
||||
shortcodesPath,
|
||||
false,
|
||||
);
|
||||
const shortcodesResponse = await fetchAndCheckEtag<ShortcodesDataset>({
|
||||
etagString: `${locale}-shortcodes`,
|
||||
path: localeToShortcodesPath(locale),
|
||||
});
|
||||
if (shortcodesResponse) {
|
||||
shortcodesData.push(shortcodesResponse);
|
||||
} else {
|
||||
@@ -69,88 +58,88 @@ export async function importEmojiData(
|
||||
}
|
||||
|
||||
export async function importCustomEmojiData() {
|
||||
const emojis = await fetchAndCheckEtag<CustomEmojiData[]>(
|
||||
'custom',
|
||||
'/api/v1/custom_emojis',
|
||||
);
|
||||
const emojis = await fetchAndCheckEtag<CustomEmojiData[]>({
|
||||
etagString: 'custom',
|
||||
path: '/api/v1/custom_emojis',
|
||||
});
|
||||
if (!emojis) {
|
||||
return;
|
||||
}
|
||||
await putCustomEmojiData(emojis);
|
||||
await putCustomEmojiData({ emojis, clear: true });
|
||||
return emojis;
|
||||
}
|
||||
|
||||
export async function importLegacyShortcodes() {
|
||||
const { default: shortcodesPath } =
|
||||
await import('emojibase-data/en/shortcodes/iamcal.json?url');
|
||||
const response = await fetch(shortcodesPath);
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Failed to fetch legacy shortcodes data: ${response.statusText}`,
|
||||
);
|
||||
const globPaths = import.meta.glob<string>(
|
||||
// We use import.meta.glob to eagerly load the URL, as the regular import() doesn't work inside the Web Worker.
|
||||
'../../../../../node_modules/emojibase-data/en/shortcodes/iamcal.json',
|
||||
{ eager: true, import: 'default', query: '?url' },
|
||||
);
|
||||
const path = Object.values(globPaths)[0];
|
||||
if (!path) {
|
||||
throw new Error('IAMCAL shortcodes path not found');
|
||||
}
|
||||
const shortcodesData = await fetchAndCheckEtag<ShortcodesDataset>({
|
||||
checkEtag: true,
|
||||
etagString: 'shortcodes',
|
||||
path,
|
||||
});
|
||||
if (!shortcodesData) {
|
||||
return;
|
||||
}
|
||||
const shortcodesData = (await response.json()) as ShortcodesDataset;
|
||||
await putLegacyShortcodes(shortcodesData);
|
||||
return Object.keys(shortcodesData);
|
||||
}
|
||||
|
||||
const emojiModules = new Map(
|
||||
Object.entries(
|
||||
import.meta.glob<string>(
|
||||
'../../../../../node_modules/emojibase-data/**/compact.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
},
|
||||
),
|
||||
).map(([key, loader]) => {
|
||||
const match = /emojibase-data\/([^/]+)\/compact\.json$/.exec(key);
|
||||
return [match?.at(1) ?? key, loader];
|
||||
}),
|
||||
);
|
||||
|
||||
export function localeToEmojiPath(locale: Locale) {
|
||||
const path = emojiModules.get(locale);
|
||||
function localeToEmojiPath(locale: Locale) {
|
||||
const key = `../../../../../node_modules/emojibase-data/${locale}/compact.json`;
|
||||
const emojiModules = import.meta.glob<string>(
|
||||
'../../../../../node_modules/emojibase-data/**/compact.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
eager: true,
|
||||
},
|
||||
);
|
||||
const path = emojiModules[key];
|
||||
if (!path) {
|
||||
throw new Error(`Unsupported locale: ${locale}`);
|
||||
}
|
||||
return path();
|
||||
return path;
|
||||
}
|
||||
|
||||
const shortcodesModules = new Map(
|
||||
Object.entries(
|
||||
import.meta.glob<string>(
|
||||
'../../../../../node_modules/emojibase-data/**/shortcodes/cldr.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
},
|
||||
),
|
||||
).map(([key, loader]) => {
|
||||
const match = /emojibase-data\/([^/]+)\/shortcodes\/cldr\.json$/.exec(key);
|
||||
return [match?.at(1) ?? key, loader];
|
||||
}),
|
||||
);
|
||||
|
||||
export function localeToShortcodesPath(locale: Locale) {
|
||||
const path = shortcodesModules.get(locale);
|
||||
function localeToShortcodesPath(locale: Locale) {
|
||||
const key = `../../../../../node_modules/emojibase-data/${locale}/shortcodes/cldr.json`;
|
||||
const shortcodesModules = import.meta.glob<string>(
|
||||
'../../../../../node_modules/emojibase-data/**/shortcodes/cldr.json',
|
||||
{
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
eager: true,
|
||||
},
|
||||
);
|
||||
const path = shortcodesModules[key];
|
||||
if (!path) {
|
||||
throw new Error(`Unsupported locale for shortcodes: ${locale}`);
|
||||
}
|
||||
return path();
|
||||
return path;
|
||||
}
|
||||
|
||||
export async function fetchAndCheckEtag<ResultType extends object[] | object>(
|
||||
localeString: string,
|
||||
path: string,
|
||||
checkEtag = true,
|
||||
): Promise<ResultType | null> {
|
||||
const locale = toSupportedLocaleOrCustom(localeString);
|
||||
async function fetchAndCheckEtag<ResultType extends object[] | object>({
|
||||
etagString,
|
||||
path,
|
||||
checkEtag = false,
|
||||
}: {
|
||||
etagString: string;
|
||||
path: string;
|
||||
checkEtag?: boolean;
|
||||
}): Promise<ResultType | null> {
|
||||
const etagName = toValidEtagName(etagString);
|
||||
|
||||
// Use location.origin as this script may be loaded from a CDN domain.
|
||||
const url = new URL(path, location.origin);
|
||||
|
||||
const oldEtag = checkEtag ? await loadLatestEtag(locale) : null;
|
||||
const oldEtag = checkEtag ? await loadLatestEtag(etagName) : null;
|
||||
const response = await fetch(url, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
@@ -163,7 +152,7 @@ export async function fetchAndCheckEtag<ResultType extends object[] | object>(
|
||||
}
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Failed to fetch emoji data for ${locale}: ${response.statusText}`,
|
||||
`Failed to fetch emoji data for ${etagName}: ${response.statusText}`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -172,7 +161,8 @@ export async function fetchAndCheckEtag<ResultType extends object[] | object>(
|
||||
// Store the ETag for future requests
|
||||
const etag = response.headers.get('ETag');
|
||||
if (etag && checkEtag) {
|
||||
await putLatestEtag(etag, localeString);
|
||||
log(`storing new etag for ${etagName}: ${etag}`);
|
||||
await putLatestEtag(etag, etagName);
|
||||
}
|
||||
|
||||
return data;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import type { Locale } from 'emojibase';
|
||||
import { SUPPORTED_LOCALES } from 'emojibase';
|
||||
|
||||
import type { LocaleOrCustom } from './types';
|
||||
import { EMOJI_DB_NAME_SHORTCODES, EMOJI_TYPE_CUSTOM } from './constants';
|
||||
import type { EtagTypes, LocaleOrCustom, LocaleWithShortcodes } from './types';
|
||||
|
||||
export function toSupportedLocale(localeBase: string): Locale {
|
||||
const locale = localeBase.toLowerCase();
|
||||
@@ -12,12 +13,35 @@ export function toSupportedLocale(localeBase: string): Locale {
|
||||
}
|
||||
|
||||
export function toSupportedLocaleOrCustom(locale: string): LocaleOrCustom {
|
||||
if (locale.toLowerCase() === 'custom') {
|
||||
return 'custom';
|
||||
if (locale.toLowerCase() === EMOJI_TYPE_CUSTOM) {
|
||||
return EMOJI_TYPE_CUSTOM;
|
||||
}
|
||||
return toSupportedLocale(locale);
|
||||
}
|
||||
|
||||
function isSupportedLocale(locale: string): locale is Locale {
|
||||
return SUPPORTED_LOCALES.includes(locale.toLowerCase() as Locale);
|
||||
export function toValidEtagName(input: string): EtagTypes {
|
||||
const lower = input.toLowerCase();
|
||||
if (lower === EMOJI_TYPE_CUSTOM || lower === EMOJI_DB_NAME_SHORTCODES) {
|
||||
return lower;
|
||||
}
|
||||
|
||||
if (isLocaleWithShortcodes(lower)) {
|
||||
return lower;
|
||||
}
|
||||
|
||||
return toSupportedLocale(lower);
|
||||
}
|
||||
|
||||
function isSupportedLocale(locale: string): locale is Locale {
|
||||
return SUPPORTED_LOCALES.includes(locale as Locale);
|
||||
}
|
||||
|
||||
function isLocaleWithShortcodes(input: string): input is LocaleWithShortcodes {
|
||||
const [baseLocale, shortcodes] = input.split('-');
|
||||
return (
|
||||
!!baseLocale &&
|
||||
!!shortcodes &&
|
||||
isSupportedLocale(baseLocale) &&
|
||||
shortcodes === EMOJI_DB_NAME_SHORTCODES
|
||||
);
|
||||
}
|
||||
|
||||
@@ -83,12 +83,8 @@ describe('stringToEmojiState', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('returns custom emoji state for valid custom emoji', () => {
|
||||
expect(stringToEmojiState(':smile:')).toEqual({
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
data: undefined,
|
||||
});
|
||||
test('returns null for custom emoji without data', () => {
|
||||
expect(stringToEmojiState(':smile:')).toBeNull();
|
||||
});
|
||||
|
||||
test('returns custom emoji state with data when provided', () => {
|
||||
@@ -108,7 +104,6 @@ describe('stringToEmojiState', () => {
|
||||
|
||||
test('returns null for invalid emoji strings', () => {
|
||||
expect(stringToEmojiState('notanemoji')).toBeNull();
|
||||
expect(stringToEmojiState(':invalid-emoji:')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -142,21 +137,13 @@ describe('loadEmojiDataToState', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('loads custom emoji data into state', async () => {
|
||||
const dbCall = vi
|
||||
.spyOn(db, 'loadCustomEmojiByShortcode')
|
||||
.mockResolvedValueOnce(customEmojiFactory());
|
||||
test('returns null for custom emoji without data', async () => {
|
||||
const customState = {
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
} as const satisfies EmojiStateCustom;
|
||||
const result = await loadEmojiDataToState(customState, 'en');
|
||||
expect(dbCall).toHaveBeenCalledWith('smile');
|
||||
expect(result).toEqual({
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
data: customEmojiFactory(),
|
||||
});
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('loads unicode data using legacy shortcode', async () => {
|
||||
@@ -194,16 +181,6 @@ describe('loadEmojiDataToState', () => {
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('returns null if custom emoji not found in database', async () => {
|
||||
vi.spyOn(db, 'loadCustomEmojiByShortcode').mockResolvedValueOnce(undefined);
|
||||
const customState = {
|
||||
type: 'custom',
|
||||
code: 'smile',
|
||||
} as const satisfies EmojiStateCustom;
|
||||
const result = await loadEmojiDataToState(customState, 'en');
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('retries loading emoji data once if initial load fails', async () => {
|
||||
const dbCall = vi
|
||||
.spyOn(db, 'loadEmojiByHexcode')
|
||||
|
||||
@@ -4,13 +4,6 @@ import {
|
||||
EMOJI_TYPE_UNICODE,
|
||||
EMOJI_TYPE_CUSTOM,
|
||||
} from './constants';
|
||||
import {
|
||||
loadCustomEmojiByShortcode,
|
||||
loadEmojiByHexcode,
|
||||
loadLegacyShortcodesByShortcode,
|
||||
LocaleNotLoadedError,
|
||||
} from './database';
|
||||
import { importEmojiData } from './loader';
|
||||
import { emojiToUnicodeHex } from './normalize';
|
||||
import type {
|
||||
EmojiLoadedState,
|
||||
@@ -80,7 +73,7 @@ export function tokenizeText(text: string): TokenizedText {
|
||||
export function stringToEmojiState(
|
||||
code: string,
|
||||
customEmoji: ExtraCustomEmojiMap = {},
|
||||
): EmojiState | null {
|
||||
): EmojiStateUnicode | Required<EmojiStateCustom> | null {
|
||||
if (isUnicodeEmoji(code)) {
|
||||
return {
|
||||
type: EMOJI_TYPE_UNICODE,
|
||||
@@ -90,11 +83,13 @@ export function stringToEmojiState(
|
||||
|
||||
if (isCustomEmoji(code)) {
|
||||
const shortCode = code.slice(1, -1);
|
||||
return {
|
||||
type: EMOJI_TYPE_CUSTOM,
|
||||
code: shortCode,
|
||||
data: customEmoji[shortCode],
|
||||
};
|
||||
if (customEmoji[shortCode]) {
|
||||
return {
|
||||
type: EMOJI_TYPE_CUSTOM,
|
||||
code: shortCode,
|
||||
data: customEmoji[shortCode],
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -115,33 +110,35 @@ export async function loadEmojiDataToState(
|
||||
return state;
|
||||
}
|
||||
|
||||
// Don't try to load data for custom emoji.
|
||||
if (state.type === EMOJI_TYPE_CUSTOM) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const {
|
||||
loadLegacyShortcodesByShortcode,
|
||||
loadEmojiByHexcode,
|
||||
LocaleNotLoadedError,
|
||||
} = await import('./database');
|
||||
|
||||
// First, try to load the data from IndexedDB.
|
||||
try {
|
||||
const legacyCode = await loadLegacyShortcodesByShortcode(state.code);
|
||||
// This is duplicative, but that's because TS can't distinguish the state type easily.
|
||||
if (state.type === EMOJI_TYPE_UNICODE || legacyCode) {
|
||||
const data = await loadEmojiByHexcode(
|
||||
legacyCode?.hexcode ?? state.code,
|
||||
locale,
|
||||
);
|
||||
if (data) {
|
||||
return {
|
||||
...state,
|
||||
type: EMOJI_TYPE_UNICODE,
|
||||
data,
|
||||
// TODO: Use CLDR shortcodes when the picker supports them.
|
||||
shortcode: legacyCode?.shortcodes.at(0),
|
||||
};
|
||||
}
|
||||
} else {
|
||||
const data = await loadCustomEmojiByShortcode(state.code);
|
||||
if (data) {
|
||||
return {
|
||||
...state,
|
||||
data,
|
||||
};
|
||||
}
|
||||
const data = await loadEmojiByHexcode(
|
||||
legacyCode?.hexcode ?? state.code,
|
||||
locale,
|
||||
);
|
||||
if (data) {
|
||||
return {
|
||||
...state,
|
||||
type: EMOJI_TYPE_UNICODE,
|
||||
data,
|
||||
// TODO: Use CLDR shortcodes when the picker supports them.
|
||||
shortcode: legacyCode?.shortcodes.at(0),
|
||||
};
|
||||
}
|
||||
|
||||
// If not found, assume it's not an emoji and return null.
|
||||
log(
|
||||
'Could not find emoji %s of type %s for locale %s',
|
||||
@@ -158,6 +155,7 @@ export async function loadEmojiDataToState(
|
||||
state.code,
|
||||
locale,
|
||||
);
|
||||
const { importEmojiData } = await import('./loader');
|
||||
await importEmojiData(locale); // Use this from the loader file as it can be awaited.
|
||||
return loadEmojiDataToState(state, locale, true);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import type { CustomEmoji } from '@/mastodon/models/custom_emoji';
|
||||
import type { RequiredExcept } from '@/mastodon/utils/types';
|
||||
|
||||
import type {
|
||||
EMOJI_DB_NAME_SHORTCODES,
|
||||
EMOJI_MODE_NATIVE,
|
||||
EMOJI_MODE_NATIVE_WITH_FLAGS,
|
||||
EMOJI_MODE_TWEMOJI,
|
||||
@@ -20,6 +21,11 @@ export type EmojiMode =
|
||||
| typeof EMOJI_MODE_TWEMOJI;
|
||||
|
||||
export type LocaleOrCustom = Locale | typeof EMOJI_TYPE_CUSTOM;
|
||||
export type LocaleWithShortcodes = `${Locale}-shortcodes`;
|
||||
export type EtagTypes =
|
||||
| LocaleOrCustom
|
||||
| typeof EMOJI_DB_NAME_SHORTCODES
|
||||
| LocaleWithShortcodes;
|
||||
|
||||
export interface EmojiAppState {
|
||||
locales: Locale[];
|
||||
|
||||
@@ -8,24 +8,23 @@ import {
|
||||
addEventListener('message', handleMessage);
|
||||
self.postMessage('ready'); // After the worker is ready, notify the main thread
|
||||
|
||||
function handleMessage(event: MessageEvent<{ locale: string; path?: string }>) {
|
||||
function handleMessage(event: MessageEvent<{ locale: string }>) {
|
||||
const {
|
||||
data: { locale, path },
|
||||
data: { locale },
|
||||
} = event;
|
||||
void loadData(locale, path);
|
||||
void loadData(locale);
|
||||
}
|
||||
|
||||
async function loadData(locale: string, path?: string) {
|
||||
async function loadData(locale: string) {
|
||||
let importCount: number | undefined;
|
||||
if (locale === EMOJI_TYPE_CUSTOM) {
|
||||
importCount = (await importCustomEmojiData())?.length;
|
||||
} else if (locale === EMOJI_DB_NAME_SHORTCODES) {
|
||||
importCount = (await importLegacyShortcodes()).length;
|
||||
} else if (path) {
|
||||
importCount = (await importEmojiData(locale, path))?.length;
|
||||
importCount = (await importLegacyShortcodes())?.length;
|
||||
} else {
|
||||
throw new Error('Path is required for loading locale emoji data');
|
||||
importCount = (await importEmojiData(locale))?.length;
|
||||
}
|
||||
|
||||
if (importCount) {
|
||||
self.postMessage(`loaded ${importCount} emojis into ${locale}`);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ export const EmbeddedStatusContent: React.FC<{
|
||||
className={className}
|
||||
lang={status.get('language') as string}
|
||||
htmlString={status.get('contentHtml') as string}
|
||||
extraEmojis={status.get('emoji') as List<CustomEmoji>}
|
||||
extraEmojis={status.get('emojis') as List<CustomEmoji>}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -107,25 +107,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "قم بوصفها للأشخاص ذوي الإعاقة البصرية…",
|
||||
"alt_text_modal.done": "تمّ",
|
||||
"announcement.announcement": "إعلان",
|
||||
"annual_report.summary.archetype.booster": "The cool-hunter",
|
||||
"annual_report.summary.archetype.lurker": "المتصفح الصامت",
|
||||
"annual_report.summary.archetype.oracle": "الحكيم",
|
||||
"annual_report.summary.archetype.pollster": "مستطلع للرأي",
|
||||
"annual_report.summary.archetype.replier": "الفراشة الاجتماعية",
|
||||
"annual_report.summary.followers.followers": "المُتابِعُون",
|
||||
"annual_report.summary.followers.total": "{count} في المجمل",
|
||||
"annual_report.summary.here_it_is": "فيما يلي ملخصك لسنة {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "المنشور ذو أعلى عدد تفضيلات",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "أكثر منشور مُعاد نشره",
|
||||
"annual_report.summary.highlighted_post.by_replies": "المنشور بأعلى عدد تعليقات",
|
||||
"annual_report.summary.highlighted_post.possessive": "من قبل {name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "التطبيق الأكثر استخداماً",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "الهاشتاق الأكثر استخداماً",
|
||||
"annual_report.summary.most_used_hashtag.none": "لا شيء",
|
||||
"annual_report.summary.new_posts.new_posts": "المنشورات الجديدة",
|
||||
"annual_report.summary.percentile.text": "<topLabel>هذا يجعلك من بين أكثر </topLabel><percentage></percentage><bottomLabel>مستخدمي {domain} نشاطاً </bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "سيبقى هذا الأمر بيننا.",
|
||||
"annual_report.summary.thanks": "شكرا لكونك جزءاً من ماستدون!",
|
||||
"attachments_list.unprocessed": "(غير معالَج)",
|
||||
"audio.hide": "إخفاء المقطع الصوتي",
|
||||
"block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",
|
||||
|
||||
@@ -71,11 +71,7 @@
|
||||
"alt_text_modal.cancel": "Encaboxar",
|
||||
"alt_text_modal.done": "Fecho",
|
||||
"announcement.announcement": "Anunciu",
|
||||
"annual_report.summary.followers.followers": "siguidores",
|
||||
"annual_report.summary.here_it_is": "Equí ta'l to resume de {year}:",
|
||||
"annual_report.summary.highlighted_post.possessive": "de {name}",
|
||||
"annual_report.summary.new_posts.new_posts": "artículos nuevos",
|
||||
"annual_report.summary.thanks": "Gracies por ser parte de Mastodon!",
|
||||
"attachments_list.unprocessed": "(ensin procesar)",
|
||||
"block_modal.show_less": "Amosar menos",
|
||||
"block_modal.show_more": "Amosar más",
|
||||
|
||||
@@ -107,25 +107,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Görmə məhdudiyyətli insanlar üçün bunu təsvir et…",
|
||||
"alt_text_modal.done": "Oldu",
|
||||
"announcement.announcement": "Elan",
|
||||
"annual_report.summary.archetype.booster": "Trend ovçusu",
|
||||
"annual_report.summary.archetype.lurker": "Lurker",
|
||||
"annual_report.summary.archetype.oracle": "Orakl",
|
||||
"annual_report.summary.archetype.pollster": "Sorğu ustası",
|
||||
"annual_report.summary.archetype.replier": "Sosial kəpənək",
|
||||
"annual_report.summary.followers.followers": "izləyici",
|
||||
"annual_report.summary.followers.total": "Cəmi {count}",
|
||||
"annual_report.summary.here_it_is": "{year} icmalınız:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "ən çox sevilən postu",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "ən çox təkrar paylaşılan göndəriş",
|
||||
"annual_report.summary.highlighted_post.by_replies": "ən çox cavabı olan paylaşımı",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name} istifadəçisinin",
|
||||
"annual_report.summary.most_used_app.most_used_app": "ən çox istifadə etdiyi tətbiq",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "ən çox istifadə etdiyi heşteq",
|
||||
"annual_report.summary.most_used_hashtag.none": "Yoxdur",
|
||||
"annual_report.summary.new_posts.new_posts": "yeni paylaşım",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Bu sizi {domain} istifadəçilərinin ilk</topLabel><percentage></percentage><bottomLabel>qoyur.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Bunu Berniyə deməyəcəyik.",
|
||||
"annual_report.summary.thanks": "Mastodonun bir parçası olduğunuz üçün təşəkkür edirik!",
|
||||
"attachments_list.unprocessed": "(emal edilməyib)",
|
||||
"audio.hide": "Audionu gizlət",
|
||||
"block_modal.remote_users_caveat": "{domain} serverindən qərarınıza hörmət etməsini xahiş edəcəyik. Ancaq, bəzi serverlər əngəlləmələri fərqli şəkildə idarə edə bilər deyə, qərarınıza uymağına zəmanət verilmir. Hər kəsə açıq göndərişlər, hələ də sistemə giriş etməmiş istifadəçilərə görünə bilər.",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Гатова",
|
||||
"announcement.announcement": "Аб'ява",
|
||||
"annual_report.announcement.action_build": "Старыць мне Вынікадон",
|
||||
"annual_report.announcement.action_dismiss": "Не, дзякуй",
|
||||
"annual_report.announcement.action_view": "Паглядзець мой Вынікадон",
|
||||
"annual_report.announcement.description": "Даведайцеся больш пра Вашыя ўзаемадзеянні ў Mastodon за апошні год.",
|
||||
"annual_report.announcement.title": "Вынікадон {year} ужо тут",
|
||||
"annual_report.summary.archetype.booster": "Паляўнічы на трэнды",
|
||||
"annual_report.summary.archetype.lurker": "Назіральнік",
|
||||
"annual_report.summary.archetype.oracle": "Аракул",
|
||||
"annual_report.summary.archetype.pollster": "Апытвальнік",
|
||||
"annual_report.summary.archetype.replier": "Душа кампаніі",
|
||||
"annual_report.summary.followers.followers": "падпісчыкі",
|
||||
"annual_report.summary.followers.total": "Агулам {count}",
|
||||
"annual_report.summary.here_it_is": "Вось Вашы вынікі {year} за год:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "самы ўпадабаны допіс",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "самы пашыраны допіс",
|
||||
"annual_report.summary.highlighted_post.by_replies": "самы каментаваны допіс",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.nav_item.badge": "Новы",
|
||||
"annual_report.shared_page.donate": "Ахвяраваць",
|
||||
"annual_report.shared_page.footer": "З {heart} згенеравала каманда Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} карыстаецца {domain}, адной са шматлікіх супольнасцяў, якія ўтрымлівае Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} увесь час паляваў(-ла) на допісы, каб пашырыць іх і разгаласіць аб іх аўтарах ідэальнымі стрэламі.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Вы ўвесь час палявалі на допісы, каб пашырыць іх і разгаласіць аб іх аўтарах ідэальнымі стрэламі.",
|
||||
"annual_report.summary.archetype.booster.name": "Лучнік",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Мы ведаем, што {name} быў(-ла) дзесьці тут і па-свойму атрымліваў(-ла) асалоду ад Mastodon.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Мы ведаем, што Вы былі дзесьці тут і па-свойму атрымлівалі асалоду ад Mastodon.",
|
||||
"annual_report.summary.archetype.lurker.name": "Стоік",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "Новых допісаў у {name} было больш, чым адказаў, і гэткім чынам ён (яна) пакідаў(-ла) Mastodon свежым і накіраваным у будучыню.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Новых допісаў у Вас было больш, чым адказаў, і гэткім чынам Вы пакідалі Mastodon свежым і накіраваным у будучыню.",
|
||||
"annual_report.summary.archetype.oracle.name": "Аракул",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "Сярод допісаў {name} было найбольш апытанак, якімі ён (яна) падымаў(-ла) цікаўнасць у Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Сярод Вашых допісаў было найбольш апытанак, якімі Вы падымалі цікаўнасць у Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Даследчык",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} часта адказваў(-ла) на допісы іншых людзей, апыляючы Mastodon новымі дыскусіямі.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Вы часта адказвалі на допісы іншых людзей, апыляючы Mastodon новымі дыскусіямі.",
|
||||
"annual_report.summary.archetype.replier.name": "Матыль",
|
||||
"annual_report.summary.archetype.reveal": "Раскрыць мой архетып",
|
||||
"annual_report.summary.archetype.reveal_description": "Дзякуй за тое, што Вы былі і застаяцеся часткай Mastodon! Час даведацца, які архетып Вы ўвасобілі ў {year}-ым годзе.",
|
||||
"annual_report.summary.archetype.title_public": "Архетып {name}",
|
||||
"annual_report.summary.archetype.title_self": "Ваш архетып",
|
||||
"annual_report.summary.close": "Закрыць",
|
||||
"annual_report.summary.copy_link": "Скапіраваць",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {новы падпісчык} few {новыя падпісчыкі} other {новых падпісчыкаў}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Гэты допіс пашырылі {count, plural, one {адзін раз} few {# разы} other {# разоў}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Гэты допіс упадабалі {count, plural, one {адзін раз} few {# разы} other {# разоў}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "На гэты допіс адказалі {count, plural, one {адзін раз} few {# разы} other {# разоў}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Самы папулярны допіс",
|
||||
"annual_report.summary.most_used_app.most_used_app": "праграма, якой карысталіся найчасцей",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "хэштэг, якім карысталіся найчасцей",
|
||||
"annual_report.summary.most_used_hashtag.none": "Няма",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Вы выкарысталі гэты хэштэг у {count, plural, one {адным допісе} other {# допісах}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} выкарыстаў(-ла) гэты хэштэг у {count, plural, one {адным допісе} other {# допісах}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "новыя допісы",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Гэта падымае Вас у топ</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "КДБ пра гэта не даведаецца.",
|
||||
"annual_report.summary.share_elsewhere": "Падзяліцца ў іншым месцы",
|
||||
"annual_report.summary.share_message": "Мой архетып – {archetype}!",
|
||||
"annual_report.summary.thanks": "Дзякуй за ўдзел у Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Падзяліцца ў Mastodon",
|
||||
"attachments_list.unprocessed": "(неапрацаваны)",
|
||||
"audio.hide": "Схаваць аўдыя",
|
||||
"block_modal.remote_users_caveat": "Мы папросім сервер {domain} паважаць Ваш выбар. Аднак гэта не гарантуецца, паколькі некаторыя серверы могуць апрацоўваць блакіроўкі іншым чынам. Публічныя паведамленні могуць заставацца бачнымі для ананімных карыстальнікаў.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "На каго падпісацца",
|
||||
"followed_tags": "Падпіскі",
|
||||
"footer.about": "Пра нас",
|
||||
"footer.about_mastodon": "Пра Mastodon",
|
||||
"footer.about_server": "Пра {domain}",
|
||||
"footer.about_this_server": "Пра сервер",
|
||||
"footer.directory": "Дырэкторыя профіляў",
|
||||
"footer.get_app": "Спампаваць праграму",
|
||||
|
||||
@@ -111,25 +111,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Опишете това за хора със зрителни увреждания…",
|
||||
"alt_text_modal.done": "Готово",
|
||||
"announcement.announcement": "Оповестяване",
|
||||
"annual_report.summary.archetype.booster": "Якият подсилвател",
|
||||
"annual_report.summary.archetype.lurker": "Дебнещото",
|
||||
"annual_report.summary.archetype.oracle": "Оракул",
|
||||
"annual_report.summary.archetype.pollster": "Анкетьорче",
|
||||
"annual_report.summary.archetype.replier": "Социална пеперуда",
|
||||
"annual_report.summary.followers.followers": "последователи",
|
||||
"annual_report.summary.followers.total": "{count} общо",
|
||||
"annual_report.summary.here_it_is": "Ето преглед на вашата {year} година:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "най-правено като любима публикация",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "най-подсилваната публикация",
|
||||
"annual_report.summary.highlighted_post.by_replies": "публикация с най-много отговори",
|
||||
"annual_report.summary.highlighted_post.possessive": "на {name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "най-употребявано приложение",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "най-употребяван хаштаг",
|
||||
"annual_report.summary.most_used_hashtag.none": "Няма",
|
||||
"annual_report.summary.new_posts.new_posts": "нови публикации",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Това ви слага най-отгоре</topLabel><percentage></percentage><bottomLabel>сред потребителите на {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Няма да кажем на Бърни Сандърс.",
|
||||
"annual_report.summary.thanks": "Благодарим, че сте част от Mastodon!",
|
||||
"attachments_list.unprocessed": "(необработено)",
|
||||
"audio.hide": "Скриване на звука",
|
||||
"block_modal.remote_users_caveat": "Ще приканим сървъра {domain} да уважава решението ви. За съжаление не можем да гарантираме това защото някои сървъри могат да третират блокиранията по различен начин. Публичните постове може да продължат да бъдат видими за потребители, които не са се регистрирали.",
|
||||
|
||||
@@ -106,15 +106,8 @@
|
||||
"alt_text_modal.change_thumbnail": "Kemmañ ar velvenn",
|
||||
"alt_text_modal.done": "Graet",
|
||||
"announcement.announcement": "Kemennad",
|
||||
"annual_report.summary.followers.followers": "heulier",
|
||||
"annual_report.summary.followers.total": "{count} en holl",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "embannadur karet ar muiañ",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "embannadur skignet ar muiañ",
|
||||
"annual_report.summary.highlighted_post.by_replies": "embannadur gant ar muiañ a respontoù",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "arload muiañ implijet",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "ar gerioù-klik implijet ar muiañ",
|
||||
"annual_report.summary.most_used_hashtag.none": "Hini ebet",
|
||||
"annual_report.summary.new_posts.new_posts": "embannadurioù nevez",
|
||||
"attachments_list.unprocessed": "(ket meret)",
|
||||
"audio.hide": "Kuzhat ar c'hleved",
|
||||
|
||||
@@ -114,29 +114,24 @@
|
||||
"alt_text_modal.done": "Fet",
|
||||
"announcement.announcement": "Anunci",
|
||||
"annual_report.announcement.action_build": "El meu Wrapstodon s'ha fet",
|
||||
"annual_report.announcement.action_dismiss": "No, gràcies",
|
||||
"annual_report.announcement.action_view": "Vegeu el meu Wrapstodon",
|
||||
"annual_report.announcement.description": "Descobriu més sobre el vostre involucrament a Mastodon durant l'any passat.",
|
||||
"annual_report.announcement.title": "Ha arribat Wrapstodon {year}",
|
||||
"annual_report.summary.archetype.booster": "Sempre a la moda",
|
||||
"annual_report.summary.archetype.lurker": "Tot ho llegeix",
|
||||
"annual_report.summary.archetype.oracle": "L'Oracle",
|
||||
"annual_report.summary.archetype.pollster": "Tot són enquestes",
|
||||
"annual_report.summary.archetype.replier": "Tot ho respon",
|
||||
"annual_report.summary.followers.followers": "seguidors",
|
||||
"annual_report.summary.followers.total": "{count} en total",
|
||||
"annual_report.summary.here_it_is": "El repàs del vostre {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "la publicació més afavorida",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "la publicació més impulsada",
|
||||
"annual_report.summary.highlighted_post.by_replies": "la publicació amb més respostes",
|
||||
"annual_report.summary.highlighted_post.possessive": "de {name}",
|
||||
"annual_report.nav_item.badge": "Nou",
|
||||
"annual_report.shared_page.donate": "Fer una donació",
|
||||
"annual_report.shared_page.footer": "Generat amb {heart} per l'equip de Mastodon",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.copy_link": "Copia l'enllaç",
|
||||
"annual_report.summary.most_used_app.most_used_app": "l'aplicació més utilitzada",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "l'etiqueta més utilitzada",
|
||||
"annual_report.summary.most_used_hashtag.none": "Cap",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} ha inclòs aquesta etiqueta a {count, plural, one {una publicació} other {# publicacions}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "publicacions noves",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Que us posa al</topLabel><percentage></percentage><bottomLabel>capdamunt dels usuaris de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "No li ho direm al Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Compartir a una altra banda",
|
||||
"annual_report.summary.share_message": "Tinc l'arquetip {archetype}!",
|
||||
"annual_report.summary.thanks": "Gràcies per formar part de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Compartir a Mastodon",
|
||||
"attachments_list.unprocessed": "(sense processar)",
|
||||
"audio.hide": "Amaga l'àudio",
|
||||
"block_modal.remote_users_caveat": "Li demanarem al servidor {domain} que respecti la vostra decisió, tot i que no podem garantir-ho, ja que alguns servidors gestionen de forma diferent els blocatges. És possible que els usuaris no autenticats puguin veure les publicacions públiques.",
|
||||
@@ -362,6 +357,7 @@
|
||||
"empty_column.notification_requests": "Tot net, ja no hi ha res aquí! Quan rebeu notificacions noves, segons la vostra configuració, apareixeran aquí.",
|
||||
"empty_column.notifications": "Encara no tens notificacions. Quan altre gent interactuï amb tu, les veuràs aquí.",
|
||||
"empty_column.public": "Aquí no hi ha res! Escriu públicament alguna cosa o segueix manualment usuaris d'altres servidors per omplir-ho",
|
||||
"error.no_hashtag_feed_access": "Creeu un compte o accediu per a veure i seguir aquesta etiqueta.",
|
||||
"error.unexpected_crash.explanation": "A causa d'un error en el nostre codi o d'un problema de compatibilitat amb el navegador, aquesta pàgina no s'ha pogut mostrar correctament.",
|
||||
"error.unexpected_crash.explanation_addons": "Aquesta pàgina no s'ha pogut mostrar correctament. És probable que aquest error sigui causat per un complement del navegador o per eines de traducció automàtica.",
|
||||
"error.unexpected_crash.next_steps": "Prova d'actualitzar la pàgina. Si això no serveix, és possible que encara puguis fer servir Mastodon a través d'un navegador diferent o amb una aplicació nativa.",
|
||||
@@ -908,6 +904,7 @@
|
||||
"status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}",
|
||||
"status.embed": "Obté el codi encastat",
|
||||
"status.favourite": "Favorit",
|
||||
"status.favourites_count": "{count, plural, one {{counter} favorit} other {{counter} favorits}}",
|
||||
"status.filter": "Filtra aquest tut",
|
||||
"status.history.created": "creat per {name} {date}",
|
||||
"status.history.edited": "editat per {name} {date}",
|
||||
@@ -942,12 +939,14 @@
|
||||
"status.quotes.empty": "Encara no ha citat aquesta publicació ningú. Quan ho faci algú apareixerà aquí.",
|
||||
"status.quotes.local_other_disclaimer": "No es mostraran les cites rebutjades per l'autor.",
|
||||
"status.quotes.remote_other_disclaimer": "Només es garanteix que es mostraran aquí les cites de {domain}. No es mostraran les rebutjades per l'autor.",
|
||||
"status.quotes_count": "{count, plural, one {{counter} citació} other {{counter} citacions}}",
|
||||
"status.read_more": "Més informació",
|
||||
"status.reblog": "Impulsa",
|
||||
"status.reblog_or_quote": "Impuls or cita",
|
||||
"status.reblog_private": "Compartiu de nou amb els vostres seguidors",
|
||||
"status.reblogged_by": "impulsat per {name}",
|
||||
"status.reblogs.empty": "Encara no ha impulsat ningú aquest tut. Quan algú ho faci, apareixerà aquí.",
|
||||
"status.reblogs_count": "{count, plural, one {{counter} impuls} other {{counter} impulsos}}",
|
||||
"status.redraft": "Esborra i reescriu",
|
||||
"status.remove_bookmark": "Elimina el marcador",
|
||||
"status.remove_favourite": "Elimina dels preferits",
|
||||
|
||||
@@ -114,29 +114,30 @@
|
||||
"alt_text_modal.done": "Hotovo",
|
||||
"announcement.announcement": "Oznámení",
|
||||
"annual_report.announcement.action_build": "Sestavit můj Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Ne, děkuji",
|
||||
"annual_report.announcement.action_view": "Zobrazit můj Wrapstodon",
|
||||
"annual_report.announcement.description": "Zjistěte více o vaší aktivitě na Mastodonu za poslední rok.",
|
||||
"annual_report.announcement.title": "Je zde Wrapstodon {year}",
|
||||
"annual_report.summary.archetype.booster": "Lovec obsahu",
|
||||
"annual_report.summary.archetype.lurker": "Špión",
|
||||
"annual_report.summary.archetype.oracle": "Vědma",
|
||||
"annual_report.summary.archetype.pollster": "Průzkumník",
|
||||
"annual_report.summary.archetype.replier": "Sociální motýlek",
|
||||
"annual_report.summary.followers.followers": "sledujících",
|
||||
"annual_report.summary.followers.total": "{count} celkem",
|
||||
"annual_report.summary.here_it_is": "Zde je tvůj rok {year} v přehledu:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "nejvíce oblíbený příspěvek",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "nejvíce boostovaný příspěvek",
|
||||
"annual_report.summary.highlighted_post.by_replies": "příspěvek s nejvíce odpověďmi",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.nav_item.badge": "Nový",
|
||||
"annual_report.shared_page.donate": "Podpořit",
|
||||
"annual_report.shared_page.footer": "Vytvořeno s {heart} týmem Mastodon",
|
||||
"annual_report.summary.archetype.reveal": "Odhalit můj archetyp",
|
||||
"annual_report.summary.archetype.reveal_description": "Děkujeme, že jste součástí Mastodonu! Čas zjistit, který archetype jste ztělesnili v roce {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Archetyp {name}",
|
||||
"annual_report.summary.archetype.title_self": "Váš archetyp",
|
||||
"annual_report.summary.close": "Zavřít",
|
||||
"annual_report.summary.copy_link": "Zkopírovat odkaz",
|
||||
"annual_report.summary.highlighted_post.title": "Nejpopulárnější příspěvek",
|
||||
"annual_report.summary.most_used_app.most_used_app": "nejpoužívanější aplikace",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "nejpoužívanější hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Žádné",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Tento hashtag jste vložili do {count, plural, one {jednoho příspěvku} few {# příspěvků} many {# příspěvků} other {# příspěvků}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} vložili tento hashtag do {count, plural, one {jednoho příspěveku} few {# příspěvků} many {# příspěvků} other {# příspěvků}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nové příspěvky",
|
||||
"annual_report.summary.percentile.text": "<topLabel>To vás umisťuje do horních</topLabel><percentage></percentage><bottomLabel> uživatelů domény {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "To, že jste zdejší smetánka, zůstane mezi námi ;).",
|
||||
"annual_report.summary.share_elsewhere": "Sdílet jinde",
|
||||
"annual_report.summary.share_message": "Mám archetyp {archetype}!",
|
||||
"annual_report.summary.thanks": "Děkujeme, že jste součástí Mastodonu!",
|
||||
"annual_report.summary.share_on_mastodon": "Sdílet na Mastodonu",
|
||||
"attachments_list.unprocessed": "(nezpracováno)",
|
||||
"audio.hide": "Skrýt zvuk",
|
||||
"block_modal.remote_users_caveat": "Požádáme server {domain}, aby respektoval vaše rozhodnutí. Úplné dodržování nastavení však není zaručeno, protože některé servery mohou řešit blokování různě. Veřejné příspěvky mohou být stále viditelné pro nepřihlášené uživatele.",
|
||||
|
||||
@@ -113,25 +113,50 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Disgrifiwch hyn ar gyfer pobl â nam ar eu golwg…",
|
||||
"alt_text_modal.done": "Gorffen",
|
||||
"announcement.announcement": "Cyhoeddiad",
|
||||
"annual_report.summary.archetype.booster": "Y hyrwyddwr",
|
||||
"annual_report.summary.archetype.lurker": "Y crwydryn",
|
||||
"annual_report.summary.archetype.oracle": "Yr oracl",
|
||||
"annual_report.summary.archetype.pollster": "Yr arholwr",
|
||||
"annual_report.summary.archetype.replier": "Y sbardunwr",
|
||||
"annual_report.summary.followers.followers": "dilynwyr",
|
||||
"annual_report.summary.followers.total": "Cyfanswm o{count}",
|
||||
"annual_report.summary.here_it_is": "Dyma eich {year} yn gryno:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "postiad wedi'i ffefrynu fwyaf",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "postiad wedi'i hybu fwyaf",
|
||||
"annual_report.summary.highlighted_post.by_replies": "postiad gyda'r nifer fwyaf o ymatebion",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.announcement.action_build": "Adeiladu fy Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Dim diolch",
|
||||
"annual_report.announcement.action_view": "Gweld fy Wrapstodon",
|
||||
"annual_report.announcement.description": "Darganfod mwy am eich ymgysylltiad â Mastodon dros y flwyddyn ddiwethaf.",
|
||||
"annual_report.announcement.title": "Mae Wrapstodon {year} wedi cyrraedd",
|
||||
"annual_report.nav_item.badge": "Newydd",
|
||||
"annual_report.shared_page.donate": "Cyfrannu",
|
||||
"annual_report.shared_page.footer": "Wedi'i gynhyrchu gyda {heart} gan dîm Mastodon",
|
||||
"annual_report.summary.archetype.booster.desc_public": "Parhaodd {name} i chwilio am bostiadau i'w hybu, gan hyrwyddo crewyr eraill yn effeithiol.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Fe wnaethoch chi aros ar y chwilio am bostiadau i'w hybu, gan chwyddo crewyr eraill yn effeithiol.",
|
||||
"annual_report.summary.archetype.booster.name": "Y Saethydd",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Rydyn ni'n gwybod bod {name} allan yna, yn rhywle, yn mwynhau Mastodon yn eu ffordd dawel eu hunain.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Rydyn ni'n gwybod eich bod chi allan yna, yn rhywle, yn mwynhau Mastodon yn eich ffordd dawel eich hun.",
|
||||
"annual_report.summary.archetype.lurker.name": "Y Stoicaidd",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "Creodd {name} fwy o bostiadau newydd nag atebion, gan gadw Mastodon yn ffres ac yn edrych i'r dyfodol.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Fe wnaethoch chi greu mwy o bostiadau newydd nag atebion, gan gadw Mastodon yn ffres ac yn edrych i'r dyfodol.",
|
||||
"annual_report.summary.archetype.oracle.name": "Yr Oracl",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "Creodd {name} fwy o arolygon barn na mathau eraill o bostiadau, gan feithrin chwilfrydedd am Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Fe greoch chi fwy o arolygon barn na mathau eraill o bostiadau, gan feithrin chwilfrydedd ar Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Y Syfrdanwr",
|
||||
"annual_report.summary.archetype.replier.desc_public": "Roedd {name} yn aml yn ymateb i bostiadau pobl eraill, gan beillio Mastodon gyda thrafodaethau newydd.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Roeddech chi'n aml yn ymateb i bostiadau pobl eraill, gan hau Mastodon gyda thrafodaethau newydd.",
|
||||
"annual_report.summary.archetype.replier.name": "Y Pili-pala",
|
||||
"annual_report.summary.archetype.reveal": "Datgelu fy nhuedd",
|
||||
"annual_report.summary.archetype.reveal_description": "Diolch am fod yn rhan o Mastodon! Amser darganfod pa duedd oeddech chi'n ei ymgorffori yn {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Tuedd {name}",
|
||||
"annual_report.summary.archetype.title_self": "Eich tuedd",
|
||||
"annual_report.summary.close": "Cau",
|
||||
"annual_report.summary.copy_link": "Copïo dolen",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {dilynwr newydd} other {dilynwr newydd}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Cafodd y postiad hwn hwb {count, plural, one {unwaith} other {# gwaith}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Cafodd y postiad hwn ei ffefrynnu {count, plural, one {unwaith} other {# gwaith}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Cafodd y post hwn {count, plural, one {un ateb} other {# ateb}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Postiad mwyaf poblogaidd",
|
||||
"annual_report.summary.most_used_app.most_used_app": "ap a ddefnyddiwyd fwyaf",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashnod a ddefnyddiwyd fwyaf",
|
||||
"annual_report.summary.most_used_hashtag.none": "Dim",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Fe wnaethoch chi gynnwys yr hashnod hwn yn {count, plural, one {un postiad} other {# postiad}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "Mae {name} wedi cynnwys yr hashnod hwn yn {count, plural, one {un postiad} other {# postiad}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "postiadau newydd",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Mae hynny'n eich rhoi chi ymysg y</topLabel><percentage></percentage><bottomLabel>uchaf o ddefnyddwyr {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Fyddwn ni ddim yn dweud wrth Bernie.",
|
||||
"annual_report.summary.thanks": "Diolch am fod yn rhan o Mastodon!",
|
||||
"annual_report.summary.share_elsewhere": "Rhannu mewn mannau eraill",
|
||||
"annual_report.summary.share_message": "Fy arddull i yw {archetype}!",
|
||||
"annual_report.summary.share_on_mastodon": "Rhannwch ar Mastodon",
|
||||
"attachments_list.unprocessed": "(heb eu prosesu)",
|
||||
"audio.hide": "Cuddio sain",
|
||||
"block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystrau mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.",
|
||||
@@ -516,6 +541,7 @@
|
||||
"keyboard_shortcuts.toggle_hidden": "Dangos/cuddio testun tu ôl i CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "Dangos/cuddio cyfryngau",
|
||||
"keyboard_shortcuts.toot": "Dechrau post newydd",
|
||||
"keyboard_shortcuts.top": "Symud i frig y rhestr",
|
||||
"keyboard_shortcuts.translate": "i gyfieithu postiad",
|
||||
"keyboard_shortcuts.unfocus": "Dad-ffocysu ardal cyfansoddi testun/chwilio",
|
||||
"keyboard_shortcuts.up": "Symud yn uwch yn y rhestr",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Færdig",
|
||||
"announcement.announcement": "Bekendtgørelse",
|
||||
"annual_report.announcement.action_build": "Byg min Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Nej tak",
|
||||
"annual_report.announcement.action_view": "Vis min Wrapstodon",
|
||||
"annual_report.announcement.description": "Få mere at vide om dit engagement på Mastodon i det forgangne år.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} er her",
|
||||
"annual_report.summary.archetype.booster": "Fremhæveren",
|
||||
"annual_report.summary.archetype.lurker": "Lureren",
|
||||
"annual_report.summary.archetype.oracle": "Oraklet",
|
||||
"annual_report.summary.archetype.pollster": "Afstemningsmageren",
|
||||
"annual_report.summary.archetype.replier": "Den sociale sommerfugl",
|
||||
"annual_report.summary.followers.followers": "følgere",
|
||||
"annual_report.summary.followers.total": "{count} i alt",
|
||||
"annual_report.summary.here_it_is": "Her er dit {year} i sammendrag:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "mest favoritmarkerede indlæg",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "mest fremhævede indlæg",
|
||||
"annual_report.summary.highlighted_post.by_replies": "indlæg med flest svar",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}s",
|
||||
"annual_report.nav_item.badge": "Ny",
|
||||
"annual_report.shared_page.donate": "Donér",
|
||||
"annual_report.shared_page.footer": "Genereret med {heart} af Mastodon-teamet",
|
||||
"annual_report.shared_page.footer_server_info": "{username} bruger {domain}, et af mange fællesskaber drevet af Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} fortsatte med at jagte indlæg, der kunne fremhæves, og styrkede andre skabere med perfekt sigte.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Du fortsatte med at jagte indlæg, der kunne fremhæves, og styrkede andre skabere med perfekt sigte.",
|
||||
"annual_report.summary.archetype.booster.name": "Bueskytten",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Vi ved, at {name} var derude et eller andet sted og nød Mastodon på sin egen stille måde.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Vi ved, at du var derude et eller andet sted og nød Mastodon på din egen stille måde.",
|
||||
"annual_report.summary.archetype.lurker.name": "Den stoiske",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} oprettede flere nye indlæg end svar og holdt dermed Mastodon frisk og fremtidsorienteret.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Du oprettede flere nye indlæg end svar og holdt dermed Mastodon frisk og fremtidsorienteret.",
|
||||
"annual_report.summary.archetype.oracle.name": "Oraklet",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} oprettede flere afstemninger end andre indlægstyper og opdyrkede nysgerrighed på Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Du oprettede flere afstemninger end andre indlægstyper og opdyrkede nysgerrighed på Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Den undrende",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} svarede ofte på andres indlæg og berigede Mastodon med nye diskussioner.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Du svarede ofte på andres indlæg og berigede Mastodon med nye diskussioner.",
|
||||
"annual_report.summary.archetype.replier.name": "Sommerfuglen",
|
||||
"annual_report.summary.archetype.reveal": "Afslør min arketype",
|
||||
"annual_report.summary.archetype.reveal_description": "Tak fordi du er en del af Mastodon! Nu er det tid til at finde ud af, hvilken arketype du var i {year}.",
|
||||
"annual_report.summary.archetype.title_public": "{name}'s arketype",
|
||||
"annual_report.summary.archetype.title_self": "Din arketype",
|
||||
"annual_report.summary.close": "Luk",
|
||||
"annual_report.summary.copy_link": "Kopiér link",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {ny følger} other {nye følgere}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Dette indlæg blev fremhævet {count, plural, one {én gang} other {# gange}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Dette indlæg blev favoritmarkeret {count, plural, one {én gang} other {# gange}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Dette indlæg fik {count, plural, one {ét svar} other {# svar}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Mest populært indlæg",
|
||||
"annual_report.summary.most_used_app.most_used_app": "mest benyttede app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Intet",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Du har inkluderet dette hashtag i {count, plural, one {ét indlæg} other {# indlæg}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} inkluderede dette hashtag i {count, plural, one {ét indlæg} other {# indlæg}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nye indlæg",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Dermed er du i top</topLabel><percentage></percentage><bottomLabel>af {domain}-brugere.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Vi fortæller det ikke til nogen.",
|
||||
"annual_report.summary.share_elsewhere": "Del andetsteds",
|
||||
"annual_report.summary.share_message": "Min arketype er {archetype}!",
|
||||
"annual_report.summary.thanks": "Tak for at være en del af Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Del på Mastodon",
|
||||
"attachments_list.unprocessed": "(ubehandlet)",
|
||||
"audio.hide": "Skjul lyd",
|
||||
"block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.",
|
||||
@@ -413,12 +435,14 @@
|
||||
"follow_suggestions.hints.similar_to_recently_followed": "Denne profil svarer til de profiler, som senest er blevet fulgt.",
|
||||
"follow_suggestions.personalized_suggestion": "Personligt forslag",
|
||||
"follow_suggestions.popular_suggestion": "Populært forslag",
|
||||
"follow_suggestions.popular_suggestion_longer": "Populært på {domain}",
|
||||
"follow_suggestions.popular_suggestion_longer": "Populær på {domain}",
|
||||
"follow_suggestions.similar_to_recently_followed_longer": "Minder om profiler, du har fulgt for nylig",
|
||||
"follow_suggestions.view_all": "Vis alle",
|
||||
"follow_suggestions.who_to_follow": "Hvem, som skal følges",
|
||||
"followed_tags": "Hashtags, som følges",
|
||||
"footer.about": "Om",
|
||||
"footer.about_mastodon": "Om Mastodon",
|
||||
"footer.about_server": "Om {domain}",
|
||||
"footer.about_this_server": "Om",
|
||||
"footer.directory": "Profiloversigt",
|
||||
"footer.get_app": "Hent appen",
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
"account.go_to_profile": "Profil aufrufen",
|
||||
"account.hide_reblogs": "Geteilte Beiträge von @{name} ausblenden",
|
||||
"account.in_memoriam": "Zum Andenken.",
|
||||
"account.joined_short": "Mitglied seit",
|
||||
"account.joined_short": "Registriert am",
|
||||
"account.languages": "Ausgewählte Sprachen ändern",
|
||||
"account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt",
|
||||
"account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.",
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Fertig",
|
||||
"announcement.announcement": "Ankündigung",
|
||||
"annual_report.announcement.action_build": "Erstelle mein Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Nein danke",
|
||||
"annual_report.announcement.action_view": "Mein Wrapstodon anschauen",
|
||||
"annual_report.announcement.description": "Erfahre mehr über deine Aktivitäten auf Mastodon im vergangenen Jahr.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} ist fertiggestellt",
|
||||
"annual_report.summary.archetype.booster": "Trendjäger*in",
|
||||
"annual_report.summary.archetype.lurker": "Beobachter*in",
|
||||
"annual_report.summary.archetype.oracle": "Universaltalent",
|
||||
"annual_report.summary.archetype.pollster": "Meinungsforscher*in",
|
||||
"annual_report.summary.archetype.replier": "Gesellige*r",
|
||||
"annual_report.summary.followers.followers": "Follower",
|
||||
"annual_report.summary.followers.total": "{count} insgesamt",
|
||||
"annual_report.summary.here_it_is": "Dein Jahresrückblick für {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "am häufigsten favorisierter Beitrag",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "am häufigsten geteilter Beitrag",
|
||||
"annual_report.summary.highlighted_post.by_replies": "Beitrag mit den meisten Antworten",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.nav_item.badge": "Neu",
|
||||
"annual_report.shared_page.donate": "Spenden",
|
||||
"annual_report.shared_page.footer": "Mit {heart} vom Mastodon-Team erstellt",
|
||||
"annual_report.shared_page.footer_server_info": "{username} verwendet {domain} – eine von vielen Mastodon-Gemeinschaften.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} hielt Ausschau nach Beiträgen, um sie zu teilen und den Autor*innen mehr Reichweite zu bescheren.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Du hieltest Ausschau nach Beiträgen, um sie zu teilen und den Autor*innen mehr Reichweite zu bescheren.",
|
||||
"annual_report.summary.archetype.booster.name": "Flitzebogen",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "{name} befand sich irgendwo in den Tiefen von Mastodon und genoss das stille Dasein.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Du befandest dich irgendwo in den Tiefen von Mastodon und genossest das stille Dasein.",
|
||||
"annual_report.summary.archetype.lurker.name": "Unerschütterliche*r",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} verfasste mehr Beiträge als Antworten, damit Mastodon abwechslungsreich blieb.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Du verfasstest mehr Beiträge als Antworten, damit Mastodon abwechslungsreich blieb.",
|
||||
"annual_report.summary.archetype.oracle.name": "Orakel",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} erstellte mehr Umfragen als alles andere und förderte die Neugier auf Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Du erstelltest mehr Umfragen als alles andere und fördertest die Neugier auf Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Grübler*in",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} antwortete regelmäßig auf die Beiträge anderer und sorgte für blühende Diskussionen auf Mastodon.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Du antwortetest regelmäßig auf die Beiträge anderer und sorgtest für blühende Diskussionen auf Mastodon.",
|
||||
"annual_report.summary.archetype.replier.name": "Schmetterling",
|
||||
"annual_report.summary.archetype.reveal": "Enthülle mein Wesen",
|
||||
"annual_report.summary.archetype.reveal_description": "Danke, dass du Teil von Mastodon bist! Zeit herauszufinden, welches Wesen du {year} verkörpert hast.",
|
||||
"annual_report.summary.archetype.title_public": "Wesen von {name}",
|
||||
"annual_report.summary.archetype.title_self": "Mein Wesen",
|
||||
"annual_report.summary.close": "Schließen",
|
||||
"annual_report.summary.copy_link": "Link kopieren",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {neuer Follower} other {neue Follower}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Dieser Beitrag wurde {count, plural, one {1 ×} other {# ×}} geteilt.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Dieser Beitrag wurde {count, plural, one {1 ×} other {# ×}} favorisiert.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Dieser Beitrag erhielt {count, plural, one {1 Antwort} other {# Antworten}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Beliebtester Beitrag",
|
||||
"annual_report.summary.most_used_app.most_used_app": "am häufigsten verwendete App",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "am häufigsten verwendeter Hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Keiner",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Du verwendetest diesen Hashtag in {count, plural, one {1 Beitrag} other {# Beiträgen}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} verwendete diesen Hashtag in {count, plural, one {1 Beitrag} other {# Beiträgen}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "neue Beiträge",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Damit gehörst du zu den obersten</topLabel><percentage></percentage><bottomLabel>der Nutzer*innen auf {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Wir werden Bernie nichts verraten.",
|
||||
"annual_report.summary.share_message": "Ich habe den {archetype} Archetyp!",
|
||||
"annual_report.summary.thanks": "Danke, dass du Teil von Mastodon bist!",
|
||||
"annual_report.summary.share_elsewhere": "Woanders teilen",
|
||||
"annual_report.summary.share_message": "Ich bin vom Wesen {archetype}!",
|
||||
"annual_report.summary.share_on_mastodon": "Auf Mastodon teilen",
|
||||
"attachments_list.unprocessed": "(ausstehend)",
|
||||
"audio.hide": "Audio ausblenden",
|
||||
"block_modal.remote_users_caveat": "Wir werden den Server {domain} bitten, deine Entscheidung zu respektieren. Allerdings kann nicht garantiert werden, dass sie eingehalten wird, weil einige Server Blockierungen unterschiedlich handhaben können. Öffentliche Beiträge können für nicht angemeldete Nutzer*innen weiterhin sichtbar sein.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Wem folgen?",
|
||||
"followed_tags": "Abonnierte Hashtags",
|
||||
"footer.about": "Über",
|
||||
"footer.about_mastodon": "Über Mastodon",
|
||||
"footer.about_server": "Über {domain}",
|
||||
"footer.about_this_server": "Über",
|
||||
"footer.directory": "Profilverzeichnis",
|
||||
"footer.get_app": "App herunterladen",
|
||||
@@ -937,7 +961,7 @@
|
||||
"status.quote_error.pending_approval_popout.body": "Auf Mastodon kannst du selbst bestimmen, ob du von anderen zitiert werden darfst oder nicht – oder nur nach individueller Genehmigung. Wir warten in diesem Fall noch auf die Genehmigung des ursprünglichen Profils. Bis dahin steht die Veröffentlichung deines Beitrags mit dem zitierten Post noch aus.",
|
||||
"status.quote_error.revoked": "Beitrag durch Autor*in entfernt",
|
||||
"status.quote_followers_only": "Nur Follower können diesen Beitrag zitieren",
|
||||
"status.quote_manual_review": "Zitierte*r überprüft manuell",
|
||||
"status.quote_manual_review": "Autor*in wird deine Anfrage manuell überprüfen",
|
||||
"status.quote_noun": "Zitat",
|
||||
"status.quote_policy_change": "Ändern, wer zitieren darf",
|
||||
"status.quote_post_author": "Zitierter Beitrag von @{name}",
|
||||
@@ -955,7 +979,7 @@
|
||||
"status.reblogs_count": "{count, plural, one {{counter} × geteilt} other {{counter} × geteilt}}",
|
||||
"status.redraft": "Löschen und neu erstellen",
|
||||
"status.remove_bookmark": "Lesezeichen entfernen",
|
||||
"status.remove_favourite": "Aus Favoriten entfernen",
|
||||
"status.remove_favourite": "Favorisierung entfernen",
|
||||
"status.remove_quote": "Entfernen",
|
||||
"status.replied_in_thread": "Antwortete im Thread",
|
||||
"status.replied_to": "Antwortete {name}",
|
||||
@@ -972,7 +996,7 @@
|
||||
"status.title.with_attachments": "{user} veröffentlichte {attachmentCount, plural, one {ein Medium} other {{attachmentCount} Medien}}",
|
||||
"status.translate": "Übersetzen",
|
||||
"status.translated_from_with": "Aus {lang} mittels {provider} übersetzt",
|
||||
"status.uncached_media_warning": "Vorschau nicht verfügbar",
|
||||
"status.uncached_media_warning": "Vorschau noch nicht verfügbar",
|
||||
"status.unmute_conversation": "Stummschaltung der Unterhaltung aufheben",
|
||||
"status.unpin": "Vom Profil lösen",
|
||||
"subscribed_languages.lead": "Nach der Änderung werden nur noch Beiträge in den ausgewählten Sprachen in den Timelines deiner Startseite und deiner Listen angezeigt. Wähle keine Sprache aus, um alle Beiträge zu sehen.",
|
||||
@@ -1008,7 +1032,7 @@
|
||||
"upload_form.drag_and_drop.on_drag_over": "Der Medienanhang {item} wurde bewegt.",
|
||||
"upload_form.drag_and_drop.on_drag_start": "Der Medienanhang {item} wurde aufgenommen.",
|
||||
"upload_form.edit": "Bearbeiten",
|
||||
"upload_progress.label": "Wird hochgeladen …",
|
||||
"upload_progress.label": "Upload läuft …",
|
||||
"upload_progress.processing": "Wird verarbeitet …",
|
||||
"username.taken": "Dieser Profilname ist vergeben. Versuche einen anderen",
|
||||
"video.close": "Video schließen",
|
||||
|
||||
@@ -47,12 +47,12 @@
|
||||
"account.follow_request_cancel_short": "Ακύρωση",
|
||||
"account.follow_request_short": "Αίτημα",
|
||||
"account.followers": "Ακόλουθοι",
|
||||
"account.followers.empty": "Κανείς δεν ακολουθεί αυτόν τον χρήστη ακόμα.",
|
||||
"account.followers.empty": "Κανείς δεν ακολουθεί αυτόν τον χρήστη ακόμη.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} ακόλουθος} other {{counter} ακόλουθοι}}",
|
||||
"account.followers_you_know_counter": "{counter} που ξέρεις",
|
||||
"account.following": "Ακολουθείτε",
|
||||
"account.following_counter": "{count, plural, one {{counter} ακολουθεί} other {{counter} ακολουθούν}}",
|
||||
"account.follows.empty": "Αυτός ο χρήστης δεν ακολουθεί κανέναν ακόμα.",
|
||||
"account.follows.empty": "Αυτός ο χρήστης δεν ακολουθεί κανέναν ακόμη.",
|
||||
"account.follows_you": "Σε ακολουθεί",
|
||||
"account.go_to_profile": "Μετάβαση στο προφίλ",
|
||||
"account.hide_reblogs": "Απόκρυψη ενισχύσεων από @{name}",
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Ολοκληρώθηκε",
|
||||
"announcement.announcement": "Ανακοίνωση",
|
||||
"annual_report.announcement.action_build": "Φτιάξε το Wrapstodon μου",
|
||||
"annual_report.announcement.action_dismiss": "Όχι, ευχαριστώ",
|
||||
"annual_report.announcement.action_view": "Προβολή του Wrapstodon μου",
|
||||
"annual_report.announcement.description": "Ανακαλύψτε περισσότερα για την αλληλεπίδραση σας στο Mastodon κατά τη διάρκεια του περασμένου έτους.",
|
||||
"annual_report.announcement.title": "Το Wrapstodon του {year} έφτασε",
|
||||
"annual_report.summary.archetype.booster": "Ο κυνηγός των φοβερών",
|
||||
"annual_report.summary.archetype.lurker": "Ο διακριτικός",
|
||||
"annual_report.summary.archetype.oracle": "Η Πυθία",
|
||||
"annual_report.summary.archetype.pollster": "Ο δημοσκόπος",
|
||||
"annual_report.summary.archetype.replier": "Η κοινωνική πεταλούδα",
|
||||
"annual_report.summary.followers.followers": "ακόλουθοι",
|
||||
"annual_report.summary.followers.total": "{count} συνολικά",
|
||||
"annual_report.summary.here_it_is": "Εδώ είναι το {year} σου σε ανασκόπηση:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "πιο αγαπημένη ανάρτηση",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "πιο ενισχυμένη ανάρτηση",
|
||||
"annual_report.summary.highlighted_post.by_replies": "ανάρτηση με τις περισσότερες απαντήσεις",
|
||||
"annual_report.summary.highlighted_post.possessive": "του χρήστη {name}",
|
||||
"annual_report.nav_item.badge": "Νέο",
|
||||
"annual_report.shared_page.donate": "Δωρεά",
|
||||
"annual_report.shared_page.footer": "Παράχθηκε με {heart} από την ομάδα του Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "Ο/Η {username} χρησιμοποιεί το {domain}, μία από τις πολλές κοινότητες που βασίζονται στο Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "Ο/Η {name} έμεινε στο κυνήγι για αναρτήσεις για να τις ενισχύσει, ενισχύοντας άλλους δημιουργούς με τέλειο στόχο.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Έμεινες στο κυνήγι για αναρτήσεις για να τις ενισχύσεις, ενισχύοντας άλλους δημιουργούς με τέλειο στόχο.",
|
||||
"annual_report.summary.archetype.booster.name": "Ο Τοξότης",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Ξέρουμε ότι ο/η {name} ήταν εκεί έξω, κάπου, απολαμβάνοντας το Mastodon με τον δικό του/της ήσυχο τρόπο.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Ξέρουμε ότι ήσουν εκεί έξω, κάπου, απολαμβάνοντας το Mastodon με τον δικό σου ήσυχο τρόπο.",
|
||||
"annual_report.summary.archetype.lurker.name": "Ο Στωϊκός",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "O/H {name} δημιούργησε νέες αναρτήσεις περισσότερο από ότι απαντήσεις, κρατώντας το Mastodon φρέσκο και κοιτώντας προς το μέλλον.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Δημιούργησες νέες αναρτήσεις περισσότερο από ότι απαντήσεις, κρατώντας το Mastodon φρέσκο και κοιτώντας προς το μέλλον.",
|
||||
"annual_report.summary.archetype.oracle.name": "Η Πυθία",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "Ο/Η {name} δημιούργησε περισσότερες δημοσκοπήσεις από άλλα είδη αναρτήσεων, καλλιεργώντας περιέργεια στο Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Δημιούργησες περισσότερες δημοσκοπήσεις από άλλα είδη αναρτήσεων, καλλιεργώντας περιέργεια στο Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Ο Θαυμαστής",
|
||||
"annual_report.summary.archetype.replier.desc_public": "Ο/Η {name} συχνά απαντούσε σε αναρτήσεις άλλων ανθρώπων, επικονίαζοντας το Mastodon με νέες συζητήσεις.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Συχνά απαντούσες σε αναρτήσεις άλλων ανθρώπων, επικονίαζοντας το Mastodon με νέες συζητήσεις.",
|
||||
"annual_report.summary.archetype.replier.name": "Η Πεταλούδα",
|
||||
"annual_report.summary.archetype.reveal": "Αποκάλυψε το αρχέτυπο μου",
|
||||
"annual_report.summary.archetype.reveal_description": "Ευχαριστούμε που είσαι μέρος του Mastodon! Ώρα να μάθεις ποιο αρχέτυπο έχεις ενσαρκώσει το {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Αρχέτυπο του/της {name}",
|
||||
"annual_report.summary.archetype.title_self": "Το αρχέτυπο σου",
|
||||
"annual_report.summary.close": "Κλείσιμο",
|
||||
"annual_report.summary.copy_link": "Αντιγραφή συνδέσμου",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {νέος ακόλουθος} other {νέοι ακόλουθοι}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Αυτή η ανάρτηση ενισχύθηκε {count, plural, one {μια φορά} other {# φορές}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Αυτή η ανάρτηση αγαπήθηκε {count, plural, one {μια φορά} other {# φορές}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Αυτή η ανάρτηση πήρε {count, plural, one {μια απάντηση} other {# απαντήσεις}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Πιο δημοφιλής ανάρτηση",
|
||||
"annual_report.summary.most_used_app.most_used_app": "πιο χρησιμοποιημένη εφαρμογή",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "πιο χρησιμοποιημένη ετικέτα",
|
||||
"annual_report.summary.most_used_hashtag.none": "Κανένα",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Έχεις συμπεριλάβει αυτήν την ετικέτα σε {count, plural, one {μια ανάρτηση} other {# αναρτήσεις}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "Ο/Η {name} έχει συμπεριλάβει αυτήν την ετικέτα σε {count, plural, one {μια ανάρτηση} other {# αναρτήσεις}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "νέες αναρτήσεις",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Αυτό σε βάζει στο </topLabel><percentage></percentage><bottomLabel>των κορυφαίων χρηστών του {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Δεν θα το πούμε στον Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Κοινοποίηση αλλού",
|
||||
"annual_report.summary.share_message": "Πήρα το αρχέτυπο {archetype}!",
|
||||
"annual_report.summary.thanks": "Ευχαριστούμε που συμμετέχεις στο Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Κοινοποίηση στο Mastodon",
|
||||
"attachments_list.unprocessed": "(μη επεξεργασμένο)",
|
||||
"audio.hide": "Απόκρυψη αρχείου ήχου",
|
||||
"block_modal.remote_users_caveat": "Θα ζητήσουμε από τον διακομιστή {domain} να σεβαστεί την απόφασή σου. Ωστόσο, η συμμόρφωση δεν είναι εγγυημένη δεδομένου ότι ορισμένοι διακομιστές ενδέχεται να χειρίζονται τους αποκλεισμούς διαφορετικά. Οι δημόσιες αναρτήσεις ενδέχεται να είναι ορατές σε μη συνδεδεμένους χρήστες.",
|
||||
@@ -337,30 +359,30 @@
|
||||
"emoji_button.search_results": "Αποτελέσματα αναζήτησης",
|
||||
"emoji_button.symbols": "Σύμβολα",
|
||||
"emoji_button.travel": "Ταξίδια & Τοποθεσίες",
|
||||
"empty_column.account_featured.me": "Δεν έχεις αναδείξει τίποτα ακόμα. Γνώριζες ότι μπορείς να αναδείξεις τις ετικέτες που χρησιμοποιείς περισσότερο, ακόμη και τους λογαριασμούς των φίλων σου στο προφίλ σου;",
|
||||
"empty_column.account_featured.other": "Ο λογαριασμός {acct} δεν αναδείξει τίποτα ακόμα. Γνώριζες ότι μπορείς να αναδείξεις τις ετικέτες που χρησιμοποιείς περισσότερο, ακόμη και τους λογαριασμούς των φίλων σου στο προφίλ σου;",
|
||||
"empty_column.account_featured_other.unknown": "Αυτός ο λογαριασμός δεν έχει αναδείξει τίποτα ακόμα.",
|
||||
"empty_column.account_featured.me": "Δεν έχεις αναδείξει τίποτα ακόμη. Γνώριζες ότι μπορείς να αναδείξεις τις ετικέτες που χρησιμοποιείς περισσότερο, ακόμη και τους λογαριασμούς των φίλων σου στο προφίλ σου;",
|
||||
"empty_column.account_featured.other": "Ο/Η {acct} δεν έχει αναδείξει τίποτα ακόμη. Γνώριζες ότι μπορείς να αναδείξεις τις ετικέτες που χρησιμοποιείς περισσότερο, ακόμη και τους λογαριασμούς των φίλων σου στο προφίλ σου;",
|
||||
"empty_column.account_featured_other.unknown": "Αυτός ο λογαριασμός δεν έχει αναδείξει τίποτα ακόμη.",
|
||||
"empty_column.account_hides_collections": "Αυτός ο χρήστης έχει επιλέξει να μην καταστήσει αυτές τις πληροφορίες διαθέσιμες",
|
||||
"empty_column.account_suspended": "Λογαριασμός σε αναστολή",
|
||||
"empty_column.account_timeline": "Δεν έχει αναρτήσεις εδώ!",
|
||||
"empty_column.account_unavailable": "Μη διαθέσιμο προφίλ",
|
||||
"empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμα.",
|
||||
"empty_column.bookmarked_statuses": "Δεν έχεις καμία ανάρτηση με σελιδοδείκτη ακόμα. Μόλις βάλεις κάποιον, θα εμφανιστεί εδώ.",
|
||||
"empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμη.",
|
||||
"empty_column.bookmarked_statuses": "Δεν έχεις καμία ανάρτηση με σελιδοδείκτη ακόμη. Μόλις βάλεις κάποιον, θα εμφανιστεί εδώ.",
|
||||
"empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσια για να αρχίσει να κυλά η μπάλα!",
|
||||
"empty_column.direct": "Δεν έχεις καμία προσωπική επισήμανση ακόμα. Όταν στείλεις ή λάβεις μία, θα εμφανιστεί εδώ.",
|
||||
"empty_column.direct": "Δεν έχεις καμία προσωπική επισήμανση ακόμη. Όταν στείλεις ή λάβεις μία, θα εμφανιστεί εδώ.",
|
||||
"empty_column.disabled_feed": "Αυτή η ροή έχει απενεργοποιηθεί από τους διαχειριστές του διακομιστή σας.",
|
||||
"empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμα.",
|
||||
"empty_column.domain_blocks": "Δεν υπάρχουν αποκλεισμένοι τομείς ακόμη.",
|
||||
"empty_column.explore_statuses": "Τίποτα δεν βρίσκεται στις τάσεις αυτή τη στιγμή. Έλεγξε αργότερα!",
|
||||
"empty_column.favourited_statuses": "Δεν έχεις καμία αγαπημένη ανάρτηση ακόμα. Μόλις αγαπήσεις κάποια, θα εμφανιστεί εδώ.",
|
||||
"empty_column.favourites": "Κανείς δεν έχει αγαπήσει αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
||||
"empty_column.follow_requests": "Δεν έχεις κανένα αίτημα παρακολούθησης ακόμα. Μόλις λάβεις κάποιο, θα εμφανιστεί εδώ.",
|
||||
"empty_column.followed_tags": "Δεν έχετε ακολουθήσει ακόμα καμία ετικέτα. Όταν το κάνετε, θα εμφανιστούν εδώ.",
|
||||
"empty_column.hashtag": "Δεν υπάρχει ακόμα κάτι για αυτή την ετικέτα.",
|
||||
"empty_column.favourited_statuses": "Δεν έχεις καμία αγαπημένη ανάρτηση ακόμη. Μόλις αγαπήσεις κάποια, θα εμφανιστεί εδώ.",
|
||||
"empty_column.favourites": "Κανείς δεν έχει αγαπήσει αυτή την ανάρτηση ακόμη. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
||||
"empty_column.follow_requests": "Δεν έχεις κανένα αίτημα παρακολούθησης ακόμη. Μόλις λάβεις κάποιο, θα εμφανιστεί εδώ.",
|
||||
"empty_column.followed_tags": "Δεν έχεις ακολουθήσει καμία ετικέτα ακόμη. Όταν το κάνεις, θα εμφανιστούν εδώ.",
|
||||
"empty_column.hashtag": "Δεν υπάρχει τίποτα σε αυτή την ετικέτα ακόμη.",
|
||||
"empty_column.home": "Η τοπική σου ροή είναι κενή! Πήγαινε στο {public} ή κάνε αναζήτηση για να ξεκινήσεις και να γνωρίσεις άλλους χρήστες.",
|
||||
"empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμα. Όταν τα μέλη της δημοσιεύσουν νέες καταστάσεις, θα εμφανιστούν εδώ.",
|
||||
"empty_column.mutes": "Δεν έχεις κανένα χρήστη σε σίγαση ακόμα.",
|
||||
"empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμη. Όταν τα μέλη της δημοσιεύσουν νέες αναρτήσεις, θα εμφανιστούν εδώ.",
|
||||
"empty_column.mutes": "Δεν έχεις κανένα χρήστη σε σίγαση ακόμη.",
|
||||
"empty_column.notification_requests": "Όλα καθαρά! Δεν υπάρχει τίποτα εδώ. Όταν λαμβάνεις νέες ειδοποιήσεις, αυτές θα εμφανίζονται εδώ σύμφωνα με τις ρυθμίσεις σου.",
|
||||
"empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Όταν άλλα άτομα αλληλεπιδράσουν μαζί σου, θα το δεις εδώ.",
|
||||
"empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμη. Όταν άλλα άτομα αλληλεπιδράσουν μαζί σου, θα το δεις εδώ.",
|
||||
"empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο ή ακολούθησε χειροκίνητα χρήστες από άλλους διακομιστές για να τη γεμίσεις",
|
||||
"error.no_hashtag_feed_access": "Γίνετε μέλος ή συνδεθείτε για να δείτε και να ακολουθήσετε αυτήν την ετικέτα.",
|
||||
"error.unexpected_crash.explanation": "Είτε λόγω σφάλματος στον κώδικά μας ή λόγω ασυμβατότητας με τον περιηγητή, η σελίδα δε μπόρεσε να εμφανιστεί σωστά.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Ποιον να ακολουθήσεις",
|
||||
"followed_tags": "Ακολουθούμενες ετικέτες",
|
||||
"footer.about": "Σχετικά με",
|
||||
"footer.about_mastodon": "Σχετικά με το Mastodon",
|
||||
"footer.about_server": "Σχετικά με το {domain}",
|
||||
"footer.about_this_server": "Σχετικά με",
|
||||
"footer.directory": "Κατάλογος προφίλ",
|
||||
"footer.get_app": "Αποκτήστε την εφαρμογή",
|
||||
@@ -449,7 +473,7 @@
|
||||
"hashtag.mute": "Σίγαση #{hashtag}",
|
||||
"hashtag.unfeature": "Να μην αναδεικνύεται στο προφίλ",
|
||||
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
||||
"hashtags.and_other": "…και {count, plural, other {# ακόμη}}",
|
||||
"hashtags.and_other": "…και {count, plural, other {# ακόμα}}",
|
||||
"hints.profiles.followers_may_be_missing": "Μπορεί να λείπουν ακόλουθοι για αυτό το προφίλ.",
|
||||
"hints.profiles.follows_may_be_missing": "Άτομα που ακολουθούνται μπορεί να λείπουν απ' αυτό το προφίλ.",
|
||||
"hints.profiles.posts_may_be_missing": "Κάποιες αναρτήσεις από αυτό το προφίλ μπορεί να λείπουν.",
|
||||
@@ -466,7 +490,7 @@
|
||||
"home.show_announcements": "Εμφάνιση ανακοινώσεων",
|
||||
"ignore_notifications_modal.disclaimer": "Το Mastodon δε μπορεί να ενημερώσει τους χρήστες ότι αγνόησες τις ειδοποιήσεις του. Η αγνόηση ειδοποιήσεων δεν θα εμποδίσει την αποστολή των ίδιων των μηνυμάτων.",
|
||||
"ignore_notifications_modal.filter_instead": "Φίλτρο αντ' αυτού",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Θα μπορείς ακόμα να αποδεχθείς, να απορρίψεις ή να αναφέρεις χρήστες",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Θα μπορείς ακόμη να αποδεχθείς, να απορρίψεις ή να αναφέρεις χρήστες",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Το φιλτράρισμα βοηθά στην αποφυγή πιθανής σύγχυσης",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Μπορείς να δεις τις φιλτραρισμένες ειδοποιήσεις ξεχωριστά",
|
||||
"ignore_notifications_modal.ignore": "Αγνόηση ειδοποιήσεων",
|
||||
@@ -552,8 +576,8 @@
|
||||
"lists.list_members_count": "{count, plural, one {# μέλος} other {# μέλη}}",
|
||||
"lists.list_name": "Όνομα λίστας",
|
||||
"lists.new_list_name": "Νέο όνομα λίστας",
|
||||
"lists.no_lists_yet": "Δεν υπάρχουν λίστες ακόμα.",
|
||||
"lists.no_members_yet": "Κανένα μέλος ακόμα.",
|
||||
"lists.no_lists_yet": "Καμία λίστα ακόμη.",
|
||||
"lists.no_members_yet": "Κανένα μέλος ακόμη.",
|
||||
"lists.no_results_found": "Δεν βρέθηκαν αποτελέσματα.",
|
||||
"lists.remove_member": "Αφαίρεση",
|
||||
"lists.replies_policy.followed": "Οποιοσδήποτε χρήστης που ακολουθείς",
|
||||
@@ -613,15 +637,15 @@
|
||||
"notification.admin.report_statuses": "Ο χρήστης {name} ανέφερε τον χρήστη {target} για {category}",
|
||||
"notification.admin.report_statuses_other": "Ο χρήστης {name} ανέφερε τον χρήστη {target}",
|
||||
"notification.admin.sign_up": "{name} έχει εγγραφεί",
|
||||
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί",
|
||||
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμα} other {# ακόμα}} έχουν εγγραφεί",
|
||||
"notification.annual_report.message": "Το #Wrapstodon {year} σε περιμένει! Αποκάλυψε τα στιγμιότυπα της χρονιάς και αξέχαστες στιγμές σου στο Mastodon!",
|
||||
"notification.annual_report.view": "Προβολή #Wrapstodon",
|
||||
"notification.favourite": "{name} αγάπησε την ανάρτηση σου",
|
||||
"notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ανάρτησή σου",
|
||||
"notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμα} other {# ακόμα}}</a> αγάπησαν την ανάρτησή σου",
|
||||
"notification.favourite_pm": "Ο χρήστης {name} αγάπησε την ιδιωτική σου επισήμανση",
|
||||
"notification.favourite_pm.name_and_others_with_link": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ιδωτική σου επισήμανση",
|
||||
"notification.favourite_pm.name_and_others_with_link": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμα} other {# ακόμα}}</a> αγάπησαν την ιδωτική σου επισήμανση",
|
||||
"notification.follow": "Ο χρήστης {name} σε ακολούθησε",
|
||||
"notification.follow.name_and_others": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> σε ακολούθησαν",
|
||||
"notification.follow.name_and_others": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμα} other {# ακόμα}}</a> σε ακολούθησαν",
|
||||
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
|
||||
"notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν",
|
||||
"notification.label.mention": "Επισήμανση",
|
||||
@@ -644,7 +668,7 @@
|
||||
"notification.poll": "Μία ψηφοφορία στην οποία συμμετείχες έχει τελειώσει",
|
||||
"notification.quoted_update": "Ο χρήστης {name} επεξεργάστηκε μία ανάρτηση που παρέθεσες",
|
||||
"notification.reblog": "Ο/Η {name} ενίσχυσε την ανάρτηση σου",
|
||||
"notification.reblog.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> ενίσχυσαν την ανάρτησή σου",
|
||||
"notification.reblog.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμα} 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 {# λογαριασμό} other {# λογαριασμοί}} που ακολουθείς.",
|
||||
@@ -812,7 +836,7 @@
|
||||
"report.forward": "Προώθηση προς {target}",
|
||||
"report.forward_hint": "Ο λογαριασμός είναι από διαφορετικό διακομιστή. Να σταλεί ανώνυμο αντίγραφο της αναφοράς και εκεί;",
|
||||
"report.mute": "Σίγαση",
|
||||
"report.mute_explanation": "Δεν θα βλέπεις τις αναρτήσεις του. Εκείνοι μπορούν ακόμα να σε ακολουθούν και να βλέπουν τις αναρτήσεις σου χωρίς να γνωρίζουν ότι είναι σε σίγαση.",
|
||||
"report.mute_explanation": "Δεν θα βλέπεις τις αναρτήσεις τους. Εκείνοι μπορούν ακόμη να σε ακολουθούν και να βλέπουν τις αναρτήσεις σου χωρίς να γνωρίζουν ότι είναι σε σίγαση.",
|
||||
"report.next": "Επόμενο",
|
||||
"report.placeholder": "Επιπλέον σχόλια",
|
||||
"report.reasons.dislike": "Δεν μου αρέσει",
|
||||
@@ -942,7 +966,7 @@
|
||||
"status.quote_policy_change": "Αλλάξτε ποιός μπορεί να κάνει παράθεση",
|
||||
"status.quote_post_author": "Παρατίθεται μια ανάρτηση από @{name}",
|
||||
"status.quote_private": "Ιδιωτικές αναρτήσεις δεν μπορούν να παρατεθούν",
|
||||
"status.quotes.empty": "Κανείς δεν έχει παραθέσει αυτή την ανάρτηση ακόμα. Μόλις το κάνει, θα εμφανιστεί εδώ.",
|
||||
"status.quotes.empty": "Κανείς δεν έχει παραθέσει αυτή την ανάρτηση ακόμη. Μόλις το κάνει, θα εμφανιστεί εδώ.",
|
||||
"status.quotes.local_other_disclaimer": "Οι παραθέσεις που απορρίφθηκαν από τον συντάκτη δε θα εμφανιστούν.",
|
||||
"status.quotes.remote_other_disclaimer": "Μόνο παραθέσεις από το {domain} είναι εγγυημένες ότι θα εμφανιστούν εδώ. Παραθέσεις που απορρίφθηκαν από τον συντάκτη δε θα εμφανιστούν.",
|
||||
"status.quotes_count": "{count, plural, one {{counter} παράθεση} other {{counter} παραθέσεις}}",
|
||||
@@ -951,7 +975,7 @@
|
||||
"status.reblog_or_quote": "Ενίσχυση ή παράθεση",
|
||||
"status.reblog_private": "Μοιράσου ξανά με τους ακόλουθούς σου",
|
||||
"status.reblogged_by": "{name} προώθησε",
|
||||
"status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
||||
"status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμη. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
||||
"status.reblogs_count": "{count, plural, one {{counter} ενίσχυση} other {{counter} ενισχύσεις}}",
|
||||
"status.redraft": "Σβήσε & ξαναγράψε",
|
||||
"status.remove_bookmark": "Αφαίρεση σελιδοδείκτη",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Done",
|
||||
"announcement.announcement": "Announcement",
|
||||
"annual_report.announcement.action_build": "Build my Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "No thanks",
|
||||
"annual_report.announcement.action_view": "View my Wrapstodon",
|
||||
"annual_report.announcement.description": "Discover more about your engagement on Mastodon over the past year.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} has arrived",
|
||||
"annual_report.summary.archetype.booster": "The cool-hunter",
|
||||
"annual_report.summary.archetype.lurker": "The lurker",
|
||||
"annual_report.summary.archetype.oracle": "The oracle",
|
||||
"annual_report.summary.archetype.pollster": "The pollster",
|
||||
"annual_report.summary.archetype.replier": "The social butterfly",
|
||||
"annual_report.summary.followers.followers": "followers",
|
||||
"annual_report.summary.followers.total": "{count} total",
|
||||
"annual_report.summary.here_it_is": "Here is your {year} in review:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "most favourited post",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "most boosted post",
|
||||
"annual_report.summary.highlighted_post.by_replies": "post with the most replies",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}'s",
|
||||
"annual_report.nav_item.badge": "New",
|
||||
"annual_report.shared_page.donate": "Donate",
|
||||
"annual_report.shared_page.footer": "Generated with {heart} by the Mastodon team",
|
||||
"annual_report.shared_page.footer_server_info": "{username} uses {domain}, one of many communities powered by Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} stayed on the hunt for posts to boost, amplifying other creators with perfect aim.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "You stayed on the hunt for posts to boost, amplifying other creators with perfect aim.",
|
||||
"annual_report.summary.archetype.booster.name": "The Archer",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "We know {name} was out there, somewhere, enjoying Mastodon in their own quiet way.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "We know you were out there, somewhere, enjoying Mastodon in your own quiet way.",
|
||||
"annual_report.summary.archetype.lurker.name": "The Stoic",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} created new posts more than replies, keeping Mastodon fresh and future-facing.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "You created new posts more than replies, keeping Mastodon fresh and future-facing.",
|
||||
"annual_report.summary.archetype.oracle.name": "The Oracle",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} created more polls than other post types, cultivating curiosity on Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "You created more polls than other post types, cultivating curiosity on Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "The Wonderer",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} frequently replied to other people’s posts, pollinating Mastodon with new discussions.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "You frequently replied to other people’s posts, pollinating Mastodon with new discussions.",
|
||||
"annual_report.summary.archetype.replier.name": "The Butterfly",
|
||||
"annual_report.summary.archetype.reveal": "Reveal my archetype",
|
||||
"annual_report.summary.archetype.reveal_description": "Thanks for being part of Mastodon! Time to find out which archetype you embodied in {year}.",
|
||||
"annual_report.summary.archetype.title_public": "{name}'s archetype",
|
||||
"annual_report.summary.archetype.title_self": "Your archetype",
|
||||
"annual_report.summary.close": "Close",
|
||||
"annual_report.summary.copy_link": "Copy link",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {new follower} other {new followers}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "This post was boosted {count, plural, one {once} other {# times}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "This post was favourited {count, plural, one {once} other {# times}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "This post got {count, plural, one {one reply} other {# replies}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Most popular post",
|
||||
"annual_report.summary.most_used_app.most_used_app": "most used app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "most used hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "None",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "You included this hashtag in {count, plural, one {one post} other {# posts}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} included this hashtag in {count, plural, one {one post} other {# posts}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "new posts",
|
||||
"annual_report.summary.percentile.text": "<topLabel>That puts you in the top</topLabel><percentage></percentage><bottomLabel>of {domain} users.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "We won't tell Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Share elsewhere",
|
||||
"annual_report.summary.share_message": "I got the {archetype} archetype!",
|
||||
"annual_report.summary.thanks": "Thanks for being part of Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Share on Mastodon",
|
||||
"attachments_list.unprocessed": "(unprocessed)",
|
||||
"audio.hide": "Hide audio",
|
||||
"block_modal.remote_users_caveat": "We will ask the server {domain} to respect your decision. However, compliance is not guaranteed since some servers may handle blocks differently. Public posts may still be visible to non-logged-in users.",
|
||||
@@ -265,7 +287,7 @@
|
||||
"confirmations.quiet_post_quote_info.title": "Quoting quiet public posts",
|
||||
"confirmations.redraft.confirm": "Delete & redraft",
|
||||
"confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
|
||||
"confirmations.redraft.title": "Delete & redraft post?",
|
||||
"confirmations.redraft.title": "Delete and redraft post?",
|
||||
"confirmations.remove_from_followers.confirm": "Remove follower",
|
||||
"confirmations.remove_from_followers.message": "{name} will stop following you. Are you sure you want to proceed?",
|
||||
"confirmations.remove_from_followers.title": "Remove follower?",
|
||||
@@ -306,7 +328,7 @@
|
||||
"domain_block_modal.you_will_lose_num_followers": "You will lose {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} followers}} and {followingCount, plural, one {{followingCountDisplay} person you follow} other {{followingCountDisplay} people you follow}}.",
|
||||
"domain_block_modal.you_will_lose_relationships": "You will lose all followers and people you follow from this server.",
|
||||
"domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.",
|
||||
"domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.",
|
||||
"domain_pill.activitypub_lets_connect": "It lets you connect and interact with people, not just on Mastodon, but across different social apps too.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.",
|
||||
"domain_pill.server": "Server",
|
||||
"domain_pill.their_handle": "Their handle:",
|
||||
@@ -317,7 +339,7 @@
|
||||
"domain_pill.who_they_are": "Since handles say who someone is and where they are, you can interact with people across the social web of <button>ActivityPub-powered platforms</button>.",
|
||||
"domain_pill.who_you_are": "Because your handle says who you are and where you are, people can interact with you across the social web of <button>ActivityPub-powered platforms</button>.",
|
||||
"domain_pill.your_handle": "Your handle:",
|
||||
"domain_pill.your_server": "Your digital home, where all of your posts live. Don’t like this one? Transfer servers at any time and bring your followers, too.",
|
||||
"domain_pill.your_server": "Your digital home, where all of your posts live. Don’t like this one? Transfer servers at any time and bring your followers too.",
|
||||
"domain_pill.your_username": "Your unique identifier on this server. It’s possible to find users with the same username on different servers.",
|
||||
"dropdown.empty": "Select an option",
|
||||
"embed.instructions": "Embed this post on your website by copying the code below.",
|
||||
@@ -340,7 +362,7 @@
|
||||
"empty_column.account_featured.me": "You have not featured anything yet. Did you know that you can feature your hashtags you use the most, and even your friend’s accounts on your profile?",
|
||||
"empty_column.account_featured.other": "{acct} has not featured anything yet. Did you know that you can feature your hashtags you use the most, and even your friend’s accounts on your profile?",
|
||||
"empty_column.account_featured_other.unknown": "This account has not featured anything yet.",
|
||||
"empty_column.account_hides_collections": "This user has chosen to not make this information available",
|
||||
"empty_column.account_hides_collections": "This user has chosen not to make this information available",
|
||||
"empty_column.account_suspended": "Account suspended",
|
||||
"empty_column.account_timeline": "No posts here!",
|
||||
"empty_column.account_unavailable": "Profile unavailable",
|
||||
@@ -359,7 +381,7 @@
|
||||
"empty_column.home": "Your home timeline is empty! Follow more people to fill it up.",
|
||||
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
||||
"empty_column.mutes": "You haven't muted any users yet.",
|
||||
"empty_column.notification_requests": "All clear! There is nothing here. When you receive new notifications, they will appear here according to your settings.",
|
||||
"empty_column.notification_requests": "All clear! There is nothing here. When you receive new notifications, they will appear here, according to your settings.",
|
||||
"empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
|
||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
|
||||
"error.no_hashtag_feed_access": "Join or log in to view and follow this hashtag.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Who to follow",
|
||||
"followed_tags": "Followed hashtags",
|
||||
"footer.about": "About",
|
||||
"footer.about_mastodon": "About Mastodon",
|
||||
"footer.about_server": "About {domain}",
|
||||
"footer.about_this_server": "About",
|
||||
"footer.directory": "Profiles directory",
|
||||
"footer.get_app": "Get the app",
|
||||
@@ -483,7 +507,7 @@
|
||||
"interaction_modal.on_another_server": "On a different server",
|
||||
"interaction_modal.on_this_server": "On this server",
|
||||
"interaction_modal.title": "Sign in to continue",
|
||||
"interaction_modal.username_prompt": "E.g. {example}",
|
||||
"interaction_modal.username_prompt": "Eg {example}",
|
||||
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
|
||||
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
|
||||
@@ -601,7 +625,7 @@
|
||||
"navigation_bar.preferences": "Preferences",
|
||||
"navigation_bar.privacy_and_reach": "Privacy and reach",
|
||||
"navigation_bar.search": "Search",
|
||||
"navigation_bar.search_trends": "Search / Trending",
|
||||
"navigation_bar.search_trends": "Search/Trending",
|
||||
"navigation_panel.collapse_followed_tags": "Collapse followed hashtags menu",
|
||||
"navigation_panel.collapse_lists": "Collapse list menu",
|
||||
"navigation_panel.expand_followed_tags": "Expand followed hashtags menu",
|
||||
@@ -641,7 +665,7 @@
|
||||
"notification.moderation_warning.action_silence": "Your account has been limited.",
|
||||
"notification.moderation_warning.action_suspend": "Your account has been suspended.",
|
||||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you voted in has ended",
|
||||
"notification.poll": "A poll in which you voted has ended",
|
||||
"notification.quoted_update": "{name} edited a post you have quoted",
|
||||
"notification.reblog": "{name} boosted your post",
|
||||
"notification.reblog.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> boosted your post",
|
||||
@@ -667,7 +691,7 @@
|
||||
"notification_requests.explainer_for_limited_account": "Notifications from this account have been filtered because the account has been limited by a moderator.",
|
||||
"notification_requests.explainer_for_limited_remote_account": "Notifications from this account have been filtered because the account or its server has been limited by a moderator.",
|
||||
"notification_requests.maximize": "Maximise",
|
||||
"notification_requests.minimize_banner": "Minimize filtered notifications banner",
|
||||
"notification_requests.minimize_banner": "Minimise filtered notifications banner",
|
||||
"notification_requests.notifications_from": "Notifications from {name}",
|
||||
"notification_requests.title": "Filtered notifications",
|
||||
"notification_requests.view": "View notifications",
|
||||
@@ -717,11 +741,11 @@
|
||||
"notifications.policy.filter_limited_accounts_title": "Moderated accounts",
|
||||
"notifications.policy.filter_new_accounts.hint": "Created within the past {days, plural, one {one day} other {# days}}",
|
||||
"notifications.policy.filter_new_accounts_title": "New accounts",
|
||||
"notifications.policy.filter_not_followers_hint": "Including people who have been following you fewer than {days, plural, one {one day} other {# days}}",
|
||||
"notifications.policy.filter_not_followers_hint": "Including people who have been following you for fewer than {days, plural, one {one day} other {# days}}",
|
||||
"notifications.policy.filter_not_followers_title": "People not following you",
|
||||
"notifications.policy.filter_not_following_hint": "Until you manually approve them",
|
||||
"notifications.policy.filter_not_following_title": "People you don't follow",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtered unless it's in reply to your own mention or if you follow the sender",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtered, unless it's in reply to your own mention, or if you follow the sender",
|
||||
"notifications.policy.filter_private_mentions_title": "Unsolicited private mentions",
|
||||
"notifications.policy.title": "Manage notifications from…",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
@@ -868,17 +892,17 @@
|
||||
"search_results.all": "All",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.no_results": "No results.",
|
||||
"search_results.no_search_yet": "Try searching for posts, profiles or hashtags.",
|
||||
"search_results.no_search_yet": "Try searching for posts, profiles, or hashtags.",
|
||||
"search_results.see_all": "See all",
|
||||
"search_results.statuses": "Posts",
|
||||
"search_results.title": "Search for \"{q}\"",
|
||||
"server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)",
|
||||
"server_banner.active_users": "active users",
|
||||
"server_banner.administered_by": "Administered by:",
|
||||
"server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.",
|
||||
"server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the Fediverse.",
|
||||
"server_banner.server_stats": "Server stats:",
|
||||
"sign_in_banner.create_account": "Create account",
|
||||
"sign_in_banner.follow_anyone": "Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.",
|
||||
"sign_in_banner.follow_anyone": "Follow anyone across the Fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.",
|
||||
"sign_in_banner.mastodon_is": "Mastodon is the best way to keep up with what's happening.",
|
||||
"sign_in_banner.sign_in": "Sign in",
|
||||
"sign_in_banner.sso_redirect": "Login or Register",
|
||||
@@ -1020,7 +1044,7 @@
|
||||
"video.mute": "Mute",
|
||||
"video.pause": "Pause",
|
||||
"video.play": "Play",
|
||||
"video.skip_backward": "Skip backward",
|
||||
"video.skip_backward": "Skip backwards",
|
||||
"video.skip_forward": "Skip forward",
|
||||
"video.unmute": "Unmute",
|
||||
"video.volume_down": "Volume down",
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"account.disable_notifications": "Ĉesu sciigi min kiam @{name} afiŝas",
|
||||
"account.domain_blocking": "Blokas domajnon",
|
||||
"account.edit_profile": "Redakti la profilon",
|
||||
"account.edit_profile_short": "Redakti",
|
||||
"account.enable_notifications": "Sciigu min kiam @{name} afiŝos",
|
||||
"account.endorse": "Montri en profilo",
|
||||
"account.familiar_followers_one": "Sekvita de {name1}",
|
||||
@@ -40,6 +41,7 @@
|
||||
"account.follow": "Sekvi",
|
||||
"account.follow_back": "Sekvu reen",
|
||||
"account.follow_back_short": "Sekvu reen",
|
||||
"account.follow_request_cancel_short": "Nuligi",
|
||||
"account.followers": "Sekvantoj",
|
||||
"account.followers.empty": "Ankoraŭ neniu sekvas ĉi tiun uzanton.",
|
||||
"account.followers_counter": "{count, plural, one{{counter} sekvanto} other {{counter} sekvantoj}}",
|
||||
@@ -107,25 +109,16 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Priskribi ĉi tion por homoj kun vidaj malkapabloj…",
|
||||
"alt_text_modal.done": "Farita",
|
||||
"announcement.announcement": "Anonco",
|
||||
"annual_report.summary.archetype.booster": "La ĉasanto de mojoso",
|
||||
"annual_report.summary.archetype.lurker": "La vidanto",
|
||||
"annual_report.summary.archetype.oracle": "La orakolo",
|
||||
"annual_report.summary.archetype.pollster": "La balotenketisto",
|
||||
"annual_report.summary.archetype.replier": "La plej societema",
|
||||
"annual_report.summary.followers.followers": "sekvantoj",
|
||||
"annual_report.summary.followers.total": "{count} tute",
|
||||
"annual_report.summary.here_it_is": "Jen via resumo de {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "plej ŝatata afiŝo",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "plej diskonigita afiŝo",
|
||||
"annual_report.summary.highlighted_post.by_replies": "afiŝo kun la plej multaj respondoj",
|
||||
"annual_report.summary.highlighted_post.possessive": "de {name}",
|
||||
"annual_report.announcement.action_dismiss": "Ne, dankon",
|
||||
"annual_report.nav_item.badge": "Nova",
|
||||
"annual_report.shared_page.donate": "Donaci",
|
||||
"annual_report.summary.copy_link": "Kopii ligilon",
|
||||
"annual_report.summary.highlighted_post.title": "Plej populara afiŝo",
|
||||
"annual_report.summary.most_used_app.most_used_app": "plej uzita aplikaĵo",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "plej uzata kradvorto",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nenio",
|
||||
"annual_report.summary.new_posts.new_posts": "novaj afiŝoj",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Tion metas vin en la plej</topLabel><percentage></percentage><bottomLabel>de {domain} uzantoj.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ni ne diros al Zamenhof.",
|
||||
"annual_report.summary.thanks": "Dankon pro esti parto de Mastodon!",
|
||||
"attachments_list.unprocessed": "(neprilaborita)",
|
||||
"audio.hide": "Kaŝi aŭdion",
|
||||
"block_modal.remote_users_caveat": "Ni petos al la servilo {domain} respekti vian elekton. Tamen, plenumo ne estas garantiita ĉar iuj serviloj eble manipulas blokojn malsame. Publikaj afiŝoj eble ankoraŭ estas videbla por ne-ensalutintaj uzantoj.",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Listo",
|
||||
"announcement.announcement": "Anuncio",
|
||||
"annual_report.announcement.action_build": "Construir mi MastodonAnual",
|
||||
"annual_report.announcement.action_dismiss": "No, gracias",
|
||||
"annual_report.announcement.action_view": "Ver mi MastodonAnual",
|
||||
"annual_report.announcement.description": "Descubrí más sobre tu participación en Mastodon durante el último año.",
|
||||
"annual_report.announcement.title": "Llegó MastodonAnual {year}",
|
||||
"annual_report.summary.archetype.booster": "Corrió la voz",
|
||||
"annual_report.summary.archetype.lurker": "El acechador",
|
||||
"annual_report.summary.archetype.oracle": "El oráculo",
|
||||
"annual_report.summary.archetype.pollster": "Estuvo consultando",
|
||||
"annual_report.summary.archetype.replier": "Respondió un montón",
|
||||
"annual_report.summary.followers.followers": "seguidores",
|
||||
"annual_report.summary.followers.total": "{count} en total",
|
||||
"annual_report.summary.here_it_is": "Acá está tu resumen de {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "el mensaje más veces marcado como favorito",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "el mensaje que más adhesiones recibió",
|
||||
"annual_report.summary.highlighted_post.by_replies": "el mensaje que más respuestas recibió",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.nav_item.badge": "Nueva",
|
||||
"annual_report.shared_page.donate": "Donar",
|
||||
"annual_report.shared_page.footer": "Generado con {heart} por el equipo de Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} usa {domain}, una de las tantas comunidades de Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} permaneció al acecho en busca de mensajes para adherir, apuntando a otros creadores con perfecta puntería.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Permaneciste al acecho en busca de mensajes para adherir, apuntando a otros creadores con perfecta puntería.",
|
||||
"annual_report.summary.archetype.booster.name": "El arquero",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "¿¿¿???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Sabemos que {name} estuvo afuera, en algún lado, disfrutando de Mastodon a su propio modo silencioso.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Sabemos que estuviste afuera, en algún lado, disfrutando de Mastodon a tu propio modo silencioso.",
|
||||
"annual_report.summary.archetype.lurker.name": "El estoico",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} creó más mensajes nuevos que respuestas, manteniendo a Mastodon fresco y de cara al futuro.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Creaste más mensajes nuevos que respuestas, manteniendo a Mastodon fresco y de cara al futuro.",
|
||||
"annual_report.summary.archetype.oracle.name": "El oráculo",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} creó más encuestas que mensajes de otro tipo, cultivando curiosidad en Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Creaste más encuestas que mensajes de otro tipo, cultivando curiosidad en Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "El maravillado",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} respondió frecuentemente a los mensajes de otras cuentas, polinizando con nuevos debates.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Respondiste frecuentemente a los mensajes de otras cuentas, polinizando con nuevos debates.",
|
||||
"annual_report.summary.archetype.replier.name": "La mariposa",
|
||||
"annual_report.summary.archetype.reveal": "Revelar mi arquetipo",
|
||||
"annual_report.summary.archetype.reveal_description": "¡Gracias por ser parte de Mastodon! Es hora de descubrir qué arquetipo encarnaste en {year}.",
|
||||
"annual_report.summary.archetype.title_public": "El arquetipo de {name}",
|
||||
"annual_report.summary.archetype.title_self": "Tu arquetipo",
|
||||
"annual_report.summary.close": "Cerrar",
|
||||
"annual_report.summary.copy_link": "Copiar enlace",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {nuevo seguidor} other {nuevos seguidores}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Este mensaje recibió adhesiones {count, plural, one {una vez} other {# veces}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Este mensaje fue marcado como favorito {count, plural, one {una vez} other {# veces}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Este mensaje recibió {count, plural, one {una respuesta} other {# respuestas}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Mensaje más popular",
|
||||
"annual_report.summary.most_used_app.most_used_app": "la aplicación más usada",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "la etiqueta más usada",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ninguna",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Incluiste esta etiqueta en {count, plural, one {un mensaje} other {# mensajes}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} incluyó esta etiqueta en {count, plural, one {un mensaje} other {# mensajes}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nuevos mensajes",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Eso te coloca en la cima del</topLabel><percentage></percentage><bottomLabel>de los usuarios de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Queda entre nos.",
|
||||
"annual_report.summary.share_elsewhere": "Compartir en otro lado",
|
||||
"annual_report.summary.share_message": "¡Conseguí el arquetipo {archetype}!",
|
||||
"annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Compartir en Mastodon",
|
||||
"attachments_list.unprocessed": "[sin procesar]",
|
||||
"audio.hide": "Ocultar audio",
|
||||
"block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar los bloqueos de forma diferente. Los mensajes públicos todavía podrían estar visibles para los usuarios no conectados.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "A quién seguir",
|
||||
"followed_tags": "Etiquetas seguidas",
|
||||
"footer.about": "Información",
|
||||
"footer.about_mastodon": "Acerca de Mastodon",
|
||||
"footer.about_server": "Acerca de {domain}",
|
||||
"footer.about_this_server": "Información",
|
||||
"footer.directory": "Directorio de perfiles",
|
||||
"footer.get_app": "Conseguí la aplicación",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Hecho",
|
||||
"announcement.announcement": "Anuncio",
|
||||
"annual_report.announcement.action_build": "Preparar mi Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "No, gracias",
|
||||
"annual_report.announcement.action_view": "Ver mi Wrapstodon",
|
||||
"annual_report.announcement.description": "Descubre más sobre tu participación en Mastodon durante el último año.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} ha llegado",
|
||||
"annual_report.summary.archetype.booster": "El cazador de tendencias",
|
||||
"annual_report.summary.archetype.lurker": "El merodeador",
|
||||
"annual_report.summary.archetype.oracle": "El oráculo",
|
||||
"annual_report.summary.archetype.pollster": "El encuestador",
|
||||
"annual_report.summary.archetype.replier": "El más sociable",
|
||||
"annual_report.summary.followers.followers": "seguidores",
|
||||
"annual_report.summary.followers.total": "{count} en total",
|
||||
"annual_report.summary.here_it_is": "Este es el resumen de tu {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada",
|
||||
"annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas",
|
||||
"annual_report.summary.highlighted_post.possessive": "de {name}",
|
||||
"annual_report.nav_item.badge": "Nueva",
|
||||
"annual_report.shared_page.donate": "Donar",
|
||||
"annual_report.shared_page.footer": "Generado con {heart} por el equipo de Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} usa {domain}, una de las muchas comunidades que funcionan con Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} se mantuvo a la caza de publicaciones para impulsar, dando visibilidad a otros creadores con una puntería perfecta.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Te mantuviste a la caza de publicaciones para impulsar, amplificando a otros creadores con una puntería perfecta.",
|
||||
"annual_report.summary.archetype.booster.name": "El arquero",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Sabemos que {name} estaba ahí fuera, en algún lugar, disfrutando de Mastodon a su manera tranquila.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Sabemos que estabas ahí fuera, en algún lugar, disfrutando de Mastodon a tu manera, en silencio.",
|
||||
"annual_report.summary.archetype.lurker.name": "El estoico",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} creó más publicaciones nuevas que respuestas, lo que mantuvo a Mastodon fresco y con visión de futuro.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Creaste más publicaciones nuevas que respuestas, lo que mantuvo a Mastodon fresco y con visión de futuro.",
|
||||
"annual_report.summary.archetype.oracle.name": "El oráculo",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} creó más encuestas que otros tipos de publicaciones, lo que despertó la curiosidad en Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Creaste más encuestas que otros tipos de publicaciones, lo que despertó la curiosidad en Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "El soñador",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} respondía con frecuencia a las publicaciones de otras personas, lo que generaba nuevos debates en Mastodon.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Respondías con frecuencia a las publicaciones de otras personas, lo que generaba nuevos debates en Mastodon.",
|
||||
"annual_report.summary.archetype.replier.name": "La mariposa",
|
||||
"annual_report.summary.archetype.reveal": "Revelar mi arquetipo",
|
||||
"annual_report.summary.archetype.reveal_description": "¡Gracias por formar parte de Mastodon! Es hora de descubrir qué arquetipo encarnaste en {year}.",
|
||||
"annual_report.summary.archetype.title_public": "El arquetipo de {name}",
|
||||
"annual_report.summary.archetype.title_self": "Tu arquetipo",
|
||||
"annual_report.summary.close": "Cerrar",
|
||||
"annual_report.summary.copy_link": "Copiar enlace",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural,one {nuevo seguidor} other {nuevos seguidores}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Esta publicación fue impulsada {count, plural,one {una vez} other {# veces}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Esta publicación fue marcada como favorita {count, plural,one {una vez} other {# veces}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Esta publicación consiguió {count, plural,one {una respuesta} other {# respuestas}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Publicación más popular",
|
||||
"annual_report.summary.most_used_app.most_used_app": "aplicación más utilizada",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más utilizada",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ninguna",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Incluiste esta etiqueta en {count, plural,one {una publicación} other {# publicaciones}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} incluyó esta etiqueta en {count, plural,one {una publicación} other {# publicaciones}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Eso te sitúa en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Compartir en otro lado",
|
||||
"annual_report.summary.share_message": "¡Obtuve el arquetipo {archetype}!",
|
||||
"annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Compartir en Mastodon",
|
||||
"attachments_list.unprocessed": "(sin procesar)",
|
||||
"audio.hide": "Ocultar audio",
|
||||
"block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar bloques de forma diferente. Las publicaciones públicas pueden ser todavía visibles para los usuarios no conectados.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Recomendamos seguir",
|
||||
"followed_tags": "Etiquetas seguidas",
|
||||
"footer.about": "Acerca de",
|
||||
"footer.about_mastodon": "Acerca de Mastodon",
|
||||
"footer.about_server": "Acerca de {domain}",
|
||||
"footer.about_this_server": "Sobre nosotros",
|
||||
"footer.directory": "Directorio de perfiles",
|
||||
"footer.get_app": "Obtener la aplicación",
|
||||
|
||||
@@ -114,29 +114,30 @@
|
||||
"alt_text_modal.done": "Hecho",
|
||||
"announcement.announcement": "Comunicación",
|
||||
"annual_report.announcement.action_build": "Preparar mi Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "No, gracias",
|
||||
"annual_report.announcement.action_view": "Ver mi Wrapstodon",
|
||||
"annual_report.announcement.description": "Descubre más sobre tu participación en Mastodon durante el último año.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} ha llegado",
|
||||
"annual_report.summary.archetype.booster": "El cazador de tendencias",
|
||||
"annual_report.summary.archetype.lurker": "El acechador",
|
||||
"annual_report.summary.archetype.oracle": "El oráculo",
|
||||
"annual_report.summary.archetype.pollster": "El encuestador",
|
||||
"annual_report.summary.archetype.replier": "El más sociable",
|
||||
"annual_report.summary.followers.followers": "seguidores",
|
||||
"annual_report.summary.followers.total": "{count} en total",
|
||||
"annual_report.summary.here_it_is": "Aquí está tu resumen de {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "publicación con más favoritos",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "publicación más impulsada",
|
||||
"annual_report.summary.highlighted_post.by_replies": "publicación con más respuestas",
|
||||
"annual_report.summary.highlighted_post.possessive": "de {name}",
|
||||
"annual_report.nav_item.badge": "Nuevo",
|
||||
"annual_report.shared_page.donate": "Donar",
|
||||
"annual_report.shared_page.footer": "Generado con {heart} por el equipo de Mastodon",
|
||||
"annual_report.summary.archetype.title_public": "El arquetipo de {name}",
|
||||
"annual_report.summary.archetype.title_self": "Tu arquetipo",
|
||||
"annual_report.summary.close": "Cerrar",
|
||||
"annual_report.summary.copy_link": "Copiar enlace",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Esta publicación fue impulsada {count, plural,one {una vez} other {# veces}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Esta publicación recibió {count, plural,one {una respuesta} other {# respuestas}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Publicación más popular",
|
||||
"annual_report.summary.most_used_app.most_used_app": "aplicación más usada",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta más usada",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ninguna",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Incluiste esta etiqueta en {count, plural,one {una publicación} other {# publicaciones}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} incluyó esta etiqueta en {count, plural, one {una publicación} other {# publicaciones}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nuevas publicaciones",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Eso te coloca en el top</topLabel><percentage></percentage><bottomLabel>de usuarios de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "No se lo diremos a Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Compartir en otro lugar",
|
||||
"annual_report.summary.share_message": "¡Obtuve el arquetipo {archetype}!",
|
||||
"annual_report.summary.thanks": "¡Gracias por ser parte de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Compartir en Mastodon",
|
||||
"attachments_list.unprocessed": "(sin procesar)",
|
||||
"audio.hide": "Ocultar audio",
|
||||
"block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar bloqueos de forma distinta. Los mensajes públicos pueden ser todavía visibles para los usuarios que no hayan iniciado sesión.",
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"about.powered_by": "Hajutatud sotsiaalmeedia, mille taga on {mastodon}",
|
||||
"about.rules": "Serveri reeglid",
|
||||
"account.account_note_header": "Isiklik märge",
|
||||
"account.add_or_remove_from_list": "Lisa või Eemalda loeteludest",
|
||||
"account.add_or_remove_from_list": "Lisa või eemalda loenditest",
|
||||
"account.badges.bot": "Robot",
|
||||
"account.badges.group": "Grupp",
|
||||
"account.block": "Blokeeri @{name}",
|
||||
@@ -37,7 +37,7 @@
|
||||
"account.featured": "Esiletõstetud",
|
||||
"account.featured.accounts": "Profiilid",
|
||||
"account.featured.hashtags": "Teemaviited",
|
||||
"account.featured_tags.last_status_at": "Viimane postitus {date}",
|
||||
"account.featured_tags.last_status_at": "Viimane postitus: {date}",
|
||||
"account.featured_tags.last_status_never": "Postitusi pole",
|
||||
"account.follow": "Jälgi",
|
||||
"account.follow_back": "Jälgi vastu",
|
||||
@@ -117,26 +117,14 @@
|
||||
"annual_report.announcement.action_view": "Vaata kokkuvõtet minu tegevusest Mastodonis",
|
||||
"annual_report.announcement.description": "Vaata teavet oma suhestumise kohta Mastodonis eelmisel aastal.",
|
||||
"annual_report.announcement.title": "{year}. aasta Mastodoni kokkuvõte on valmis",
|
||||
"annual_report.summary.archetype.booster": "Ägesisu küttija",
|
||||
"annual_report.summary.archetype.lurker": "Hiilija",
|
||||
"annual_report.summary.archetype.oracle": "Oraakel",
|
||||
"annual_report.summary.archetype.pollster": "Küsitleja",
|
||||
"annual_report.summary.archetype.replier": "Sotsiaalne liblikas",
|
||||
"annual_report.summary.followers.followers": "jälgijad",
|
||||
"annual_report.summary.followers.total": "{count} kokku",
|
||||
"annual_report.summary.here_it_is": "Siin on sinu {year} ülevaatlikult:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "enim lemmikuks märgitud postitus",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "enim jagatud postitus",
|
||||
"annual_report.summary.highlighted_post.by_replies": "kõige vastatum postitus",
|
||||
"annual_report.summary.highlighted_post.possessive": "omanik {name}",
|
||||
"annual_report.summary.highlighted_post.title": "Kõige populaarsemad postitused",
|
||||
"annual_report.summary.most_used_app.most_used_app": "enim kasutatud äpp",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "enim kasutatud teemaviide",
|
||||
"annual_report.summary.most_used_hashtag.none": "Puudub",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Sa lisasid selle teemaviite {count, plural, one {ühele postitusele} other {#-le postitusele}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "uus postitus",
|
||||
"annual_report.summary.percentile.text": "<topLabel>See paneb su top</topLabel><percentage></percentage><bottomLabel> {domain} kasutajate hulka.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Vägev.",
|
||||
"annual_report.summary.share_message": "Minu arhetüüp on {archetype}!",
|
||||
"annual_report.summary.thanks": "Tänud olemast osa Mastodonist!",
|
||||
"attachments_list.unprocessed": "(töötlemata)",
|
||||
"audio.hide": "Peida audio",
|
||||
"block_modal.remote_users_caveat": "Serverile {domain} edastatakse palve otsust järgida. Ometi pole see tagatud, kuna mõned serverid võivad blokeeringuid käsitleda omal moel. Avalikud postitused võivad tuvastamata kasutajatele endiselt näha olla.",
|
||||
|
||||
@@ -113,25 +113,52 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Deskribatu hau ikusmen arazoak dituzten pertsonentzat…",
|
||||
"alt_text_modal.done": "Egina",
|
||||
"announcement.announcement": "Iragarpena",
|
||||
"annual_report.summary.archetype.booster": "Sustatzailea",
|
||||
"annual_report.summary.archetype.lurker": "Begiluzea",
|
||||
"annual_report.summary.archetype.oracle": "Orakulua",
|
||||
"annual_report.summary.archetype.pollster": "Bozketazalea",
|
||||
"annual_report.summary.archetype.replier": "Tolosa",
|
||||
"annual_report.summary.followers.followers": "jarraitzaileak",
|
||||
"annual_report.summary.followers.total": "{count} guztira",
|
||||
"annual_report.summary.here_it_is": "Hona hemen zure {year}. urtearen bilduma:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "egindako bidalketa gogokoena",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "egindako bidalketa zabalduena",
|
||||
"annual_report.summary.highlighted_post.by_replies": "erantzun gehien izan dituen bidalketa",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}-(r)ena",
|
||||
"annual_report.announcement.action_build": "Sortu nire Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Ez, eskerrik asko",
|
||||
"annual_report.announcement.action_view": "Ikusi nire Wrapstodon",
|
||||
"annual_report.announcement.description": "Ezagutu azken urtean Mastodonen izan duzun parte-hartzeari buruzko informazio gehiago.",
|
||||
"annual_report.announcement.title": "Hemen da {2025}(e)ko Wrapstodon",
|
||||
"annual_report.nav_item.badge": "Berria",
|
||||
"annual_report.shared_page.donate": "Egin dohaintza",
|
||||
"annual_report.shared_page.footer": "Mastodonen taldeak {heart} sortua",
|
||||
"annual_report.shared_page.footer_server_info": "{username}(e)k {domain} erabiltzen du, Mastodonek bultzatutako komunitate ugarietako bat.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name}(e)k promozionatzeko argitalpenen bila jarraitu zuen, beste sortzaile batzuk punteria perfektuarekin anplifikatuz.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Bultzatu beharreko argitalpenen zelatan egon zinen, punteria perfektua zuten beste sortzaile batzuk anplifikatuz.",
|
||||
"annual_report.summary.archetype.booster.name": "Arkularia",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Badakigu {name} hor zegoela kanpoan, nonbait, Mastodonez gozatzen bere modu lasaian.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Badakigu hor zinela kanpoan, nonbait, Mastodonez gozatzen zure erara, isilean.",
|
||||
"annual_report.summary.archetype.lurker.name": "Estoikoa",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name}(e)k erantzun baino argitalpen berri gehiago sortu zituen, eta horrek Mastodon fresko eta etorkizuneko ikuspegiarekin mantendu zuen.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Erantzun baino argitalpen berri gehiago sortu zenituen, eta horrek Mastodon fresko eta etorkizuneko ikuspegiarekin mantendu zuen.",
|
||||
"annual_report.summary.archetype.oracle.name": "Orakulua",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name}(e)k inkesta gehiago sortu zituen beste argitalpen mota batzuek baino, eta horrek jakin-mina piztu zuen Mastodonen.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Beste argitalpen batzuk baino inkesta gehiago sortu zenituen, eta horrek jakin-mina piztu zuen Mastodonen.",
|
||||
"annual_report.summary.archetype.pollster.name": "Ameslaria",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name}(e)k maiz erantzuten zien beste pertsona batzuen argitalpenei, Mastodon polinizatuz eztabaida berriekin.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Maiz erantzuten zenien beste pertsona batzuen argitalpenei, Mastodon polinizatuz eztabaida berriekin.",
|
||||
"annual_report.summary.archetype.replier.name": "Tximeleta",
|
||||
"annual_report.summary.archetype.reveal": "Erakutsi nire arketipoa",
|
||||
"annual_report.summary.archetype.reveal_description": "Eskerrik asko Mastodonen parte izateagatik! Bada garaia jakiteko zer arketipo haragitu duzun {year}(e)an.",
|
||||
"annual_report.summary.archetype.title_public": "{name}-(r)en arketipoa",
|
||||
"annual_report.summary.archetype.title_self": "Zure arketipoa",
|
||||
"annual_report.summary.close": "Itxi",
|
||||
"annual_report.summary.copy_link": "Kopiatu esteka",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {jarraitzaile berri} other {jarraitzaile berri}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Bidalketa honek {count, plural, one {bultzada 1 dauka} other {# bultzada dauzka}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Bidalketa honek {count, plural, one {gogoko 1 dauka} other {# gogoko dauzka}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Bidalketa honek {count, plural, one {erantzun 1 dauka} other {# erantzun dauzka}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Bidalketa ospetsuena",
|
||||
"annual_report.summary.most_used_app.most_used_app": "app erabiliena",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "traola erabiliena",
|
||||
"annual_report.summary.most_used_hashtag.none": "Bat ere ez",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Traola hau {count, plural, one {bidalketa baten sartu zenuen} other {# bidalketatan sartu zenuen}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name}(e)k traola hau {count, plural, one {bidalketa baten sartu zuen} other {# bidalketatan sartu zituen}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "bidalketa berriak",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Horrek jartzen zaitu top </topLabel> <percentage> </percentage>(e)an <bottomLabel> {domain} erabiltzaileen artean </bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Bernieri ez diogu ezer esango ;)..",
|
||||
"annual_report.summary.thanks": "Eskerrik asko Mastodonen parte izateagatik!",
|
||||
"annual_report.summary.share_elsewhere": "Partekatu beste edonon",
|
||||
"annual_report.summary.share_message": "{arketipoa} arketipoa daukat!",
|
||||
"annual_report.summary.share_on_mastodon": "Partekatu Mastodonen",
|
||||
"attachments_list.unprocessed": "(prozesatu gabe)",
|
||||
"audio.hide": "Ezkutatu audioa",
|
||||
"block_modal.remote_users_caveat": "{domain} zerbitzariari zure erabakia errespeta dezan eskatuko diogu. Halere, araua beteko den ezin da bermatu, zerbitzari batzuk modu desberdinean kudeatzen baitituzte blokeoak. Baliteke argitalpen publikoak saioa hasi ez duten erabiltzaileentzat ikusgai egotea.",
|
||||
@@ -249,7 +276,7 @@
|
||||
"confirmations.missing_alt_text.secondary": "Bidali edonola ere",
|
||||
"confirmations.missing_alt_text.title": "Testu alternatiboa gehitu?",
|
||||
"confirmations.mute.confirm": "Mututu",
|
||||
"confirmations.private_quote_notify.cancel": "Ediziora bueltatu",
|
||||
"confirmations.private_quote_notify.cancel": "Bueltatu ediziora",
|
||||
"confirmations.private_quote_notify.confirm": "Argitaratu bidalketa",
|
||||
"confirmations.private_quote_notify.do_not_show_again": "Ez erakutsi mezu hau berriro",
|
||||
"confirmations.private_quote_notify.message": "Aipatzen ari zaren pertsonak eta aipatutako besteek jakinarazpena jasoko dute eta zure sarrera ikusi ahalko dute, zure jarraitzaileak ez badira ere.",
|
||||
@@ -357,6 +384,7 @@
|
||||
"empty_column.notification_requests": "Garbi-garbi! Ezertxo ere ez hemen. Jakinarazpenak jasotzen dituzunean, hemen agertuko dira zure ezarpenen arabera.",
|
||||
"empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.",
|
||||
"empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileei hau betetzen joateko",
|
||||
"error.no_hashtag_feed_access": "Egin bat edo hasi saioa etiketa hau ikusi eta jarraitzeko.",
|
||||
"error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.",
|
||||
"error.unexpected_crash.explanation_addons": "Ezin izan da orria behar bezala bistaratu. Errore honen jatorria nabigatzailearen gehigarri batean edo itzulpen automatikoko tresnetan dago ziur aski.",
|
||||
"error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.",
|
||||
@@ -413,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Zein jarraitu",
|
||||
"followed_tags": "Jarraitutako traolak",
|
||||
"footer.about": "Honi buruz",
|
||||
"footer.about_mastodon": "Mastodoni buruz",
|
||||
"footer.about_server": "{domain}-i buruz",
|
||||
"footer.about_this_server": "Honi buruz",
|
||||
"footer.directory": "Profil-direktorioa",
|
||||
"footer.get_app": "Eskuratu aplikazioa",
|
||||
@@ -515,6 +545,7 @@
|
||||
"keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "multimedia erakutsi/ezkutatzeko",
|
||||
"keyboard_shortcuts.toot": "Hasi bidalketa berri bat",
|
||||
"keyboard_shortcuts.top": "Mugitu zerrendaren hasierara",
|
||||
"keyboard_shortcuts.translate": "bidalketa itzultzeko",
|
||||
"keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
|
||||
"keyboard_shortcuts.up": "zerrendan gora mugitzea",
|
||||
@@ -760,7 +791,7 @@
|
||||
"privacy.quote.limited": "{visibility}, aipuak mugatuta",
|
||||
"privacy.unlisted.additional": "Aukera honek publiko modua bezala funtzionatzen du, baina argitalpena ez da agertuko zuzeneko jarioetan edo traoletan, \"Arakatu\" atalean edo Mastodonen bilaketan, nahiz eta kontua zabaltzeko onartu duzun.",
|
||||
"privacy.unlisted.long": "Ezkutatuta Mastodon bilaketen emaitzetatik, joeretatik, eta denbora-lerro publikoetatik",
|
||||
"privacy.unlisted.short": "Deiadar urrikoa",
|
||||
"privacy.unlisted.short": "Ikusgarritasun mugatua",
|
||||
"privacy_policy.last_updated": "Azkenengo eguneraketa {date}",
|
||||
"privacy_policy.title": "Pribatutasun politika",
|
||||
"quote_error.edit": "Aipuak ezin dira gehitu bidalketa bat editatzean.",
|
||||
@@ -903,6 +934,7 @@
|
||||
"status.edited_x_times": "{count, plural, one {behin} other {{count} aldiz}} editatua",
|
||||
"status.embed": "Lortu txertatzeko kodea",
|
||||
"status.favourite": "Gogokoa",
|
||||
"status.favourites_count": "{count, plural, one {{counter} gogoko} other {{counter} gogoko}}",
|
||||
"status.filter": "Iragazi bidalketa hau",
|
||||
"status.history.created": "{name} erabiltzaileak sortua {date}",
|
||||
"status.history.edited": "{name} erabiltzaileak editatua {date}",
|
||||
@@ -937,12 +969,14 @@
|
||||
"status.quotes.empty": "Momentuz inork ez du bidalketa hau aipatu. Norbaitek eginez gero, hemen agertuko da.",
|
||||
"status.quotes.local_other_disclaimer": "Egileak errefusatutako aipuak ez dira erakutsiko.",
|
||||
"status.quotes.remote_other_disclaimer": "{domain} zerbitzariko aipuak baino ez daude bermatuta hemen. Egileak errefusatutako aipuak ez dira erakutsiko.",
|
||||
"status.quotes_count": "{count, plural, one {{counter} aipu} other {{counter} aipu}}",
|
||||
"status.read_more": "Irakurri gehiago",
|
||||
"status.reblog": "Bultzada",
|
||||
"status.reblog_or_quote": "Bultzatu edo aipatu",
|
||||
"status.reblog_private": "Partekatu berriz zure jarraitzaileekin",
|
||||
"status.reblogged_by": "{name}(r)en bultzada",
|
||||
"status.reblogs.empty": "Inork ez dio bultzada eman bidalketa honi oraindik. Inork egiten badu, hemen agertuko da.",
|
||||
"status.reblogs_count": "{count, plural, one {{counter} bultzaeda} other {{counter} bultzaeda}}",
|
||||
"status.redraft": "Ezabatu eta berridatzi",
|
||||
"status.remove_bookmark": "Kendu laster-marka",
|
||||
"status.remove_favourite": "Kendu gogokoetatik",
|
||||
|
||||
@@ -117,26 +117,12 @@
|
||||
"annual_report.announcement.action_view": "دیدن خلاصهٔ ماستودونم",
|
||||
"annual_report.announcement.description": "کشف بیشتر دربارهٔ درگیریتان روی ماستودون در سال گذشته.",
|
||||
"annual_report.announcement.title": "خلاصهٔ ماستودون {year} اینجاست",
|
||||
"annual_report.summary.archetype.booster": "باحالیاب",
|
||||
"annual_report.summary.archetype.lurker": "کمپیدا",
|
||||
"annual_report.summary.archetype.oracle": "غیبگو",
|
||||
"annual_report.summary.archetype.pollster": "نظرسنج",
|
||||
"annual_report.summary.archetype.replier": "پاسخگو",
|
||||
"annual_report.summary.followers.followers": "دنبال کننده",
|
||||
"annual_report.summary.followers.total": "در مجموع {count}",
|
||||
"annual_report.summary.here_it_is": "بازبینی {year} تان:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "پرپسندترین فرسته",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "پرتقویتترین فرسته",
|
||||
"annual_report.summary.highlighted_post.by_replies": "پرپاسخترین فرسته",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "پراستفادهترین کاره",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "پراستفادهترین برچسب",
|
||||
"annual_report.summary.most_used_hashtag.none": "هیچکدام",
|
||||
"annual_report.summary.new_posts.new_posts": "فرستهٔ جدید",
|
||||
"annual_report.summary.percentile.text": "<topLabel>بین کاربران {domain} جزو</topLabel><percentage></percentage><bottomLabel>برتر هستید.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "به برنی خبر نمیدهیم.",
|
||||
"annual_report.summary.share_message": "من کهنالگوی {archetype} را گرفتم!",
|
||||
"annual_report.summary.thanks": "سپاس که بخشی از ماستودون هستید!",
|
||||
"attachments_list.unprocessed": "(پردازش نشده)",
|
||||
"audio.hide": "نهفتن صدا",
|
||||
"block_modal.remote_users_caveat": "از کارساز {domain} خواهیم خواست که به تصمیمتان احترام بگذارد. با این حال تضمینی برای رعایتش وجود ندارد؛ زیرا برخی کارسازها ممکن است مسدودی را متفاوت مدیریت کنند. ممکن است فرستههای عمومی همچنان برای کاربران وارد نشده نمایان باشند.",
|
||||
|
||||
@@ -114,28 +114,51 @@
|
||||
"alt_text_modal.done": "Valmis",
|
||||
"announcement.announcement": "Tiedote",
|
||||
"annual_report.announcement.action_build": "Koosta oma Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Ei kiitos",
|
||||
"annual_report.announcement.action_view": "Näytä oma Wrapstodon",
|
||||
"annual_report.announcement.description": "Tutustu toimintaasi Mastodonissa kuluneen vuoden aikana.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} on täällä",
|
||||
"annual_report.summary.archetype.booster": "Tehostaja",
|
||||
"annual_report.summary.archetype.lurker": "Lymyilijä",
|
||||
"annual_report.summary.archetype.oracle": "Oraakkeli",
|
||||
"annual_report.summary.archetype.pollster": "Mielipidetutkija",
|
||||
"annual_report.summary.archetype.replier": "Sosiaalinen perhonen",
|
||||
"annual_report.summary.followers.followers": "seuraajaa",
|
||||
"annual_report.summary.followers.total": "{count} yhteensä",
|
||||
"annual_report.summary.here_it_is": "Tässä on katsaus vuoteesi {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "suosikkeihin lisätyin julkaisu",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "tehostetuin julkaisu",
|
||||
"annual_report.summary.highlighted_post.by_replies": "julkaisu, jolla on eniten vastauksia",
|
||||
"annual_report.summary.highlighted_post.possessive": "Käyttäjän {name}",
|
||||
"annual_report.nav_item.badge": "Uusi",
|
||||
"annual_report.shared_page.donate": "Lahjoita",
|
||||
"annual_report.shared_page.footer": "Luotu {heart}:lla Mastodon-tiimin toimesta",
|
||||
"annual_report.shared_page.footer_server_info": "{username} käyttää palvelinta {domain}, yhtä monista Mastodonin tarjoamista yhteisöistä.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} pysyi valppaana tehostettavien julkaisujen suhteen, vahvistaen muita luojia täydellisellä tähtäyksellä.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Pysyit valppaana tehostettavien julkaisujen suhteen, vahvistaen muita luojia täydellisellä tähtäyksellä.",
|
||||
"annual_report.summary.archetype.booster.name": "Jousimies",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Tiedämme, että {name} oli siellä jossakin, nauttien Mastodonista omalla hiljaisella tavallaan.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Tiedämme, että olit siellä jossakin, nauttien Mastodonista omalla hiljaisella tavallasi.",
|
||||
"annual_report.summary.archetype.lurker.name": "Stoalainen",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} loi enemmän julkaisuja kuin vastauksia, siten pitäen Mastodonin tuoreena ja valmiina tulevaisuuteen.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Loit enemmän julkaisuja kuin vastauksia, siten pitäen Mastodonin tuoreena ja valmiina tulevaisuuteen.",
|
||||
"annual_report.summary.archetype.oracle.name": "Oraakkeli",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} loi enemmän äänestyksiä kuin muita julkaisutyyppejä, siten herättäen uteliaisuutta Mastodonissa.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Loit enemmän äänestyksiä kuin muita julkaisutyyppejä, siten herättäen uteliaisuutta Mastodonissa.",
|
||||
"annual_report.summary.archetype.pollster.name": "Ihmettelijä",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} vastasi säännöllisesti toisten julkaisuihin, siten pölyttäen Mastodonia uusilla keskusteluilla.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Vastasit säännöllisesti toisten julkaisuihin, siten pölyttäen Mastodonia uusilla keskusteluilla.",
|
||||
"annual_report.summary.archetype.replier.name": "Perhonen",
|
||||
"annual_report.summary.archetype.reveal": "Paljasta arkkityyppini",
|
||||
"annual_report.summary.archetype.reveal_description": "Kiitos, että olet osa Mastodonia! Aika selvittää, minkä arkkityypin ruumiillistuma olit vuonna {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Käyttäjän {name} arkkityyppi",
|
||||
"annual_report.summary.archetype.title_self": "Arkkityyppisi",
|
||||
"annual_report.summary.close": "Sulje",
|
||||
"annual_report.summary.copy_link": "Kopioi linkki",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {uusi seuraaja} other {uutta seuraajaa}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Tätä julkaisua tehostettiin {count, plural, one {kerran} other {# kertaa}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Tämä julkaisu lisättiin suosikkeihin {count, plural, one {kerran} other {# kertaa}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Tämä julkaisu sai {count, plural, one {1 vastauksen} other {# vastausta}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Suosituin julkaisu",
|
||||
"annual_report.summary.most_used_app.most_used_app": "käytetyin sovellus",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "käytetyin aihetunniste",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ei mitään",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Sisällytit tämän aihetunnisteen {count, plural, one {1 julkaisuun} other {# julkaisuun}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} sisällytti tämän aihetunnisteen {count, plural, one {1 julkaisuun} other {# julkaisuun}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "uutta julkaisua",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Olet osa huippujoukkoa, johon kuuluu</topLabel><percentage></percentage><bottomLabel>{domain}-käyttäjistä.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Emme kerro Bernie Sandersille.",
|
||||
"annual_report.summary.thanks": "Kiitos, että olet osa Mastodonia!",
|
||||
"annual_report.summary.share_elsewhere": "Jaa muualla",
|
||||
"annual_report.summary.share_message": "Arkkityyppini on {archetype}!",
|
||||
"annual_report.summary.share_on_mastodon": "Jaa Mastodonissa",
|
||||
"attachments_list.unprocessed": "(käsittelemätön)",
|
||||
"audio.hide": "Piilota ääni",
|
||||
"block_modal.remote_users_caveat": "Pyydämme palvelinta {domain} kunnioittamaan päätöstäsi. Myötämielisyyttä ei kuitenkaan taata, koska jotkin palvelimet voivat käsitellä estoja eri tavalla. Julkiset julkaisut voivat silti näkyä kirjautumattomille käyttäjille.",
|
||||
@@ -418,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Ehdotuksia seurattavaksi",
|
||||
"followed_tags": "Seurattavat aihetunnisteet",
|
||||
"footer.about": "Tietoja",
|
||||
"footer.about_mastodon": "Tietoja Mastodonista",
|
||||
"footer.about_server": "Tietoja palvelimesta {domain}",
|
||||
"footer.about_this_server": "Tietoja",
|
||||
"footer.directory": "Profiilihakemisto",
|
||||
"footer.get_app": "Hanki sovellus",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Liðugt",
|
||||
"announcement.announcement": "Kunngerð",
|
||||
"annual_report.announcement.action_build": "Ger mítt Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Nei takk",
|
||||
"annual_report.announcement.action_view": "Vís mítt Wrapstodon",
|
||||
"annual_report.announcement.description": "Fá meira at vita um títt virksemi á Mastodon seinasta árið.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} er komið",
|
||||
"annual_report.summary.archetype.booster": "Kuli jagarin",
|
||||
"annual_report.summary.archetype.lurker": "Lúrarin",
|
||||
"annual_report.summary.archetype.oracle": "Oraklið",
|
||||
"annual_report.summary.archetype.pollster": "Spyrjarin",
|
||||
"annual_report.summary.archetype.replier": "Sosiali firvaldurin",
|
||||
"annual_report.summary.followers.followers": "fylgjarar",
|
||||
"annual_report.summary.followers.total": "{count} íalt",
|
||||
"annual_report.summary.here_it_is": "Her er ein samandráttur av {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "mest dámdi postur",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "oftast stimbraði postur",
|
||||
"annual_report.summary.highlighted_post.by_replies": "postur við flestum svarum",
|
||||
"annual_report.summary.highlighted_post.possessive": "hjá {name}",
|
||||
"annual_report.nav_item.badge": "Nýtt",
|
||||
"annual_report.shared_page.donate": "Stuðla",
|
||||
"annual_report.shared_page.footer": "Gjørt við {heart} av Mastodon toyminum",
|
||||
"annual_report.shared_page.footer_server_info": "{username} brúkar {domain}, ein av fleiri felagsskapum, sum er drivin av Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} helt fram at veiða postar at lyfta, og styrkti aðrar skaparar við perfektum sikti.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Tú helt fram at veiða postar at lyfta, og styrkti aðrar skaparar við perfektum sikti.",
|
||||
"annual_report.summary.archetype.booster.name": "Bogaskjúttin",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Vit vita, at {name} var úti har onkustaðni og neyt Mastodon uppá sín egna stilla máta.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Vit vita, at tú var úti har onkustaðni og neyt Mastodon uppá tín egna stilla máta.",
|
||||
"annual_report.summary.archetype.lurker.name": "Stóikarin",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} gjørdi fleiri nýggjar postar enn svar og helt Mastodon feskt og framtíðarrættað.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Tú gjørdi fleiri nýggjar postar enn svar og helt Mastodon feskt og framtíðarrættað.",
|
||||
"annual_report.summary.archetype.oracle.name": "Oraklið",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} stovnaði fleiri atkvøðugreiðslur enn onnur sløg av postum og dyrkaði forvitni á Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Tú stovnaði fleiri atkvøðugreiðslur enn onnur sløg av postum og dyrkaði forvitni á Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Undrandi",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} svaraði ofta til postar hjá øðrum og ríkaði Mastodon við nýggjum kjaki.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Tú svaraði ofta til postar hjá øðrum og ríkaði Mastodon við nýggjum kjaki.",
|
||||
"annual_report.summary.archetype.replier.name": "Firvaldurin",
|
||||
"annual_report.summary.archetype.reveal": "Avdúka mítt frumsnið",
|
||||
"annual_report.summary.archetype.reveal_description": "Takk fyri at tú er partur av Mastodon! Nú er tíðin komin at finna útav hvat frumsnið tú fall inn í í {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Frumsniðið hjá {name}",
|
||||
"annual_report.summary.archetype.title_self": "Títt frumsnið",
|
||||
"annual_report.summary.close": "Lat aftur",
|
||||
"annual_report.summary.copy_link": "Avrita leinki",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {{counter} nýggjur fylgjari} other {{counter} nýggir fylgjarar}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Hesin posturin var lyftur {count, plural, one {eina ferð} other {# ferðir}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Hesin posturin var yndismerktur {count, plural, one {eina ferð} other {# ferðir}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Hesin posturin fekk {count, plural, one {eitt svar} other {# svar}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Best umtókti postur",
|
||||
"annual_report.summary.most_used_app.most_used_app": "mest brúkta app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brúkta frámerki",
|
||||
"annual_report.summary.most_used_hashtag.none": "Einki",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Tú brúkti hetta frámerkið í {count, plural, one {einum posti} other {# postum}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} brúkti hetta frámerkið í {count, plural, one {einum posti} other {# postum}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nýggir postar",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Tað fær teg í topp</topLabel><percentage></percentage><bottomLabel>av {domain} brúkarum.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Vit fara ikki at fortelja Bernie tað.",
|
||||
"annual_report.summary.share_elsewhere": "Deil aðrastaðni",
|
||||
"annual_report.summary.share_message": "Eg fekk {archetype} frumsniðið!",
|
||||
"annual_report.summary.thanks": "Takk fyri at tú er partur av Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Deil á Mastodon",
|
||||
"attachments_list.unprocessed": "(óviðgjørt)",
|
||||
"audio.hide": "Fjal ljóð",
|
||||
"block_modal.remote_users_caveat": "Vit biðja ambætaran {domain} virða tína avgerð. Kortini er eingin vissa um samsvar, av tí at fleiri ambætarar handfara blokkar ymiskt. Almennir postar kunnu framvegis vera sjónligir fyri brúkarar, sum ikki eru innritaðir.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Hvørji tú átti at fylgt",
|
||||
"followed_tags": "Fylgd frámerki",
|
||||
"footer.about": "Um",
|
||||
"footer.about_mastodon": "Um Mastodon",
|
||||
"footer.about_server": "Um {domain}",
|
||||
"footer.about_this_server": "Um",
|
||||
"footer.directory": "Vangaskrá",
|
||||
"footer.get_app": "Heinta appina",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Terminé",
|
||||
"announcement.announcement": "Annonce",
|
||||
"annual_report.announcement.action_build": "Générer mon Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Non merci",
|
||||
"annual_report.announcement.action_view": "Voir mon Wrapstodon",
|
||||
"annual_report.announcement.description": "En découvrir plus concernant votre activité sur Mastodon pour l'année écoulée.",
|
||||
"annual_report.announcement.title": "Le Wrapstodon {year} est arrivé",
|
||||
"annual_report.summary.archetype.booster": "Le chasseur de sang-froid",
|
||||
"annual_report.summary.archetype.lurker": "Le faucheur",
|
||||
"annual_report.summary.archetype.oracle": "L’oracle",
|
||||
"annual_report.summary.archetype.pollster": "Le sondeur",
|
||||
"annual_report.summary.archetype.replier": "Le papillon social",
|
||||
"annual_report.summary.followers.followers": "abonné·e·s",
|
||||
"annual_report.summary.followers.total": "{count} au total",
|
||||
"annual_report.summary.here_it_is": "Voici votre récap de {year} :",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "post le plus aimé",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "post le plus boosté",
|
||||
"annual_report.summary.highlighted_post.by_replies": "post avec le plus de réponses",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}'s",
|
||||
"annual_report.nav_item.badge": "Nouveau",
|
||||
"annual_report.shared_page.donate": "Faire un don",
|
||||
"annual_report.shared_page.footer": "Généré avec {heart} par l'équipe de Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} utilise {domain}, l'une des nombreuses communautés propulsées par Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} fut à l’affût des messages à partager, ciblant avec perfection les créatrices et créateurs à amplifier.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Vous avez été à l'affût des messages à partager, ciblant avec perfection les créatrices et créateurs à amplifier.",
|
||||
"annual_report.summary.archetype.booster.name": "Archer, archère",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Nous savons que {name} a été là, quelque part, profitant calmement de Mastodon à sa manière.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Nous savons que vous avez été là, quelque part, profitant calmement de Mastodon à votre manière.",
|
||||
"annual_report.summary.archetype.lurker.name": "Stoïque",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} publia plus de nouveaux messages que de réponses, contribuant à garder Mastodon frais et tourné vers l'avenir.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Vous avez publié plus de nouveaux messages que de réponses, contribuant à garder Mastodon frais et tourné vers l'avenir.",
|
||||
"annual_report.summary.archetype.oracle.name": "Oracle",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} publia plus de sondages que n'importe quel autre type de message, cultivant la curiosité sur Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Vous avez publié plus de sondages que n'importe quel autre type de message, cultivant la curiosité sur Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Curieux, curieuse",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} répliqua fréquemment aux messages des autres, pollinisant Mastodon de nouvelles discussions.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Vous avez fréquemment répliqué aux messages des autres, pollinisant Mastodon de nouvelles discussions.",
|
||||
"annual_report.summary.archetype.replier.name": "Papillon",
|
||||
"annual_report.summary.archetype.reveal": "Révéler mon archétype",
|
||||
"annual_report.summary.archetype.reveal_description": "Merci de faire partie de Mastodon ! Il est temps de découvrir quel archétype vous avez incarné en {year}.",
|
||||
"annual_report.summary.archetype.title_public": "L'archétype de {name}",
|
||||
"annual_report.summary.archetype.title_self": "Votre archétype",
|
||||
"annual_report.summary.close": "Fermer",
|
||||
"annual_report.summary.copy_link": "Copier le lien",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {nouvel·le abonné·e} other {nouveaux abonné·e·s}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Ce message a été partagé {count, plural, one {une fois} other {# fois}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Ce message a été mis en favoris {count, plural, one {une fois} other {# fois}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Ce message a reçu {count, plural, one {une réponse} other {# réponses}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Message le plus populaire",
|
||||
"annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
|
||||
"annual_report.summary.most_used_hashtag.none": "Aucun",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Vous avez utilisé ce hashtag dans {count, plural, one {un message} other {# messages}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} a inclus ce hashtag dans {count, plural, one {un message} other {# messages}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nouveaux messages",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><percentage></percentage><bottomLabel>des utilisateurs de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Partager ailleurs",
|
||||
"annual_report.summary.share_message": "J’ai obtenu l’archétype {archetype} !",
|
||||
"annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Partager sur Mastodon",
|
||||
"attachments_list.unprocessed": "(non traité)",
|
||||
"audio.hide": "Masquer l'audio",
|
||||
"block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Qui suivre",
|
||||
"followed_tags": "Hashtags suivis",
|
||||
"footer.about": "À propos",
|
||||
"footer.about_mastodon": "À propos de Mastodon",
|
||||
"footer.about_server": "À propos de {domain}",
|
||||
"footer.about_this_server": "À propos",
|
||||
"footer.directory": "Annuaire des profils",
|
||||
"footer.get_app": "Télécharger l’application",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Terminé",
|
||||
"announcement.announcement": "Annonce",
|
||||
"annual_report.announcement.action_build": "Générer mon Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Non merci",
|
||||
"annual_report.announcement.action_view": "Voir mon Wrapstodon",
|
||||
"annual_report.announcement.description": "En découvrir plus concernant votre activité sur Mastodon pour l'année écoulée.",
|
||||
"annual_report.announcement.title": "Le Wrapstodon {year} est arrivé",
|
||||
"annual_report.summary.archetype.booster": "Le chasseur de sang-froid",
|
||||
"annual_report.summary.archetype.lurker": "Le faucheur",
|
||||
"annual_report.summary.archetype.oracle": "L’oracle",
|
||||
"annual_report.summary.archetype.pollster": "Le sondeur",
|
||||
"annual_report.summary.archetype.replier": "Le papillon social",
|
||||
"annual_report.summary.followers.followers": "abonné·e·s",
|
||||
"annual_report.summary.followers.total": "{count} au total",
|
||||
"annual_report.summary.here_it_is": "Voici votre récap de {year} :",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "post le plus aimé",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "post le plus boosté",
|
||||
"annual_report.summary.highlighted_post.by_replies": "post avec le plus de réponses",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}'s",
|
||||
"annual_report.nav_item.badge": "Nouveau",
|
||||
"annual_report.shared_page.donate": "Faire un don",
|
||||
"annual_report.shared_page.footer": "Généré avec {heart} par l'équipe de Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} utilise {domain}, l'une des nombreuses communautés propulsées par Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} fut à l’affût des messages à partager, ciblant avec perfection les créatrices et créateurs à amplifier.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Vous avez été à l'affût des messages à partager, ciblant avec perfection les créatrices et créateurs à amplifier.",
|
||||
"annual_report.summary.archetype.booster.name": "Archer, archère",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Nous savons que {name} a été là, quelque part, profitant calmement de Mastodon à sa manière.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Nous savons que vous avez été là, quelque part, profitant calmement de Mastodon à votre manière.",
|
||||
"annual_report.summary.archetype.lurker.name": "Stoïque",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} publia plus de nouveaux messages que de réponses, contribuant à garder Mastodon frais et tourné vers l'avenir.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Vous avez publié plus de nouveaux messages que de réponses, contribuant à garder Mastodon frais et tourné vers l'avenir.",
|
||||
"annual_report.summary.archetype.oracle.name": "Oracle",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} publia plus de sondages que n'importe quel autre type de message, cultivant la curiosité sur Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Vous avez publié plus de sondages que n'importe quel autre type de message, cultivant la curiosité sur Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Curieux, curieuse",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} répliqua fréquemment aux messages des autres, pollinisant Mastodon de nouvelles discussions.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Vous avez fréquemment répliqué aux messages des autres, pollinisant Mastodon de nouvelles discussions.",
|
||||
"annual_report.summary.archetype.replier.name": "Papillon",
|
||||
"annual_report.summary.archetype.reveal": "Révéler mon archétype",
|
||||
"annual_report.summary.archetype.reveal_description": "Merci de faire partie de Mastodon ! Il est temps de découvrir quel archétype vous avez incarné en {year}.",
|
||||
"annual_report.summary.archetype.title_public": "L'archétype de {name}",
|
||||
"annual_report.summary.archetype.title_self": "Votre archétype",
|
||||
"annual_report.summary.close": "Fermer",
|
||||
"annual_report.summary.copy_link": "Copier le lien",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {nouvel·le abonné·e} other {nouveaux abonné·e·s}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Ce message a été partagé {count, plural, one {une fois} other {# fois}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Ce message a été mis en favoris {count, plural, one {une fois} other {# fois}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Ce message a reçu {count, plural, one {une réponse} other {# réponses}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Message le plus populaire",
|
||||
"annual_report.summary.most_used_app.most_used_app": "appli la plus utilisée",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
|
||||
"annual_report.summary.most_used_hashtag.none": "Aucun",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Vous avez utilisé ce hashtag dans {count, plural, one {un message} other {# messages}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} a inclus ce hashtag dans {count, plural, one {un message} other {# messages}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nouveaux messages",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><percentage></percentage><bottomLabel>des utilisateurs de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Partager ailleurs",
|
||||
"annual_report.summary.share_message": "J’ai obtenu l’archétype {archetype} !",
|
||||
"annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Partager sur Mastodon",
|
||||
"attachments_list.unprocessed": "(non traité)",
|
||||
"audio.hide": "Masquer l'audio",
|
||||
"block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Qui suivre",
|
||||
"followed_tags": "Hashtags suivis",
|
||||
"footer.about": "À propos",
|
||||
"footer.about_mastodon": "À propos de Mastodon",
|
||||
"footer.about_server": "À propos de {domain}",
|
||||
"footer.about_this_server": "À propos",
|
||||
"footer.directory": "Annuaire des profils",
|
||||
"footer.get_app": "Télécharger l’application",
|
||||
|
||||
@@ -107,25 +107,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Beskriuw dit foar blinen en fisueel beheinde…",
|
||||
"alt_text_modal.done": "Klear",
|
||||
"announcement.announcement": "Oankundiging",
|
||||
"annual_report.summary.archetype.booster": "De cool-hunter",
|
||||
"annual_report.summary.archetype.lurker": "De lurker",
|
||||
"annual_report.summary.archetype.oracle": "It orakel",
|
||||
"annual_report.summary.archetype.pollster": "De opinypeiler",
|
||||
"annual_report.summary.archetype.replier": "De sosjale flinter",
|
||||
"annual_report.summary.followers.followers": "folgers",
|
||||
"annual_report.summary.followers.total": "totaal {count}",
|
||||
"annual_report.summary.here_it_is": "Jo jieroersjoch foar {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "berjocht mei de measte favoriten",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "berjocht mei de measte boosts",
|
||||
"annual_report.summary.highlighted_post.by_replies": "berjocht mei de measte reaksjes",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}’s",
|
||||
"annual_report.summary.most_used_app.most_used_app": "meast brûkte app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "meast brûkte hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Gjin",
|
||||
"annual_report.summary.new_posts.new_posts": "nije berjochten",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Hjirmei hearre jo ta de top</topLabel><percentage></percentage><bottomLabel> fan {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Wy sille Bernie neat fertelle.",
|
||||
"annual_report.summary.thanks": "Tank dat jo part binne fan Mastodon!",
|
||||
"attachments_list.unprocessed": "(net ferwurke)",
|
||||
"audio.hide": "Audio ferstopje",
|
||||
"block_modal.remote_users_caveat": "Wy freegje de server {domain} om jo beslút te respektearjen. It neilibben hjirfan is echter net garandearre, omdat guon servers blokkaden oars ynterpretearje kinne. Iepenbiere berjochten binne mooglik noch hieltyd sichtber foar net-oanmelde brûkers.",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Déanta",
|
||||
"announcement.announcement": "Fógra",
|
||||
"annual_report.announcement.action_build": "Tóg mo Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Ní raibh maith agat",
|
||||
"annual_report.announcement.action_view": "Féach ar mo Wrapstodon",
|
||||
"annual_report.announcement.description": "Faigh tuilleadh eolais faoi do rannpháirtíocht ar Mastodon le bliain anuas.",
|
||||
"annual_report.announcement.title": "Tá Wrapstodon {year} tagtha",
|
||||
"annual_report.summary.archetype.booster": "An sealgair fionnuar",
|
||||
"annual_report.summary.archetype.lurker": "An lurker",
|
||||
"annual_report.summary.archetype.oracle": "An oracal",
|
||||
"annual_report.summary.archetype.pollster": "An pollaire",
|
||||
"annual_report.summary.archetype.replier": "An féileacán sóisialta",
|
||||
"annual_report.summary.followers.followers": "leanúna",
|
||||
"annual_report.summary.followers.total": "{count} san iomlán",
|
||||
"annual_report.summary.here_it_is": "Seo do {year} faoi athbhreithniú:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "post is fearr leat",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "post is treisithe",
|
||||
"annual_report.summary.highlighted_post.by_replies": "post leis an líon is mó freagraí",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}'s",
|
||||
"annual_report.nav_item.badge": "Nua",
|
||||
"annual_report.shared_page.donate": "Tabhair Síntiús",
|
||||
"annual_report.shared_page.footer": "Gineadh le {heart} ag foireann Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "Úsáideann {username} {domain}, ceann de go leor pobail atá faoi thiomáint ag Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "D’fhan {name} ag cuardach postálacha le cur chun cinn, ag cur le cruthaitheoirí eile le cuspóir foirfe.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "D’fhan tú ag cuardach postálacha le borradh a chur fúthu, ag cur le cruthaitheoirí eile le cuspóir foirfe.",
|
||||
"annual_report.summary.archetype.booster.name": "An Saighdeoir",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Tá a fhios againn go raibh {name} amuigh ansin, áit éigin, ag baint taitnimh as Mastodon ar a mbealach ciúin féin.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Tá a fhios againn go raibh tú amuigh ansin, áit éigin, ag baint taitnimh as Mastodon ar do bhealach ciúin féin.",
|
||||
"annual_report.summary.archetype.lurker.name": "An Stoiceach",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "Chruthaigh {name} níos mó postálacha nua ná freagraí, rud a choinnigh Mastodon úr agus dírithe ar an todhchaí.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Chruthaigh tú níos mó postálacha nua ná freagraí, rud a choinnigh Mastodon úr agus dírithe ar an todhchaí.",
|
||||
"annual_report.summary.archetype.oracle.name": "An tOracal",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "Chruthaigh {name} níos mó pobalbhreitheanna ná cineálacha poist eile, rud a chothaigh fiosracht faoi Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Chruthaigh tú níos mó pobalbhreitheanna ná cineálacha poist eile, rud a chothaigh fiosracht ar Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "An tIontasóir",
|
||||
"annual_report.summary.archetype.replier.desc_public": "Is minic a d’fhreagair {name} poist daoine eile, rud a spreag plé nua i Mastodon.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Is minic a d’fhreagair tú poist daoine eile, ag maolú Mastodon le plé nua.",
|
||||
"annual_report.summary.archetype.replier.name": "An Féileacán",
|
||||
"annual_report.summary.archetype.reveal": "Nocht mo sheandálaíocht",
|
||||
"annual_report.summary.archetype.reveal_description": "Go raibh maith agat as bheith mar chuid de Mastodon! Tá sé in am a fháil amach cén t-archetíopa a léirigh tú i {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Seanchineál {name}",
|
||||
"annual_report.summary.archetype.title_self": "Do sheandálaíocht",
|
||||
"annual_report.summary.close": "Dún",
|
||||
"annual_report.summary.copy_link": "Cóipeáil nasc",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {leantóir nua} two {leantóirí nua} few {leantóirí nua} many {leantóirí nua} other {leantóirí nua}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Borradh a tugadh faoin bpost seo {count, plural, one {uair amháin} two {# uaire} few {# uaire} many {# uaire} other {# uaire}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Cuireadh an post seo leis na ceanáin {count, plural, one {uair amháin} two {# uaire} few {# uaire} many {# uaire} other {# uaire}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Fuair an post seo {count, plural, one {freagra amháin} two {# freagraí} few {# freagraí} many {# freagraí} other {# freagraí}}.",
|
||||
"annual_report.summary.highlighted_post.title": "An post is mó tóir",
|
||||
"annual_report.summary.most_used_app.most_used_app": "aip is mó a úsáidtear",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag is mó a úsáidtear",
|
||||
"annual_report.summary.most_used_hashtag.none": "Dada",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Chuir tú an haischlib seo i {count, plural, one {post amháin} two {# poist} few {# poist} many {# poist} other {# poist}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "Chuir {name} an haischlib seo i {count, plural, one {post amháin} two {# poist} few {# poist} many {# poist} other {# poist}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "postanna nua",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Cuireann sé sin i mbarr</topLabel><percentage></percentage><bottomLabel> úsáideoirí {domain}.</bottomLabel> thú",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ní inseoidh muid do Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Roinn in áit eile",
|
||||
"annual_report.summary.share_message": "Fuair mé an t-archetíopa {archetype}!",
|
||||
"annual_report.summary.thanks": "Go raibh maith agat as a bheith mar chuid de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Comhroinn ar Mastodon",
|
||||
"attachments_list.unprocessed": "(neamhphróiseáilte)",
|
||||
"audio.hide": "Cuir fuaim i bhfolach",
|
||||
"block_modal.remote_users_caveat": "Iarrfaimid ar an bhfreastalaí {domain} meas a bheith agat ar do chinneadh. Mar sin féin, ní ráthaítear comhlíonadh toisc go bhféadfadh roinnt freastalaithe bloic a láimhseáil ar bhealach difriúil. Seans go mbeidh postálacha poiblí fós le feiceáil ag úsáideoirí nach bhfuil logáilte isteach.",
|
||||
@@ -248,7 +270,7 @@
|
||||
"confirmations.follow_to_list.title": "Lean an t-úsáideoir?",
|
||||
"confirmations.logout.confirm": "Logáil amach",
|
||||
"confirmations.logout.message": "An bhfuil tú cinnte gur mhaith leat logáil amach?",
|
||||
"confirmations.logout.title": "Logáil Amach?",
|
||||
"confirmations.logout.title": "Logáil amach?",
|
||||
"confirmations.missing_alt_text.confirm": "Cuir téacs alt leis",
|
||||
"confirmations.missing_alt_text.message": "Tá meáin gan alt téacs i do phostáil. Má chuirtear tuairiscí leis, cabhraíonn sé seo leat d’inneachar a rochtain do níos mó daoine.",
|
||||
"confirmations.missing_alt_text.secondary": "Post ar aon nós",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Cé le leanúint",
|
||||
"followed_tags": "Hashtags le leanúint",
|
||||
"footer.about": "Maidir le",
|
||||
"footer.about_mastodon": "Maidir le Mastodon",
|
||||
"footer.about_server": "Maidir le {domain}",
|
||||
"footer.about_this_server": "Maidir",
|
||||
"footer.directory": "Eolaire próifílí",
|
||||
"footer.get_app": "Faigh an aip",
|
||||
@@ -456,7 +480,7 @@
|
||||
"hints.profiles.see_more_followers": "Féach ar a thuilleadh leantóirí ar {domain}",
|
||||
"hints.profiles.see_more_follows": "Féach tuilleadh seo a leanas ar {domain}",
|
||||
"hints.profiles.see_more_posts": "Féach ar a thuilleadh postálacha ar {domain}",
|
||||
"home.column_settings.show_quotes": "Taispeáin Sleachta",
|
||||
"home.column_settings.show_quotes": "Taispeáin sleachta",
|
||||
"home.column_settings.show_reblogs": "Taispeáin moltaí",
|
||||
"home.column_settings.show_replies": "Taispeán freagraí",
|
||||
"home.hide_announcements": "Cuir fógraí i bhfolach",
|
||||
@@ -686,7 +710,7 @@
|
||||
"notifications.column_settings.mention": "Tráchtanna:",
|
||||
"notifications.column_settings.poll": "Torthaí suirbhéanna:",
|
||||
"notifications.column_settings.push": "Brúfhógraí",
|
||||
"notifications.column_settings.quote": "Luachain:",
|
||||
"notifications.column_settings.quote": "Sleachta:",
|
||||
"notifications.column_settings.reblog": "Moltaí:",
|
||||
"notifications.column_settings.show": "Taispeáin i gcolún",
|
||||
"notifications.column_settings.sound": "Seinn an fhuaim",
|
||||
@@ -763,14 +787,14 @@
|
||||
"privacy.public.long": "Duine ar bith ar agus amach Mastodon",
|
||||
"privacy.public.short": "Poiblí",
|
||||
"privacy.quote.anyone": "{visibility}, is féidir le duine ar bith lua",
|
||||
"privacy.quote.disabled": "{visibility}, comharthaí athfhriotail díchumasaithe",
|
||||
"privacy.quote.limited": "{visibility}, luachana teoranta",
|
||||
"privacy.quote.disabled": "{visibility}, sleachta díchumasaithe",
|
||||
"privacy.quote.limited": "{visibility}, sleachta teoranta",
|
||||
"privacy.unlisted.additional": "Iompraíonn sé seo díreach mar a bheadh poiblí, ach amháin ní bheidh an postáil le feiceáil i bhfothaí beo nó i hashtags, in iniúchadh nó i gcuardach Mastodon, fiú má tá tú liostáilte ar fud an chuntais.",
|
||||
"privacy.unlisted.long": "I bhfolach ó thorthaí cuardaigh Mastodon, treochtaí, agus amlínte poiblí",
|
||||
"privacy.unlisted.short": "Poiblí ciúin",
|
||||
"privacy_policy.last_updated": "Nuashonraithe {date}",
|
||||
"privacy_policy.title": "Polasaí príobháideachais",
|
||||
"quote_error.edit": "Ní féidir Sleachta a chur leis agus post á chur in eagar.",
|
||||
"quote_error.edit": "Ní féidir sleachta a chur leis agus post á chur in eagar.",
|
||||
"quote_error.poll": "Ní cheadaítear lua le pobalbhreitheanna.",
|
||||
"quote_error.private_mentions": "Ní cheadaítear lua le tagairtí díreacha.",
|
||||
"quote_error.quote": "Ní cheadaítear ach luachan amháin ag an am.",
|
||||
@@ -885,7 +909,7 @@
|
||||
"status.admin_account": "Oscail comhéadan modhnóireachta do @{name}",
|
||||
"status.admin_domain": "Oscail comhéadan modhnóireachta le haghaidh {domain}",
|
||||
"status.admin_status": "Oscail an postáil seo sa chomhéadan modhnóireachta",
|
||||
"status.all_disabled": "Tá borradh agus luachana díchumasaithe",
|
||||
"status.all_disabled": "Tá treisiúcháin agus sleachta díchumasaithe",
|
||||
"status.block": "Bac @{name}",
|
||||
"status.bookmark": "Leabharmharcanna",
|
||||
"status.cancel_reblog_private": "Dímhol",
|
||||
@@ -945,7 +969,7 @@
|
||||
"status.quotes.empty": "Níl an post seo luaite ag aon duine go fóill. Nuair a dhéanann duine é, taispeánfar anseo é.",
|
||||
"status.quotes.local_other_disclaimer": "Ní thaispeánfar sleachta ar dhiúltaigh an t-údar dóibh.",
|
||||
"status.quotes.remote_other_disclaimer": "Níl ráthaíocht ann go dtaispeánfar anseo ach sleachta ó {domain}. Ní thaispeánfar sleachta ar dhiúltaigh an t-údar dóibh.",
|
||||
"status.quotes_count": "{count, plural,\n one {{counter} athfhriotal}\n two {{counter} athfhriotail}\n few {{counter} athfhriotail}\n many {{counter} athfhriotal}\n other {{counter} athfhriotail}\n}",
|
||||
"status.quotes_count": "{count, plural, one {{counter} sleacht} two {{counter} sleachta} few {{counter} sleachta} many {{counter} sleachta} other {{counter} sleachta}}",
|
||||
"status.read_more": "Léan a thuilleadh",
|
||||
"status.reblog": "Treisiú",
|
||||
"status.reblog_or_quote": "Borradh nó luachan",
|
||||
@@ -1001,7 +1025,7 @@
|
||||
"upload_button.label": "Cuir íomhánna, físeán nó comhad fuaime leis",
|
||||
"upload_error.limit": "Sáraíodh an teorainn uaslódála comhaid.",
|
||||
"upload_error.poll": "Ní cheadaítear uaslódáil comhad le pobalbhreith.",
|
||||
"upload_error.quote": "Ní cheadaítear uaslódáil comhaid le comharthaí athfhriotail.",
|
||||
"upload_error.quote": "Ní cheadaítear uaslódáil comhaid le sleachta.",
|
||||
"upload_form.drag_and_drop.instructions": "Chun ceangaltán meán a phiocadh suas, brúigh spás nó cuir isteach. Agus tú ag tarraingt, bain úsáid as na heochracha saigheada chun an ceangaltán meán a bhogadh i dtreo ar bith. Brúigh spás nó cuir isteach arís chun an ceangaltán meán a scaoileadh ina phost nua, nó brúigh éalú chun cealú.",
|
||||
"upload_form.drag_and_drop.on_drag_cancel": "Cuireadh an tarraingt ar ceal. Scaoileadh ceangaltán meán {item}.",
|
||||
"upload_form.drag_and_drop.on_drag_end": "Scaoileadh ceangaltán meán {item}.",
|
||||
@@ -1027,11 +1051,11 @@
|
||||
"video.volume_up": "Toirt suas",
|
||||
"visibility_modal.button_title": "Socraigh infheictheacht",
|
||||
"visibility_modal.direct_quote_warning.text": "Má shábhálann tú na socruithe reatha, déanfar an luachan leabaithe a thiontú ina nasc.",
|
||||
"visibility_modal.direct_quote_warning.title": "Ní féidir luachana a leabú i luanna príobháideacha",
|
||||
"visibility_modal.direct_quote_warning.title": "Ní féidir sleachta a leabú i dtráchtanna príobháideacha",
|
||||
"visibility_modal.header": "Infheictheacht agus idirghníomhaíocht",
|
||||
"visibility_modal.helper.direct_quoting": "Ní féidir le daoine eile tráchtanna príobháideacha a scríobhadh ar Mastodon a lua.",
|
||||
"visibility_modal.helper.privacy_editing": "Ní féidir infheictheacht a athrú tar éis post a fhoilsiú.",
|
||||
"visibility_modal.helper.privacy_private_self_quote": "Ní féidir féin-luachanna ó phoist phríobháideacha a chur ar fáil don phobal.",
|
||||
"visibility_modal.helper.privacy_private_self_quote": "Ní féidir féin-sleachta ó phoist phríobháideacha a chur ar fáil don phobal.",
|
||||
"visibility_modal.helper.private_quoting": "Ní féidir le daoine eile poist atá scríofa ar Mastodon agus atá dírithe ar leanúna amháin a lua.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Nuair a luann daoine thú, beidh a bpost i bhfolach ó amlínte treochta freisin.",
|
||||
"visibility_modal.instructions": "Rialaigh cé a fhéadfaidh idirghníomhú leis an bpost seo. Is féidir leat socruithe a chur i bhfeidhm ar gach post amach anseo trí nascleanúint a dhéanamh chuig <link>Sainroghanna > Réamhshocruithe Postála</link>.",
|
||||
|
||||
@@ -113,25 +113,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Mìnich seo dhan fheadhainn air a bheil cion-lèirsinne…",
|
||||
"alt_text_modal.done": "Deiseil",
|
||||
"announcement.announcement": "Brath-fios",
|
||||
"annual_report.summary.archetype.booster": "Brosnaiche",
|
||||
"annual_report.summary.archetype.lurker": "Eala-bhalbh",
|
||||
"annual_report.summary.archetype.oracle": "Coinneach Odhar",
|
||||
"annual_report.summary.archetype.pollster": "Cunntair nam beachd",
|
||||
"annual_report.summary.archetype.replier": "Ceatharnach nam freagairt",
|
||||
"annual_report.summary.followers.followers": "luchd-leantainn",
|
||||
"annual_report.summary.followers.total": "{count} gu h-iomlan",
|
||||
"annual_report.summary.here_it_is": "Seo mar a chaidh {year} leat:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "am post as annsa",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "am post air a bhrosnachadh as trice",
|
||||
"annual_report.summary.highlighted_post.by_replies": "am post dhan deach fhreagairt as trice",
|
||||
"annual_report.summary.highlighted_post.possessive": "Aig {name},",
|
||||
"annual_report.summary.most_used_app.most_used_app": "an aplacaid a chaidh a cleachdadh as trice",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "an taga hais a chaidh a cleachdadh as trice",
|
||||
"annual_report.summary.most_used_hashtag.none": "Chan eil gin",
|
||||
"annual_report.summary.new_posts.new_posts": "postaichean ùra",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Tha thu am measg</topLabel><percentage></percentage><bottomLabel>dhen luchd-cleachdaidh as cliùitiche air {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ainmeil ’nad latha ’s ’nad linn.",
|
||||
"annual_report.summary.thanks": "Mòran taing airson conaltradh air Mastodon!",
|
||||
"attachments_list.unprocessed": "(gun phròiseasadh)",
|
||||
"audio.hide": "Falaich an fhuaim",
|
||||
"block_modal.remote_users_caveat": "Iarraidh sinn air an fhrithealaiche {domain} gun gèill iad ri do cho-dhùnadh. Gidheadh, chan eil barantas gun gèill iad on a làimhsicheas cuid a fhrithealaichean bacaidhean air dòigh eadar-dhealaichte. Dh’fhaoidte gum faic daoine gun chlàradh a-steach na postaichean poblach agad fhathast.",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Feito",
|
||||
"announcement.announcement": "Anuncio",
|
||||
"annual_report.announcement.action_build": "Crear o meu Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Non, grazas",
|
||||
"annual_report.announcement.action_view": "Ver o meu Wrapstodon",
|
||||
"annual_report.announcement.description": "Olla o que andiveches facendo en Mastodon durante o último ano.",
|
||||
"annual_report.announcement.title": "Chegou o Wrapstodon de {year}",
|
||||
"annual_report.summary.archetype.booster": "O Telexornal",
|
||||
"annual_report.summary.archetype.lurker": "Volleur",
|
||||
"annual_report.summary.archetype.oracle": "Sabichón",
|
||||
"annual_report.summary.archetype.pollster": "I.G.E.",
|
||||
"annual_report.summary.archetype.replier": "Lareteire",
|
||||
"annual_report.summary.followers.followers": "seguidoras",
|
||||
"annual_report.summary.followers.total": "{count} en total",
|
||||
"annual_report.summary.here_it_is": "Este é o resumo do teu {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "a publicación mais favorecida",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "a publicación con mais promocións",
|
||||
"annual_report.summary.highlighted_post.by_replies": "a publicación con mais respostas",
|
||||
"annual_report.summary.highlighted_post.possessive": "de {name}",
|
||||
"annual_report.nav_item.badge": "Novidade",
|
||||
"annual_report.shared_page.donate": "Doar",
|
||||
"annual_report.shared_page.footer": "Creado con {heart} polo equipo de Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} utiliza {domain}, unha das moitas comunidades de Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} á caza de publicacións para promover, dando relevancia a outras creadoras.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Á caza de publicacións para promover, dando relevancia a outras creadoras.",
|
||||
"annual_report.summary.archetype.booster.name": "Arqueire",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Sabemos que {name} andivo por aí, nalgures, desfrutando de Mastodon paseniño e ao seu xeito.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Sabemos que andiveches por aí, nalgures, desfrutando de Mastodon tranquilamente e ao teu xeito.",
|
||||
"annual_report.summary.archetype.lurker.name": "Xubilade",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} creou máis publicacións que respostas, mantendo Mastodon ao día e ollando ao futuro.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Creaches máis publicacións que respostas, mantendo Mastodon ao día e ollando o futuro.",
|
||||
"annual_report.summary.archetype.oracle.name": "O Oráculo",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} creou máis enquisas que publicacións normais, cultivando a curiosidade en Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Creaches máis enquisas que publicacións normais, cultivando a curiosidade en Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "O mar de dúbidas",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} respondeu con frecuencia a outras persoas, polinizando Mastodon con novas conversas.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Respondeches con frecuencia a outras persoas, polinizando Mastodon con novas conversas.",
|
||||
"annual_report.summary.archetype.replier.name": "A Bolboreta",
|
||||
"annual_report.summary.archetype.reveal": "Mostrar o meu arquetipo",
|
||||
"annual_report.summary.archetype.reveal_description": "Grazas por ser parte de Mastodon! É hora de coñecer o teu arquetipo de usuaria no {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Arquetipo de {name}",
|
||||
"annual_report.summary.archetype.title_self": "O teu arquetipo",
|
||||
"annual_report.summary.close": "Fechar",
|
||||
"annual_report.summary.copy_link": "Copiar ligazón",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {nova seguidora} other {nevas seguidoras}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Esta publicación promoveuse {count, plural, one {unha vez} other {# veces}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Esta publicación favoreceuse {count, plural, one {unha vez} other {# veces}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Esta publicación tivo {count, plural, one {unha resposta} other {# respostas}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Publicación máis popular",
|
||||
"annual_report.summary.most_used_app.most_used_app": "app que mais usaches",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "o cancelo mais utilizado",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nada",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Incluíches este cancelo en {count, plural, one {1 publicación} other {# publicacións}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} incluíu este cancelo en {count, plural, one {1 publicación} other {# publicacións}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "novas publicacións",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Sitúante no top</topLabel><percentage></percentage><bottomLabel> das usuarias de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Moito tes que contarnos!",
|
||||
"annual_report.summary.share_elsewhere": "Compárteo onde queiras",
|
||||
"annual_report.summary.share_message": "Resulta que son… {archetype}!",
|
||||
"annual_report.summary.thanks": "Grazas por ser parte de Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Compartir en Mastodon",
|
||||
"attachments_list.unprocessed": "(sen procesar)",
|
||||
"audio.hide": "Agochar audio",
|
||||
"block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "A quen seguir",
|
||||
"followed_tags": "Cancelos seguidos",
|
||||
"footer.about": "Sobre",
|
||||
"footer.about_mastodon": "Sobre Mastodon",
|
||||
"footer.about_server": "Sobre {domain}",
|
||||
"footer.about_this_server": "Sobre",
|
||||
"footer.directory": "Directorio de perfís",
|
||||
"footer.get_app": "Descarga a app",
|
||||
|
||||
@@ -114,29 +114,50 @@
|
||||
"alt_text_modal.done": "סיום",
|
||||
"announcement.announcement": "הכרזה",
|
||||
"annual_report.announcement.action_build": "בנה לי את הסיכומודון שלי",
|
||||
"annual_report.announcement.action_dismiss": "לא תודה",
|
||||
"annual_report.announcement.action_view": "לצפייה בסיכומודון שלי",
|
||||
"annual_report.announcement.description": "ללמוד עוד על דבפוסי השימוש שלך במסטודון לאורך השנה החולפת.",
|
||||
"annual_report.announcement.title": "סיכומודון {year} הגיע",
|
||||
"annual_report.summary.archetype.booster": "ההד-וניסט(ית)",
|
||||
"annual_report.summary.archetype.lurker": "השורץ.ת השקט.ה",
|
||||
"annual_report.summary.archetype.oracle": "כבוד הרב.ה",
|
||||
"annual_report.summary.archetype.pollster": "הסקרן.ית",
|
||||
"annual_report.summary.archetype.replier": "הפרפר.ית החברתי.ת",
|
||||
"annual_report.summary.followers.followers": "עוקבים",
|
||||
"annual_report.summary.followers.total": "{count} בסך הכל",
|
||||
"annual_report.summary.here_it_is": "והנה סיכום {year} שלך:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "התות הכי מחובב",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "התות הכי מהודהד",
|
||||
"annual_report.summary.highlighted_post.by_replies": "התות עם מספר התשובות הגבוה ביותר",
|
||||
"annual_report.summary.highlighted_post.possessive": "של {name}",
|
||||
"annual_report.nav_item.badge": "חדש",
|
||||
"annual_report.shared_page.donate": "לתרומה",
|
||||
"annual_report.shared_page.footer": "נוצר עם כל ה-{heart} על ידי צוות מסטודון",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} צדו הודעות מעניינות להדהד, והגבירו קולותיהם של יוצרים אחרים בדיוק של חתול המזנק על הטרף.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "צדת הודעות מעניינות להדהד, והגברת קולותיהם של יוצרים אחרים בדיוק של חתול המזנק על הטרף.",
|
||||
"annual_report.summary.archetype.booster.name": "החתול הצייד",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "למיטב ידיעתנו {name} היו שם, איפשהוא, נהנים ממסטודון בדרכם השקטה.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "למיטב ידיעתנו היית שם, איפשהוא, נהנית ממסטודון בדרכך השקטה.",
|
||||
"annual_report.summary.archetype.lurker.name": "הסטואי.ת",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} יצרו יותר הודעות מאשר תגובות, ושמרו על מסטודון רעננה ועם פנים לעתיד.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "יצרת יותר הודעות מאשר תגובות, ושמרת על מסטודון רעננה ועם פנים לעתיד.",
|
||||
"annual_report.summary.archetype.oracle.name": "כבוד הרב.ה",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} יצרו יותר סקרים מאשר כל סוג הודעה אחר, וכך הרבו סקרנות במסטודון.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "יצרת יותר סקרים מאשר כל סוג הודעה אחר, וכך הרבת סקרנות במסטודון.",
|
||||
"annual_report.summary.archetype.pollster.name": "התוהה",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} ענו תכופות לאחרים, והפרו את מסטודון בדיונים חדשים.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "ענית תכופות לאחרים, והפרית את מסטודון בדיונים חדשים.",
|
||||
"annual_report.summary.archetype.replier.name": "הפרפר",
|
||||
"annual_report.summary.archetype.reveal": "גלו את הארכיטיפ שלכם",
|
||||
"annual_report.summary.archetype.reveal_description": "תודה שאתם חלק ממסטודון! הגיע הזמן לגלות מה הארכיטיפ שגילמתן בשנת {year}.",
|
||||
"annual_report.summary.archetype.title_public": "הארכיטיפ של {name}",
|
||||
"annual_report.summary.archetype.title_self": "הארכיטיפ שלך",
|
||||
"annual_report.summary.close": "סגירה",
|
||||
"annual_report.summary.copy_link": "העתק קישור",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural,one {עוקב חדש} other {עוקבים חדשים}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "הודעה זו הודהדה {count, plural,one {פעם אחת}other {# פעמים}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "הודעה זו חובבה {count, plural,one {פעם אחת}other {# פעמים}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "הודעה זו נענתה על ידי {count, plural,one {תגובה אחת}other {# תגובות}}.",
|
||||
"annual_report.summary.highlighted_post.title": "ההודעה הפופולרית ביותר",
|
||||
"annual_report.summary.most_used_app.most_used_app": "היישומון שהכי בשימוש",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "התג בשימוש הרב ביותר",
|
||||
"annual_report.summary.most_used_hashtag.none": "אף אחד",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "כללת את התגית הזו {count, plural,one {בהודעה אחת}other {ב-# הודעות}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} כללו את התגית {count, plural,one {בהודעה אחת}other {ב־# הודעות}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "הודעות חדשות",
|
||||
"annual_report.summary.percentile.text": "<topLabel>ממקם אותך באחוזון </topLabel><percentage></percentage><bottomLabel>של משמשי {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "לא נגלה לברני.",
|
||||
"annual_report.summary.share_elsewhere": "שיתוף במקום אחר",
|
||||
"annual_report.summary.share_message": "זוהיתי כדוגמא לטיפוס {archetype}!",
|
||||
"annual_report.summary.thanks": "תודה על היותך חלק ממסטודון!",
|
||||
"annual_report.summary.share_on_mastodon": "לשתף במסטודון",
|
||||
"attachments_list.unprocessed": "(לא מעובד)",
|
||||
"audio.hide": "השתק",
|
||||
"block_modal.remote_users_caveat": "אנו נבקש מהשרת {domain} לכבד את החלטתך. עם זאת, ציות למוסכמות איננו מובטח כיוון ששרתים מסויימים עשויים לטפל בחסימות בצורה אחרת. הודעות פומביות עדיין יהיו גלויות לעיני משתמשים שאינם מחוברים.",
|
||||
|
||||
@@ -114,28 +114,51 @@
|
||||
"alt_text_modal.done": "Kész",
|
||||
"announcement.announcement": "Közlemény",
|
||||
"annual_report.announcement.action_build": "Saját Wrapstodon összeállítása",
|
||||
"annual_report.announcement.action_dismiss": "Nem, köszönöm",
|
||||
"annual_report.announcement.action_view": "Saját Wrapstodon megtekintése",
|
||||
"annual_report.announcement.description": "Fedezz fel többet a Mastodonon az elmúlt évben végzett tevékenységeidről.",
|
||||
"annual_report.announcement.title": "A Wrapstodon {year} megérkezett",
|
||||
"annual_report.summary.archetype.booster": "A cool-vadász",
|
||||
"annual_report.summary.archetype.lurker": "A settenkedő",
|
||||
"annual_report.summary.archetype.oracle": "Az orákulum",
|
||||
"annual_report.summary.archetype.pollster": "A közvélemény-kutató",
|
||||
"annual_report.summary.archetype.replier": "A társasági pillangó",
|
||||
"annual_report.summary.followers.followers": "követő",
|
||||
"annual_report.summary.followers.total": "{count} összesen",
|
||||
"annual_report.summary.here_it_is": "Itt a {year}. év értékelése:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "legkedvencebb bejegyzés",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "legtöbbet megtolt bejegyzés",
|
||||
"annual_report.summary.highlighted_post.by_replies": "bejegyzés a legtöbb válasszal",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name} fióktól",
|
||||
"annual_report.nav_item.badge": "Új",
|
||||
"annual_report.shared_page.donate": "Adományozás",
|
||||
"annual_report.shared_page.footer": "A Mastodon által {heart}-tel előállítva",
|
||||
"annual_report.shared_page.footer_server_info": "{username} a {domain} domaint használja, amely a Mastodon által működtetett számos közösség egyike.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} megtolandó bejegyzésekre vadászott, tökéletes célzással felerősítve mások üzeneteit.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Megtolandó bejegyzésekre vadásztál, tökéletes célzással felerősítve mások üzeneteit.",
|
||||
"annual_report.summary.archetype.booster.name": "Az íjász",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Tudjuk, hogy {name} ott volt, valahol, a saját csendes módján élvezve a Mastodont.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Tudjuk, hogy ott voltál, valahol, a saját csendes módodon élvezve a Mastodont.",
|
||||
"annual_report.summary.archetype.lurker.name": "A sztoikus",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} több bejegyzést hozott létre, mint választ, így a Mastodon friss és jövőbe tekintő marad.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Több bejegyzést hoztál létre, mint választ, így a Mastodon friss és jövőbe tekintő marad.",
|
||||
"annual_report.summary.archetype.oracle.name": "Az orákulum",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} több szavazást hozott létre, mint bármilyen más bejegyzést, ezzel támogatva a kíváncsiságot a Mastodonon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Több szavazást hoztál létre, mint bármilyen más bejegyzést, ezzel támogatva a kíváncsiságot a Mastodonon.",
|
||||
"annual_report.summary.archetype.pollster.name": "A csodálkozó",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} gyakran válaszolt más emberek bejegyzéseire, új témákat porozva be a Mastodonon.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Gyakran válaszoltál más emberek bejegyzéseire, új témákat porozva be a Mastodonon.",
|
||||
"annual_report.summary.archetype.replier.name": "A pillangó",
|
||||
"annual_report.summary.archetype.reveal": "Saját archetípus felfedése",
|
||||
"annual_report.summary.archetype.reveal_description": "Köszönjük, hogy a Mastodon része vagy! Tudj meg többet az archetípusodról {year} évében.",
|
||||
"annual_report.summary.archetype.title_public": "{name} archetípusa",
|
||||
"annual_report.summary.archetype.title_self": "Saját archetípus",
|
||||
"annual_report.summary.close": "Bezárás",
|
||||
"annual_report.summary.copy_link": "Hivatkozás másolása",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {új követő} other {új követők}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Ez a bejegyzés {count, plural, one {egyszer} other {# alkalommal}} volt megtolva.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Ez a bejegyzés {count, plural, one {egyszer} other {# alkalommal}} volt kedvencnek jelölve.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Ez a bejegyzés {count, plural, one {egy választ} other {# választ}} kapott.",
|
||||
"annual_report.summary.highlighted_post.title": "Legnépszerűbb bejegyzés",
|
||||
"annual_report.summary.most_used_app.most_used_app": "legtöbbet használt app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "legtöbbet használt hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nincs",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Ez a hashtag {count, plural, one {egy bejegyzésedben} other {# bejegyzésedben}} szerepel.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} {count, plural, one {egy bejegyzésében} other {# bejegyzésében}} használta ezt a hashtaget.",
|
||||
"annual_report.summary.new_posts.new_posts": "új bejegyzés",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Ezzel a csúcs</topLabel><percentage></percentage><bottomLabel>{domain} felhasználó között vagy.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Nem mondjuk el Bernie-nek.",
|
||||
"annual_report.summary.thanks": "Kösz, hogy a Mastodon része vagy!",
|
||||
"annual_report.summary.share_elsewhere": "Megosztás máshol",
|
||||
"annual_report.summary.share_message": "{archetype} lett az archetípusom!",
|
||||
"annual_report.summary.share_on_mastodon": "Megosztás a Mastodonon",
|
||||
"attachments_list.unprocessed": "(feldolgozatlan)",
|
||||
"audio.hide": "Hang elrejtése",
|
||||
"block_modal.remote_users_caveat": "Arra kérjük a {domain} kiszolgálót, hogy tartsa tiszteletben a döntésedet. Ugyanakkor az együttműködés nem garantált, mivel néhány kiszolgáló másképp kezelheti a letiltásokat. A nyilvános bejegyzések a be nem jelentkezett felhasználók számára továbbra is látszódhatnak.",
|
||||
@@ -418,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Kit érdemes követni",
|
||||
"followed_tags": "Követett hashtagek",
|
||||
"footer.about": "Névjegy",
|
||||
"footer.about_mastodon": "A Mastodonról",
|
||||
"footer.about_server": "A {domain} domainről",
|
||||
"footer.about_this_server": "Névjegy",
|
||||
"footer.directory": "Profiltár",
|
||||
"footer.get_app": "Alkalmazás beszerzése",
|
||||
|
||||
@@ -113,25 +113,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Describe isto pro personas con impedimentos visual…",
|
||||
"alt_text_modal.done": "Preste",
|
||||
"announcement.announcement": "Annuncio",
|
||||
"annual_report.summary.archetype.booster": "Le impulsator",
|
||||
"annual_report.summary.archetype.lurker": "Le lector",
|
||||
"annual_report.summary.archetype.oracle": "Le oraculo",
|
||||
"annual_report.summary.archetype.pollster": "Le sondagista",
|
||||
"annual_report.summary.archetype.replier": "Le responditor",
|
||||
"annual_report.summary.followers.followers": "sequitores",
|
||||
"annual_report.summary.followers.total": "{count} in total",
|
||||
"annual_report.summary.here_it_is": "Ecce tu summario de {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "message le plus favorite",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "message le plus impulsate",
|
||||
"annual_report.summary.highlighted_post.by_replies": "message le plus respondite",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}, ecce tu…",
|
||||
"annual_report.summary.most_used_app.most_used_app": "application le plus usate",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus usate",
|
||||
"annual_report.summary.most_used_hashtag.none": "Necun",
|
||||
"annual_report.summary.new_posts.new_posts": "nove messages",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Isto te pone in le prime</topLabel><percentage></percentage><bottomLabel>usatores de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Tu es un primo inter pares.",
|
||||
"annual_report.summary.thanks": "Gratias pro facer parte de Mastodon!",
|
||||
"attachments_list.unprocessed": "(non processate)",
|
||||
"audio.hide": "Celar audio",
|
||||
"block_modal.remote_users_caveat": "Nos demandera al servitor {domain} de respectar tu decision. Nonobstante, le conformitate non es garantite perque alcun servitores pote tractar le blocadas de maniera differente. Le messages public pote esser totevia visibile pro le usatores non authenticate.",
|
||||
|
||||
@@ -90,25 +90,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Priskribar co por personi kun viddeskapableso…",
|
||||
"alt_text_modal.done": "Finis",
|
||||
"announcement.announcement": "Anunco",
|
||||
"annual_report.summary.archetype.booster": "La plurrepetanto",
|
||||
"annual_report.summary.archetype.lurker": "La plurcelanto",
|
||||
"annual_report.summary.archetype.oracle": "La pluraktivo",
|
||||
"annual_report.summary.archetype.pollster": "La votinquestoiganto",
|
||||
"annual_report.summary.archetype.replier": "La plurrespondanto",
|
||||
"annual_report.summary.followers.followers": "sequanti",
|
||||
"annual_report.summary.followers.total": "{count} sumo",
|
||||
"annual_report.summary.here_it_is": "Caibe es vua rivido ye {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "maxim prizita mesajo",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "maxim repetita mesajo",
|
||||
"annual_report.summary.highlighted_post.by_replies": "mesajo kun la maxim multa respondi",
|
||||
"annual_report.summary.highlighted_post.possessive": "di {name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "maxim uzita aplikajo",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "maxim uzita gretvorto",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nulo",
|
||||
"annual_report.summary.new_posts.new_posts": "nova afishi",
|
||||
"annual_report.summary.percentile.text": "<topLabel>To pozas vu sur la supro </topLabel><percentage></percentage><bottomLabel>di uzanti di {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ni ne dicas ad Bernio.",
|
||||
"annual_report.summary.thanks": "Danki por partoprenar sur Mastodon!",
|
||||
"attachments_list.unprocessed": "(neprocedita)",
|
||||
"audio.hide": "Celez audio",
|
||||
"block_modal.remote_users_caveat": "Ni questionos {domain} di la servilo por respektar vua decido. Publika posti forsan ankore estas videbla a neenirinta uzanti.",
|
||||
|
||||
@@ -113,30 +113,52 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Lýstu þessu fyrir fólk með skerta sjón…",
|
||||
"alt_text_modal.done": "Lokið",
|
||||
"announcement.announcement": "Auglýsing",
|
||||
"annual_report.announcement.action_build": "Byggja Wrapstodon fyrir mig",
|
||||
"annual_report.announcement.action_view": "Skoða minn Wrapstodon",
|
||||
"annual_report.announcement.action_build": "Búa til ársuppgjör fyrir mig",
|
||||
"annual_report.announcement.action_dismiss": "Nei takk",
|
||||
"annual_report.announcement.action_view": "Skoða ársuppgjörið mitt",
|
||||
"annual_report.announcement.description": "Skoðaðu meira um virkni þína á Mastodon á síðastliðnu ári.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} er komið",
|
||||
"annual_report.summary.archetype.booster": "Svali gaurinn",
|
||||
"annual_report.summary.archetype.lurker": "Lurkurinn",
|
||||
"annual_report.summary.archetype.oracle": "Völvan",
|
||||
"annual_report.summary.archetype.pollster": "Kannanafíkillinn",
|
||||
"annual_report.summary.archetype.replier": "Félagsveran",
|
||||
"annual_report.summary.followers.followers": "fylgjendur",
|
||||
"annual_report.summary.followers.total": "{count} alls",
|
||||
"annual_report.summary.here_it_is": "Hér er yfirlitið þitt fyrir {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "færsla sett oftast í eftirlæti",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "færsla oftast endurbirt",
|
||||
"annual_report.summary.highlighted_post.by_replies": "færsla með flestum svörum",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.announcement.title": "Ársuppgjörið {year} er komið",
|
||||
"annual_report.nav_item.badge": "Nýtt",
|
||||
"annual_report.shared_page.donate": "Styrkja",
|
||||
"annual_report.shared_page.footer": "{heart}-kveðjur frá Mastodon-teyminu",
|
||||
"annual_report.shared_page.footer_server_info": "{username} notar {domain}, einu af samfélögunum sem Mastodon drífur.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} var á höttunum eftir færslum til að endurbirta og hitti þannig í mark með að magna upp það sem aðrir voru að gera.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Þú varst á höttunum eftir færslum til að endurbirta og hittir þannig í mark með að magna upp það sem aðrir voru að gera.",
|
||||
"annual_report.summary.archetype.booster.name": "Veiðmaðurinn",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Við vitum að {name} var þarna úti, einhversstaðar, að njóta Mastodon á sínum eigin hljóðlátu forsendum.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Við vitum að þú varst þarna úti, einhversstaðar, að njóta Mastodon á þínum eigin hljóðlátu forsendum.",
|
||||
"annual_report.summary.archetype.lurker.name": "Heimspekingurinn",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} útbjó fleiri færslur en svör og hélt þannig Mastodon fersku og vísandi til framtíðar.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Þú útbjóst fleiri færslur en svör og hélst þannig Mastodon fersku og vísandi til framtíðar.",
|
||||
"annual_report.summary.archetype.oracle.name": "Völvan",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} útbjó fleiri kannanir en aðrar gerðir af færslum og ræktaði þannig forvitni á ökrum Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Þú útbjóst fleiri kannanir en aðrar gerðir af færslum og ræktaðir þannig forvitni á ökrum Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "Könnuðurinn",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} svaraði oft færslum annara og frjóvgaði Mastodon með nýjum samræðum.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Þú svaraðir oft færslum annara og frjóvgaðir Mastodon með nýjum samræðum.",
|
||||
"annual_report.summary.archetype.replier.name": "Fiðrildið",
|
||||
"annual_report.summary.archetype.reveal": "Uppljóstra um erkitýpuna mína",
|
||||
"annual_report.summary.archetype.reveal_description": "Takk fyrir að vera hluti af Mastodon! Nú er tíminn til að sjá hvaða erkitýpu þú líktist árið {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Erkitýpan fyrir {name}",
|
||||
"annual_report.summary.archetype.title_self": "Erkitýpan þín",
|
||||
"annual_report.summary.close": "Loka",
|
||||
"annual_report.summary.copy_link": "Afrita tengil",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {nýr fylgjandi} other {nýir fylgjendur}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Þessi færsla var endurbirt {count, plural, one {einu sinni} other {# sinnum}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Þessi færsla var sett í eftirlæti {count, plural, one {einu sinni} other {# sinnum}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Þessi færsla fékk {count, plural, one {eitt svar} other {# svör}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Vinsælasta færslan",
|
||||
"annual_report.summary.most_used_app.most_used_app": "mest notaða forrit",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest notaða myllumerki",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ekkert",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Þú hafðir þetta myllumerki með í {count, plural, one {einni færslu} other {# færslum}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} hafði þetta myllumerki með í {count, plural, one {einni færslu} other {# færslum}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nýjar færslur",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Þetta setur þig á meðal</topLabel><percentage></percentage><bottomLabel>of {domain} virkustu notendanna.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Við förum ekkert að raupa um þetta.",
|
||||
"annual_report.summary.share_elsewhere": "Deila annarsstaðar",
|
||||
"annual_report.summary.share_message": "Ég er víst {archetype}-týpan!",
|
||||
"annual_report.summary.thanks": "Takk fyrir að vera hluti af Mastodon-samfélaginu!",
|
||||
"annual_report.summary.share_on_mastodon": "Deila á Mastodon",
|
||||
"attachments_list.unprocessed": "(óunnið)",
|
||||
"audio.hide": "Fela hljóð",
|
||||
"block_modal.remote_users_caveat": "Við munum biðja {domain} netþjóninn um að virða ákvörðun þína. Hitt er svo annað mál hvort hann fari eftir þessu, ekki er hægt að tryggja eftirfylgni því sumir netþjónar meðhöndla útilokanir á sinn hátt. Opinberar færslur gætu verið sýnilegar notendum sem ekki eru skráðir inn.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Hverjum á að fylgjast með",
|
||||
"followed_tags": "Vöktuð myllumerki",
|
||||
"footer.about": "Nánari upplýsingar",
|
||||
"footer.about_mastodon": "Um Mastodon",
|
||||
"footer.about_server": "Um {domain}",
|
||||
"footer.about_this_server": "Nánari upplýsingar",
|
||||
"footer.directory": "Notandasniðamappa",
|
||||
"footer.get_app": "Ná í forritið",
|
||||
@@ -614,8 +638,8 @@
|
||||
"notification.admin.report_statuses_other": "{name} kærði {target}",
|
||||
"notification.admin.sign_up": "{name} skráði sig",
|
||||
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# í viðbót hefur} other {# í viðbót hafa}} skráð sig",
|
||||
"notification.annual_report.message": "{year} á #Wrapstodon bíður! Afhjúpaðu hvað bar hæst á árinu og minnistæðustu augnablikin á Mastodon!",
|
||||
"notification.annual_report.view": "Skoða #Wrapstodon",
|
||||
"notification.annual_report.message": "Ársuppgjörið {year} bíður á #Wrapstodon! Afhjúpaðu hvað bar hæst á árinu og minnistæðustu augnablikin á Mastodon!",
|
||||
"notification.annual_report.view": "Skoða ársuppgjör á #Wrapstodon",
|
||||
"notification.favourite": "{name} setti færsluna þína í eftirlæti",
|
||||
"notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# í viðbót hefur} other {# í viðbót hafa}}</a> sett færsluna þína í eftirlæti",
|
||||
"notification.favourite_pm": "{name} setti í eftirlæti færslu í einkaspjalli þar sem þú minntist á viðkomandi",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"account.edit_profile_short": "Modifica",
|
||||
"account.enable_notifications": "Avvisami quando @{name} pubblica un post",
|
||||
"account.endorse": "In evidenza sul profilo",
|
||||
"account.familiar_followers_many": "Seguito da {name1}, {name2}, e {othersCount, plural, one {un altro che conosci} other {# altri che conosci}}",
|
||||
"account.familiar_followers_many": "Seguito da {name1}, {name2}, e {othersCount, plural, one {un altro che conosci} other {altri # che conosci}}",
|
||||
"account.familiar_followers_one": "Seguito da {name1}",
|
||||
"account.familiar_followers_two": "Seguito da {name1} e {name2}",
|
||||
"account.featured": "In primo piano",
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Fatto",
|
||||
"announcement.announcement": "Annuncio",
|
||||
"annual_report.announcement.action_build": "Costruisci il mio Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "No, grazie",
|
||||
"annual_report.announcement.action_view": "Visualizza il mio Wrapstodon",
|
||||
"annual_report.announcement.description": "Scopri di più sul tuo coinvolgimento su Mastodon nell'ultimo anno.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} è arrivato",
|
||||
"annual_report.summary.archetype.booster": "Cacciatore/trice di tendenze",
|
||||
"annual_report.summary.archetype.lurker": "L'osservatore/trice",
|
||||
"annual_report.summary.archetype.oracle": "L'oracolo",
|
||||
"annual_report.summary.archetype.pollster": "Sondaggista",
|
||||
"annual_report.summary.archetype.replier": "Utente socievole",
|
||||
"annual_report.summary.followers.followers": "seguaci",
|
||||
"annual_report.summary.followers.total": "{count} in totale",
|
||||
"annual_report.summary.here_it_is": "Ecco il tuo {year} in sintesi:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "il post più apprezzato",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "il post più condiviso",
|
||||
"annual_report.summary.highlighted_post.by_replies": "il post con più risposte",
|
||||
"annual_report.summary.highlighted_post.possessive": "di {name}",
|
||||
"annual_report.nav_item.badge": "Nuovo",
|
||||
"annual_report.shared_page.donate": "Dona",
|
||||
"annual_report.shared_page.footer": "Generato con {heart} dal team di Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} usa {domain}, una delle tante comunità basate su Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} è rimasto/a alla ricerca di post da condividere, amplificando il lavoro di altri creatori con precisione mirata.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Sei rimasto/a alla ricerca di post da condividere, amplificando il lavoro di altri creatori con precisione mirata.",
|
||||
"annual_report.summary.archetype.booster.name": "L'Arciere",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Sappiamo che {name} era là fuori, da qualche parte, a godersi Mastodon in tutta tranquillità.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Sappiamo che eri là fuori, da qualche parte, a goderti Mastodon in tutta tranquillità.",
|
||||
"annual_report.summary.archetype.lurker.name": "Lo Stoico",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} ha creato più nuovi post che risposte, mantenendo Mastodon fresco e orientato al futuro.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Hai creato più nuovi post che risposte, mantenendo Mastodon fresco e orientato al futuro.",
|
||||
"annual_report.summary.archetype.oracle.name": "L'Oracolo",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} ha creato più sondaggi rispetto ad altri tipi di post, alimentando la curiosità su Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Hai creato più sondaggi rispetto ad altri tipi di post, alimentando la curiosità su Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "L'Esploratore",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} ha frequentemente risposto ai post di altre persone, alimentando Mastodon con nuove discussioni.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Hai frequentemente risposto ai post di altre persone, alimentando Mastodon con nuove discussioni.",
|
||||
"annual_report.summary.archetype.replier.name": "La Farfalla",
|
||||
"annual_report.summary.archetype.reveal": "Rivela il mio archetipo",
|
||||
"annual_report.summary.archetype.reveal_description": "Grazie per far parte di Mastodon! È il momento di scoprire quale archetipo hai incarnato nel {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Archetipo di {name}",
|
||||
"annual_report.summary.archetype.title_self": "Il tuo archetipo",
|
||||
"annual_report.summary.close": "Chiudi",
|
||||
"annual_report.summary.copy_link": "Copia il сollegamento",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {nuovo seguace} other {nuovi seguaci}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Questo post è stato condiviso {count, plural, one {1 volta} other {# volte}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Questo post è stato aggiunto ai preferiti {count, plural, one {1 volta} other {# volte}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Questo post ha ricevuto {count, plural, one {1 risposta} other {# risposte}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Il post più popolare",
|
||||
"annual_report.summary.most_used_app.most_used_app": "l'app più utilizzata",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "l'hashtag più usato",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nessuno",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Hai incluso questo hashtag in {count, plural, one {1 post} other {# post}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} ha incluso questo hashtag in {count, plural, one {1 post} other {# post}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "nuovi post",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Ciò ti colloca in cima</topLabel><percentage></percentage><bottomLabel>agli utenti di {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Non lo diremo a Bernie.",
|
||||
"annual_report.summary.share_elsewhere": "Condividi altrove",
|
||||
"annual_report.summary.share_message": "Ho ottenuto l'archetipo: {archetype}!",
|
||||
"annual_report.summary.thanks": "Grazie per far parte di Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Condividi su Mastodon",
|
||||
"attachments_list.unprocessed": "(non elaborato)",
|
||||
"audio.hide": "Nascondi audio",
|
||||
"block_modal.remote_users_caveat": "Chiederemo al server {domain} di rispettare la tua decisione. Tuttavia, la conformità non è garantita poiché alcuni server potrebbero gestire i blocchi in modo diverso. I post pubblici potrebbero essere ancora visibili agli utenti che non hanno effettuato l'accesso.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Chi seguire",
|
||||
"followed_tags": "Hashtag seguiti",
|
||||
"footer.about": "Info",
|
||||
"footer.about_mastodon": "Riguardo Mastodon",
|
||||
"footer.about_server": "Riguardo {domain}",
|
||||
"footer.about_this_server": "Info",
|
||||
"footer.directory": "Cartella dei profili",
|
||||
"footer.get_app": "Scarica l'app",
|
||||
|
||||
@@ -113,25 +113,16 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "目が不自由な方のために説明してください…",
|
||||
"alt_text_modal.done": "完了",
|
||||
"announcement.announcement": "お知らせ",
|
||||
"annual_report.summary.archetype.booster": "トレンドハンター",
|
||||
"annual_report.summary.archetype.lurker": "ROM専",
|
||||
"annual_report.summary.archetype.oracle": "予言者",
|
||||
"annual_report.summary.archetype.pollster": "調査員",
|
||||
"annual_report.summary.archetype.replier": "社交家",
|
||||
"annual_report.summary.followers.followers": "フォロワー",
|
||||
"annual_report.summary.followers.total": "合計{count}",
|
||||
"annual_report.summary.here_it_is": "こちらがあなたの{year}年の振り返りです",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "最もお気に入りされた投稿",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "最もブーストされた投稿",
|
||||
"annual_report.summary.highlighted_post.by_replies": "最も返信が多かった投稿",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}の",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, other {新しいフォロワー}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "この投稿は {count, plural, other {# 回}}ブーストされました。",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "この投稿は {count, plural, other {# 回}}お気に入りされました。",
|
||||
"annual_report.summary.highlighted_post.title": "最も人気のある投稿",
|
||||
"annual_report.summary.most_used_app.most_used_app": "最も使用されているアプリ",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "最も使用されたハッシュタグ",
|
||||
"annual_report.summary.most_used_hashtag.none": "なし",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "あなたはこのハッシュタグを {count, plural, other {# 件の投稿}}に含めました。",
|
||||
"annual_report.summary.new_posts.new_posts": "新しい投稿",
|
||||
"annual_report.summary.percentile.text": "<topLabel>{domain}で 上位</topLabel><percentage></percentage><bottomLabel>に入ります!</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "バー二ーには秘密にしておくよ。",
|
||||
"annual_report.summary.thanks": "Mastodonの一員になってくれてありがとう!",
|
||||
"attachments_list.unprocessed": "(未処理)",
|
||||
"audio.hide": "音声を閉じる",
|
||||
"block_modal.remote_users_caveat": "このサーバーはあなたのブロックの意思を尊重するように {domain} へ通知します。しかし、サーバーによってはブロック機能の扱いが異なる場合もありえるため、相手のサーバー側で求める通りの処理が行われる確証はありません。また、公開投稿はユーザーがログアウト状態であれば閲覧できる可能性があります。",
|
||||
|
||||
@@ -92,13 +92,9 @@
|
||||
"alt_text_modal.cancel": "Semmet",
|
||||
"alt_text_modal.done": "Immed",
|
||||
"announcement.announcement": "Ulɣu",
|
||||
"annual_report.summary.followers.followers": "imeḍfaṛen",
|
||||
"annual_report.summary.followers.total": "{count} deg aɣrud",
|
||||
"annual_report.summary.most_used_app.most_used_app": "asnas yettwasqedcen s waṭas",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ula yiwen",
|
||||
"annual_report.summary.new_posts.new_posts": "tisuffaɣ timaynutin",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ur as-neqqar i yiwen.",
|
||||
"annual_report.summary.thanks": "Tanemmirt imi i tettekkiḍ deg Mastodon!",
|
||||
"audio.hide": "Ffer amesli",
|
||||
"block_modal.show_less": "Ssken-d drus",
|
||||
"block_modal.show_more": "Ssken-d ugar",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"about.domain_blocks.silenced.title": "Шектеулі",
|
||||
"about.domain_blocks.suspended.explanation": "Бұл сервердің деректері өңделмейді, сақталмайды және айырбасталмайды, сондықтан бұл сервердің қолданушыларымен кез келген әрекеттесу немесе байланыс мүмкін емес.",
|
||||
"about.domain_blocks.suspended.title": "Тоқтатылған",
|
||||
"about.language_label": "Тіл",
|
||||
"about.not_available": "Бұл ақпарат бұл серверде қолжетімді емес.",
|
||||
"about.powered_by": "{mastodon} негізіндегі орталықсыз әлеуметтік желі",
|
||||
"about.rules": "Сервер ережелері",
|
||||
@@ -19,11 +20,13 @@
|
||||
"account.block_domain": "{domain} доменін бұғаттау",
|
||||
"account.block_short": "Бұғаттау",
|
||||
"account.blocked": "Бұғатталған",
|
||||
"account.blocking": "Бұғаттау",
|
||||
"account.cancel_follow_request": "Withdraw follow request",
|
||||
"account.direct": "@{name} жеке айту",
|
||||
"account.disable_notifications": "@{name} постары туралы ескертпеу",
|
||||
"account.domain_blocking": "Доменді бұғаттау",
|
||||
"account.edit_profile": "Профильді өңдеу",
|
||||
"account.edit_profile_short": "Түзеу",
|
||||
"account.enable_notifications": "@{name} постары туралы ескерту",
|
||||
"account.endorse": "Профильде ұсыну",
|
||||
"account.familiar_followers_many": "{name1}, {name2} және {othersCount, plural, one {сіз білетін тағы бір адам} other {сіз білетін тағы # адам}} жазылған",
|
||||
@@ -91,7 +94,11 @@
|
||||
"alert.rate_limited.title": "Бағалау шектеулі",
|
||||
"alert.unexpected.message": "Бір нәрсе дұрыс болмады.",
|
||||
"alert.unexpected.title": "Өй!",
|
||||
"alt_text_badge.title": "Балама мазмұны",
|
||||
"alt_text_modal.add_alt_text": "Балама мазмұнды қосу",
|
||||
"alt_text_modal.done": "Дайын",
|
||||
"announcement.announcement": "Хабарландыру",
|
||||
"annual_report.summary.close": "Жабу",
|
||||
"boost_modal.combo": "Келесіде өткізіп жіберу үшін басыңыз {combo}",
|
||||
"bundle_column_error.retry": "Қайтадан көріңіз",
|
||||
"bundle_modal_error.close": "Жабу",
|
||||
|
||||
@@ -113,25 +113,38 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "시각 장애가 있는 사람들을 위한 설명을 작성하세요…",
|
||||
"alt_text_modal.done": "완료",
|
||||
"announcement.announcement": "공지사항",
|
||||
"annual_report.summary.archetype.booster": "연쇄부스트마",
|
||||
"annual_report.summary.archetype.lurker": "은둔자",
|
||||
"annual_report.summary.archetype.oracle": "예언자",
|
||||
"annual_report.summary.archetype.pollster": "여론조사원",
|
||||
"annual_report.summary.archetype.replier": "답글나비",
|
||||
"annual_report.summary.followers.followers": "팔로워",
|
||||
"annual_report.summary.followers.total": "총 {count}",
|
||||
"annual_report.summary.here_it_is": "{year}년 결산입니다:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "가장 많은 좋아요를 받은 게시물",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "가장 많이 부스트된 게시물",
|
||||
"annual_report.summary.highlighted_post.by_replies": "가장 많은 답글을 받은 게시물",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name} 님의",
|
||||
"annual_report.announcement.action_build": "랩스토돈 만들기",
|
||||
"annual_report.announcement.action_view": "랩스토돈 보기",
|
||||
"annual_report.announcement.title": "{year} 랩스토돈이 도착했습니다",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} 님은 부스트할 게시물을 기다리고 정확한 조준으로 다른 제작자들을 밀어주었습니다.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "당신은 부스트할 게시물을 기다리고 정확한 조준으로 다른 제작자들을 밀어주었습니다.",
|
||||
"annual_report.summary.archetype.booster.name": "궁수",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.name": "금욕주의자",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} 님은 답글보다 새로운 글을 많이 작성해 마스토돈을 신선하고 미래지향적으로 만들었습니다.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "당신은 답글보다 새로운 글을 많이 작성해 마스토돈을 신선하고 미래지향적으로 만들었습니다.",
|
||||
"annual_report.summary.archetype.oracle.name": "예언자",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} 님은 다른 게시물보다 투표를 많이 만들었고 마스토돈에서 호기심을 일궈냈습니다.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "당신은 다른 게시물보다 투표를 많이 만들었고 마스토돈에서 호기심을 일궈냈습니다.",
|
||||
"annual_report.summary.archetype.pollster.name": "호기심쟁이",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} 님은 다른 사람의 게시물에 자주 답글을 남겨 마스토돈에 새로운 논의거리를 만들어냈습니다.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "당신은 다른 사람의 게시물에 자주 답글을 남겨 마스토돈에 새로운 논의거리를 만들어냈습니다.",
|
||||
"annual_report.summary.archetype.replier.name": "나비",
|
||||
"annual_report.summary.archetype.reveal": "내 특성을 확인합니다",
|
||||
"annual_report.summary.archetype.reveal_description": "마스토돈의 일원이 되어주셔서 감사합니다! {year} 년엔 어떤 특성을 부여받는지 알아봅시다.",
|
||||
"annual_report.summary.archetype.title_public": "{name} 님의 특성",
|
||||
"annual_report.summary.archetype.title_self": "당신의 특성",
|
||||
"annual_report.summary.close": "닫기",
|
||||
"annual_report.summary.highlighted_post.boost_count": "이 게시물은 {count, plural,other {# 번}} 부스트되었습니다.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "이 게시물은 {count, plural,other {# 번}} 마음에 들었습니다.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "이 게시물은 {count, plural, other {# 개}}의 답글을 받았습니다.",
|
||||
"annual_report.summary.highlighted_post.title": "가장 인기있는 게시물",
|
||||
"annual_report.summary.most_used_app.most_used_app": "가장 많이 사용한 앱",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "가장 많이 사용한 해시태그",
|
||||
"annual_report.summary.most_used_hashtag.none": "없음",
|
||||
"annual_report.summary.new_posts.new_posts": "새 게시물",
|
||||
"annual_report.summary.percentile.text": "<topLabel>{domain} 사용자의 상위</topLabel><percentage></percentage><bottomLabel>입니다.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "종부세는 안 걷을게요",
|
||||
"annual_report.summary.thanks": "마스토돈과 함께 해주셔서 감사합니다!",
|
||||
"annual_report.summary.share_message": "나는 {archetype} 특성을 부여받았습니다!",
|
||||
"attachments_list.unprocessed": "(처리 안 됨)",
|
||||
"audio.hide": "소리 숨기기",
|
||||
"block_modal.remote_users_caveat": "우리는 {domain} 서버가 당신의 결정을 존중해 주길 부탁할 것입니다. 하지만 몇몇 서버는 차단을 다르게 취급할 수 있기 때문에 규정이 준수되는 것을 보장할 수는 없습니다. 공개 게시물은 로그인 하지 않은 사용자들에게 여전히 보여질 수 있습니다.",
|
||||
@@ -513,6 +526,7 @@
|
||||
"keyboard_shortcuts.toggle_hidden": "CW로 가려진 텍스트를 표시/비표시",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "미디어 보이기/숨기기",
|
||||
"keyboard_shortcuts.toot": "새 게시물 작성",
|
||||
"keyboard_shortcuts.top": "목록의 최상단으로 이동",
|
||||
"keyboard_shortcuts.translate": "게시물 번역",
|
||||
"keyboard_shortcuts.unfocus": "작성창에서 포커스 해제",
|
||||
"keyboard_shortcuts.up": "리스트에서 위로 이동",
|
||||
|
||||
@@ -95,9 +95,6 @@
|
||||
"alt_text_modal.change_thumbnail": "Wêneyê biçûk biguherîne",
|
||||
"alt_text_modal.done": "Qediya",
|
||||
"announcement.announcement": "Daxuyanî",
|
||||
"annual_report.summary.followers.followers": "şopîner",
|
||||
"annual_report.summary.followers.total": "{count} tevahî",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ne yek",
|
||||
"annual_report.summary.new_posts.new_posts": "şandiyên nû",
|
||||
"attachments_list.unprocessed": "(bêpêvajo)",
|
||||
"audio.hide": "Dengê veşêre",
|
||||
|
||||
@@ -109,18 +109,9 @@
|
||||
"alt_text_modal.change_thumbnail": "Troka minyatura",
|
||||
"alt_text_modal.done": "Fecho",
|
||||
"announcement.announcement": "Pregon",
|
||||
"annual_report.summary.archetype.pollster": "El anketero",
|
||||
"annual_report.summary.followers.followers": "suivantes",
|
||||
"annual_report.summary.followers.total": "{count} en total",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "la puvlikasyon mas favoritada",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "la puvlikasyon mas repartajada",
|
||||
"annual_report.summary.highlighted_post.by_replies": "la puvlikasyon kon mas repuestas",
|
||||
"annual_report.summary.highlighted_post.possessive": "de {name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "la aplikasyon mas uzada",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "la etiketa mas uzada",
|
||||
"annual_report.summary.most_used_hashtag.none": "Dinguno",
|
||||
"annual_report.summary.new_posts.new_posts": "puvlikasyones muevas",
|
||||
"annual_report.summary.thanks": "Mersi por ser parte de Mastodon!",
|
||||
"attachments_list.unprocessed": "(no prosesado)",
|
||||
"audio.hide": "Eskonde audio",
|
||||
"block_modal.show_less": "Amostra manko",
|
||||
|
||||
@@ -117,26 +117,12 @@
|
||||
"annual_report.announcement.action_view": "Peržiūrėti mano Wrapstodon",
|
||||
"annual_report.announcement.description": "Sužinokite daugiau apie savo aktyvumą Mastodon\"e per pastaruosius metus.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} jau čia",
|
||||
"annual_report.summary.archetype.booster": "Šaunus medžiotojas",
|
||||
"annual_report.summary.archetype.lurker": "Stebėtojas",
|
||||
"annual_report.summary.archetype.oracle": "Vydūnas",
|
||||
"annual_report.summary.archetype.pollster": "Apklausos rengėjas",
|
||||
"annual_report.summary.archetype.replier": "Socialinis drugelis",
|
||||
"annual_report.summary.followers.followers": "sekėjai (-ų)",
|
||||
"annual_report.summary.followers.total": "iš viso {count}",
|
||||
"annual_report.summary.here_it_is": "Štai jūsų {year} apžvalga:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "labiausiai pamėgtas įrašas",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "labiausiai pasidalintas įrašas",
|
||||
"annual_report.summary.highlighted_post.by_replies": "įrašas su daugiausiai atsakymų",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "labiausiai naudota programa",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "labiausiai naudota grotažymė",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nieko",
|
||||
"annual_report.summary.new_posts.new_posts": "nauji įrašai",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Tai reiškia, kad esate tarp</topLabel><percentage></percentage><bottomLabel>populiariausių {domain} naudotojų.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Mes nesakysime Bernie.",
|
||||
"annual_report.summary.share_message": "Aš gavau „{archetype}“!",
|
||||
"annual_report.summary.thanks": "Dėkojame, kad esate „Mastodon“ dalis!",
|
||||
"attachments_list.unprocessed": "(neapdorotas)",
|
||||
"audio.hide": "Slėpti garsą",
|
||||
"block_modal.remote_users_caveat": "Paprašysime serverio {domain} gerbti tavo sprendimą. Tačiau atitiktis negarantuojama, nes kai kurie serveriai gali skirtingai tvarkyti blokavimus. Vieši įrašai vis tiek gali būti matomi neprisijungusiems naudotojams.",
|
||||
|
||||
@@ -113,23 +113,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Aprakstīt šo cilvēkiem ar redzes traucējumiem…",
|
||||
"alt_text_modal.done": "Gatavs",
|
||||
"announcement.announcement": "Paziņojums",
|
||||
"annual_report.summary.archetype.lurker": "Glūņa",
|
||||
"annual_report.summary.archetype.oracle": "Orākuls",
|
||||
"annual_report.summary.archetype.replier": "Sabiedriskais tauriņš",
|
||||
"annual_report.summary.followers.followers": "sekotāji",
|
||||
"annual_report.summary.followers.total": "pavisam {count}",
|
||||
"annual_report.summary.here_it_is": "Šeit ir {year}. gada pārskats:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "izlasēm visvairāk pievienotais ieraksts",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "vispastiprinātākais ieraksts",
|
||||
"annual_report.summary.highlighted_post.by_replies": "ieraksts ar vislielāko atbilžu skaitu",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "visizmantotākā lietotne",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "visizmantotākais tēmturis",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nav",
|
||||
"annual_report.summary.new_posts.new_posts": "jauni ieraksti",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Tas ievieto Tevi virsējos</topLabel><percentage></percentage><bottomLabel>no {domain} lietotājiem.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Mēs neteiksim Bērnijam.",
|
||||
"annual_report.summary.thanks": "Paldies, ka esi daļa no Mastodon!",
|
||||
"attachments_list.unprocessed": "(neapstrādāti)",
|
||||
"audio.hide": "Slēpt audio",
|
||||
"block_modal.remote_users_caveat": "Mēs lūgsim serverim {domain} ņemt vērā Tavu lēmumu. Tomēr sadarbība nav garantēta, jo atsevišķi serveri bloķēšanu var apstrādāt citādi. Publiski ieraksti, iespējams, joprojām būs redzami lietotājiem, kuri nav pieteikušies.",
|
||||
@@ -244,7 +232,9 @@
|
||||
"confirmations.missing_alt_text.title": "Pievienot aprakstošo tekstu?",
|
||||
"confirmations.mute.confirm": "Apklusināt",
|
||||
"confirmations.private_quote_notify.cancel": "Atgriezties pie labošanas",
|
||||
"confirmations.private_quote_notify.confirm": "Publicēt ierakstu",
|
||||
"confirmations.private_quote_notify.do_not_show_again": "Nerādīt vairāk šo paziņojumu",
|
||||
"confirmations.private_quote_notify.title": "Dalīties ar sekotājiem un pieminētajiem lietotājiem?",
|
||||
"confirmations.quiet_post_quote_info.got_it": "Sapratu",
|
||||
"confirmations.redraft.confirm": "Dzēst un pārrakstīt",
|
||||
"confirmations.redraft.message": "Vai tiešām vēlies izdzēst šo ierakstu un veidot jaunu tā uzmetumu? Pievienošana izlasēs un pastiprinājumi tiks zaudēti, un sākotnējā ieraksta atbildes paliks bez saiknes ar to.",
|
||||
@@ -423,6 +413,9 @@
|
||||
"home.pending_critical_update.title": "Ir pieejams būtisks drošības atjauninājums.",
|
||||
"home.show_announcements": "Rādīt paziņojumus",
|
||||
"ignore_notifications_modal.ignore": "Neņemt vērā paziņojumus",
|
||||
"ignore_notifications_modal.limited_accounts_title": "Neņemt vērā paziņojumus no moderētiem kontiem?",
|
||||
"ignore_notifications_modal.new_accounts_title": "Neņemt vērā paziņojumus no jauniem kontiem?",
|
||||
"ignore_notifications_modal.not_followers_title": "Neņemt vērā paziņojumus no cilvēkiem, kas tev neseko?",
|
||||
"ignore_notifications_modal.not_following_title": "Neņemt vērā paziņojumus no cilvēkiem, kuriem neseko?",
|
||||
"info_button.label": "Palīdzība",
|
||||
"interaction_modal.go": "Aiziet",
|
||||
@@ -457,6 +450,7 @@
|
||||
"keyboard_shortcuts.open_media": "Atvērt multividi",
|
||||
"keyboard_shortcuts.pinned": "Atvērt piesprausto ierakstu sarakstu",
|
||||
"keyboard_shortcuts.profile": "Atvērt autora profilu",
|
||||
"keyboard_shortcuts.quote": "Citēt ierakstu",
|
||||
"keyboard_shortcuts.reply": "Atbildēt",
|
||||
"keyboard_shortcuts.requests": "Atvērt sekošanas pieprasījumu sarakstu",
|
||||
"keyboard_shortcuts.search": "Fokusēt meklēšanas joslu",
|
||||
|
||||
@@ -94,25 +94,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Terangkan untuk OKU penglihatan…",
|
||||
"alt_text_modal.done": "Selesai",
|
||||
"announcement.announcement": "Pengumuman",
|
||||
"annual_report.summary.archetype.booster": "Si pencapap",
|
||||
"annual_report.summary.archetype.lurker": "Si penghendap",
|
||||
"annual_report.summary.archetype.oracle": "Si penilik",
|
||||
"annual_report.summary.archetype.pollster": "Si peninjau",
|
||||
"annual_report.summary.archetype.replier": "Si peramah",
|
||||
"annual_report.summary.followers.followers": "pengikut",
|
||||
"annual_report.summary.followers.total": "sebanyak {count}",
|
||||
"annual_report.summary.here_it_is": "Ini ulasan {year} anda:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "hantaran paling disukai ramai",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "hantaran paling digalak ramai",
|
||||
"annual_report.summary.highlighted_post.by_replies": "hantaran paling dibalas ramai",
|
||||
"annual_report.summary.highlighted_post.possessive": "oleh",
|
||||
"annual_report.summary.most_used_app.most_used_app": "aplikasi paling banyak digunakan",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "tanda pagar paling banyak digunakan",
|
||||
"annual_report.summary.most_used_hashtag.none": "Tiada",
|
||||
"annual_report.summary.new_posts.new_posts": "hantaran baharu",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Anda berkedudukan</topLabel><percentage></percentage><bottomLabel> pengguna {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Rahsia anda selamat bersama kami. ;)",
|
||||
"annual_report.summary.thanks": "Terima kasih kerana setia bersama Mastodon!",
|
||||
"attachments_list.unprocessed": "(belum diproses)",
|
||||
"audio.hide": "Sembunyikan audio",
|
||||
"block_modal.remote_users_caveat": "Kami akan meminta pelayan {domain} untuk menghormati keputusan anda. Bagaimanapun, pematuhan tidak dijamin kerana ada pelayan yang mungkin menangani sekatan dengan cara berbeza. Hantaran awam mungkin masih tampak kepada pengguna yang tidak log masuk.",
|
||||
|
||||
@@ -114,29 +114,50 @@
|
||||
"alt_text_modal.done": "做好ah",
|
||||
"announcement.announcement": "公告",
|
||||
"annual_report.announcement.action_build": "建立我ê Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "毋免,多謝。",
|
||||
"annual_report.announcement.action_view": "看我ê Wrapstodon",
|
||||
"annual_report.announcement.description": "發現其他關係lí佇最近tsi̍t年參與Mastodon ê狀況。",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} 已經kàu ah",
|
||||
"annual_report.summary.archetype.booster": "追求趣味ê",
|
||||
"annual_report.summary.archetype.lurker": "有讀無PO ê",
|
||||
"annual_report.summary.archetype.oracle": "先知",
|
||||
"annual_report.summary.archetype.pollster": "愛發動投票ê",
|
||||
"annual_report.summary.archetype.replier": "社交ê蝴蝶",
|
||||
"annual_report.summary.followers.followers": "跟tuè lí ê",
|
||||
"annual_report.summary.followers.total": "Lóng總有 {count} ê",
|
||||
"annual_report.summary.here_it_is": "下kha是lí {year} 年ê回顧:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "Hōo足tsē lâng收藏ê PO文",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "Hōo足tsē lâng轉ê PO文",
|
||||
"annual_report.summary.highlighted_post.by_replies": "有上tsē回應ê PO文",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name} ê",
|
||||
"annual_report.nav_item.badge": "新ê",
|
||||
"annual_report.shared_page.donate": "寄付",
|
||||
"annual_report.shared_page.footer": "由 Mastodon 團隊用 {heart} 產生",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} 不斷走tshuē通轉送 ê PO文,靠完美ê對千,放大其他ê創作者。",
|
||||
"annual_report.summary.archetype.booster.desc_self": " Lí不斷走tshuē通轉送 ê PO文,靠完美ê對千,放大其他ê創作者。",
|
||||
"annual_report.summary.archetype.booster.name": "射手",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Guán知 {name} 捌佇某物所在,用伊恬靜ê方法享受Mastodon。",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Guán知lí捌佇某物所在,用li恬靜ê方法享受Mastodon。",
|
||||
"annual_report.summary.archetype.lurker.name": "Stoic主義者",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} 發表ê新ê PO文較tsē回應,保持 Mastodon tshinn-tshioh kap面對未來。",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Lí發表ê新ê PO文較tsē回應,保持 Mastodon tshinn-tshioh kap面對未來。",
|
||||
"annual_report.summary.archetype.oracle.name": "先知",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} 建立投票較tsē其他PO文類型,佇Mastodon培養好奇。",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Lí建立投票較tsē其他PO文類型,佇Mastodon培養好奇。",
|
||||
"annual_report.summary.archetype.pollster.name": "思考者",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} 定定應別lâng ê PO文,用新ê討論kā Mastodon授粉。",
|
||||
"annual_report.summary.archetype.replier.desc_self": "You 定定應別lâng ê PO文,用新ê討論kā Mastodon授粉。",
|
||||
"annual_report.summary.archetype.replier.name": "Ia̍h仔",
|
||||
"annual_report.summary.archetype.reveal": "顯露我ê原形",
|
||||
"annual_report.summary.archetype.reveal_description": "感謝lí成做Mastodon ê一部份!Tsit-má tshuē出lí佇 {year} 年表現ê原形。",
|
||||
"annual_report.summary.archetype.title_public": "{name} ê原形",
|
||||
"annual_report.summary.archetype.title_self": "Lí ê原形",
|
||||
"annual_report.summary.close": "關",
|
||||
"annual_report.summary.copy_link": "Khóo-pih連結",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, other {新ê跟tuè ê}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Tsit篇PO文予lâng轉送 {count, plural, other {# kái}}。",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Tsit篇PO文予lâng收藏 {count, plural, other {# kái}}。",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Tsit篇PO文得著 {count, plural, other {# 篇回應}}。",
|
||||
"annual_report.summary.highlighted_post.title": "上hang ê PO文",
|
||||
"annual_report.summary.most_used_app.most_used_app": "上tsē lâng用ê app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "上tsia̍p用ê hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "無",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Lí佇{count, plural, other { # 篇PO文}}內包含tsit ê hashtag。",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} 佇{count, plural, other { # 篇PO文}}內包含tsit ê hashtag。",
|
||||
"annual_report.summary.new_posts.new_posts": "新ê PO文",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Tse 予lí變做 {domain} ê用戶ê </topLabel><percentage></percentage><bottomLabel></bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Gún bē kā Bernie講。",
|
||||
"annual_report.summary.share_elsewhere": "分享kàu別位",
|
||||
"annual_report.summary.share_message": "我得著 {archetype} ê典型!",
|
||||
"annual_report.summary.thanks": "多謝成做Mastodon ê成員!",
|
||||
"annual_report.summary.share_on_mastodon": "佇Mastodon分享",
|
||||
"attachments_list.unprocessed": "(Iáu bē處理)",
|
||||
"audio.hide": "Tshàng聲音",
|
||||
"block_modal.remote_users_caveat": "Guán ē要求服侍器 {domain} 尊重lí ê決定。但是bô法度保證ta̍k ê服侍器lóng遵守,因為tsi̍t-kuá服侍器huân-sè用別款方法處理封鎖。公開ê PO文可能iáu是ē hōo bô登入ê用者看著。",
|
||||
|
||||
@@ -77,8 +77,6 @@
|
||||
"alert.unexpected.message": "एउटा अनपेक्षित त्रुटि भयो।",
|
||||
"alt_text_modal.cancel": "रद्द गर्नुहोस्",
|
||||
"announcement.announcement": "घोषणा",
|
||||
"annual_report.summary.followers.followers": "फलोअरहरु",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "सबैभन्दा बढि बूस्ट गरिएको पोस्ट",
|
||||
"annual_report.summary.new_posts.new_posts": "नयाँ पोस्टहरू",
|
||||
"block_modal.remote_users_caveat": "हामी सर्भर {domain} लाई तपाईंको निर्णयको सम्मान गर्न सोध्नेछौं। तर, हामी अनुपालनको ग्यारेन्टी दिन सक्दैनौं किनभने केही सर्भरहरूले ब्लकहरू फरक रूपमा ह्यान्डल गर्न सक्छन्। सार्वजनिक पोस्टहरू लग इन नभएका प्रयोगकर्ताहरूले देख्न सक्छन्।",
|
||||
"block_modal.show_less": "कम देखाउनुहोस्",
|
||||
|
||||
@@ -114,29 +114,51 @@
|
||||
"alt_text_modal.done": "Klaar",
|
||||
"announcement.announcement": "Mededeling",
|
||||
"annual_report.announcement.action_build": "Bouw mijn Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Nee, bedankt",
|
||||
"annual_report.announcement.action_view": "Bekijk mijn Wrapstodon",
|
||||
"annual_report.announcement.description": "Ontdek meer over jouw engagement op Mastodon over het afgelopen jaar.",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} is gearriveerd",
|
||||
"annual_report.summary.archetype.booster": "De cool-hunter",
|
||||
"annual_report.summary.archetype.lurker": "De lurker",
|
||||
"annual_report.summary.archetype.oracle": "Het orakel",
|
||||
"annual_report.summary.archetype.pollster": "De opiniepeiler",
|
||||
"annual_report.summary.archetype.replier": "De sociale vlinder",
|
||||
"annual_report.summary.followers.followers": "volgers",
|
||||
"annual_report.summary.followers.total": "totaal {count}",
|
||||
"annual_report.summary.here_it_is": "Hier is jouw terugblik op {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "bericht met de meeste favorieten",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "bericht met de meeste boosts",
|
||||
"annual_report.summary.highlighted_post.by_replies": "bericht met de meeste reacties",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}'s",
|
||||
"annual_report.nav_item.badge": "Nieuw",
|
||||
"annual_report.shared_page.donate": "Doneren",
|
||||
"annual_report.shared_page.footer": "Met {heart} gegenereerd door het Mastodonteam",
|
||||
"annual_report.shared_page.footer_server_info": "{username} gebruikt {domain}, een van de vele door Mastodon mogelijk gemaakte gemeenschappen.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} bleef op jacht naar berichten om te kunnen boosten, waardoor het geluid van andere gebruikers werd versterkt.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Jij bleef op jacht naar berichten om te kunnen boosten, waardoor je het geluid van andere gebruikers versterkte.",
|
||||
"annual_report.summary.archetype.booster.name": "De Boogschutter",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "We weten dat {name} ergens in stilte van Mastodon aan het genieten was.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "We weten dat je ergens in stilte van Mastodon aan het genieten was.",
|
||||
"annual_report.summary.archetype.lurker.name": "De Stoïcijn",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} heeft meer nieuwe berichten dan reacties geplaatst, waardoor Mastodon fris en toekomstgericht blijft.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Je hebt meer nieuwe berichten dan reacties geplaatst, waardoor Mastodon fris en toekomstgericht blijft.",
|
||||
"annual_report.summary.archetype.oracle.name": "Het Orakel",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} heeft meer polls aangemaakt dan andere soorten berichten, en daarmee de nieuwsgierigheid op Mastodon gecultiveerd.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Je hebt meer polls aangemaakt dan andere soorten berichten, en daarmee de nieuwsgierigheid op Mastodon gecultiveerd.",
|
||||
"annual_report.summary.archetype.pollster.name": "De Dromer",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} reageerde regelmatig op berichten van andere mensen, waardoor nieuwe discussies op Mastodon tot bloei kwamen.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Je reageerde regelmatig op berichten van andere mensen, waardoor nieuwe discussies op Mastodon tot bloei kwamen.",
|
||||
"annual_report.summary.archetype.replier.name": "De Vlinder",
|
||||
"annual_report.summary.archetype.reveal": "Onthul mijn archetype",
|
||||
"annual_report.summary.archetype.reveal_description": "Bedankt dat je deel uitmaakt van Mastodon! Tijd om te ontdekken welk archetype je in {year} belichaamde.",
|
||||
"annual_report.summary.archetype.title_public": "Het archetype van {name}",
|
||||
"annual_report.summary.archetype.title_self": "Jouw archetype",
|
||||
"annual_report.summary.close": "Sluiten",
|
||||
"annual_report.summary.copy_link": "Link kopiëren",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {nieuwe volger} other {nieuwe volgers}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Dit bericht is {count, plural, one {één keer} other {# keer}} geboost.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Dit bericht is {count, plural, one {één keer} other {# keer}} als favoriet gemarkeerd.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Dit bericht heeft {count, plural, one {één reactie} other {# reacties}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Meest populaire berichten",
|
||||
"annual_report.summary.most_used_app.most_used_app": "meest gebruikte app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "meest gebruikte hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Geen",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Je hebt deze hashtag in {count, plural, one{één bericht} other {# berichten}} gebruikt.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} heeft deze hashtag in {count, plural, one {één bericht} other {# berichten}} gebruikt.",
|
||||
"annual_report.summary.new_posts.new_posts": "nieuwe berichten",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Hiermee behoor je tot de top</topLabel><percentage></percentage><bottomLabel> van {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "We zullen Bernie niets vertellen.",
|
||||
"annual_report.summary.share_elsewhere": "Ergens anders delen",
|
||||
"annual_report.summary.share_message": "Ik heb het archetype {archetype}!",
|
||||
"annual_report.summary.thanks": "Bedankt dat je deel uitmaakt van Mastodon!",
|
||||
"annual_report.summary.share_on_mastodon": "Op Mastodon delen",
|
||||
"attachments_list.unprocessed": "(niet verwerkt)",
|
||||
"audio.hide": "Audio verbergen",
|
||||
"block_modal.remote_users_caveat": "We vragen de server {domain} om je besluit te respecteren. Het naleven hiervan is echter niet gegarandeerd, omdat sommige servers blokkades anders kunnen interpreteren. Openbare berichten zijn mogelijk nog steeds zichtbaar voor niet-ingelogde gebruikers.",
|
||||
@@ -419,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Wie te volgen",
|
||||
"followed_tags": "Gevolgde hashtags",
|
||||
"footer.about": "Over",
|
||||
"footer.about_mastodon": "Over Mastodon",
|
||||
"footer.about_server": "Over {domain}",
|
||||
"footer.about_this_server": "Over",
|
||||
"footer.directory": "Gebruikersgids",
|
||||
"footer.get_app": "App downloaden",
|
||||
|
||||
@@ -117,25 +117,11 @@
|
||||
"annual_report.announcement.action_view": "Sjå min Årstodon",
|
||||
"annual_report.announcement.description": "Sjå meir om kva du har gjort på Mastodon siste året.",
|
||||
"annual_report.announcement.title": "Årstodon {year} er her",
|
||||
"annual_report.summary.archetype.booster": "Den som jaktar på noko kult",
|
||||
"annual_report.summary.archetype.lurker": "Den som heng på hjørnet",
|
||||
"annual_report.summary.archetype.oracle": "Orakelet",
|
||||
"annual_report.summary.archetype.pollster": "Meiningsmålaren",
|
||||
"annual_report.summary.archetype.replier": "Den sosiale sumarfuglen",
|
||||
"annual_report.summary.followers.followers": "fylgjarar",
|
||||
"annual_report.summary.followers.total": "{count} i alt",
|
||||
"annual_report.summary.here_it_is": "Her er eit gjensyn med {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "det mest omtykte innlegget",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "det mest framheva innlegget",
|
||||
"annual_report.summary.highlighted_post.by_replies": "innlegget med flest svar",
|
||||
"annual_report.summary.highlighted_post.possessive": "som {name} laga",
|
||||
"annual_report.summary.most_used_app.most_used_app": "mest brukte app",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brukte emneknagg",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ingen",
|
||||
"annual_report.summary.new_posts.new_posts": "nye innlegg",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Du er av dei</topLabel><percentage></percentage><bottomLabel>ivrigaste brukarane på {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Ikkje eit ord til pressa.",
|
||||
"annual_report.summary.thanks": "Takk for at du er med i Mastodon!",
|
||||
"attachments_list.unprocessed": "(ubehandla)",
|
||||
"audio.hide": "Gøym lyd",
|
||||
"block_modal.remote_users_caveat": "Me vil be tenaren {domain} om å respektera di avgjerd. Me kan ikkje garantera at det vert gjort, sidan nokre tenarar kan handtera blokkering ulikt. Offentlege innlegg kan framleis vera synlege for ikkje-innlogga brukarar.",
|
||||
|
||||
@@ -107,25 +107,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Beskriv dette for folk med synsproblemer…",
|
||||
"alt_text_modal.done": "Ferdig",
|
||||
"announcement.announcement": "Kunngjøring",
|
||||
"annual_report.summary.archetype.booster": "Den iskalde jeger",
|
||||
"annual_report.summary.archetype.lurker": "Det snikende ullteppe",
|
||||
"annual_report.summary.archetype.oracle": "Allviteren",
|
||||
"annual_report.summary.archetype.pollster": "Meningsmåleren",
|
||||
"annual_report.summary.archetype.replier": "Festens midtpunkt",
|
||||
"annual_report.summary.followers.followers": "følgere",
|
||||
"annual_report.summary.followers.total": "{count} tilsammen",
|
||||
"annual_report.summary.here_it_is": "Her er ditt {year} ditt sett sammlet:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "mest likte innlegg",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "mest opphøyde innlegg",
|
||||
"annual_report.summary.highlighted_post.by_replies": "innlegg med de fleste tilbakemeldinger",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "mest brukte applikasjoner",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "mest brukte evne knagg",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ingen",
|
||||
"annual_report.summary.new_posts.new_posts": "nye innlegg",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Det gjør at du er i topp</topLabel><percentage></percentage><bottomLabel>av brukere på {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Vi skal ikke si noe til Bernie.",
|
||||
"annual_report.summary.thanks": "Takk for at du er med på Mastodon!",
|
||||
"attachments_list.unprocessed": "(ubehandlet)",
|
||||
"audio.hide": "Skjul lyd",
|
||||
"block_modal.remote_users_caveat": "Vi vil be serveren {domain} om å respektere din beslutning. Det er imidlertid ingen garanti at det blir overholdt, siden noen servere kan håndtere blokkeringer på forskjellig vis. Offentlige innlegg kan fortsatt være synlige for ikke-innloggede brukere.",
|
||||
|
||||
@@ -91,8 +91,6 @@
|
||||
"alt_text_modal.change_thumbnail": "Cambiar de miniatura",
|
||||
"alt_text_modal.done": "Acabat",
|
||||
"announcement.announcement": "Anóncia",
|
||||
"annual_report.summary.followers.followers": "seguidors",
|
||||
"annual_report.summary.followers.total": "{count} en total",
|
||||
"attachments_list.unprocessed": "(pas tractat)",
|
||||
"audio.hide": "Amagar àudio",
|
||||
"block_modal.show_less": "Ne veire mens",
|
||||
|
||||
@@ -85,16 +85,8 @@
|
||||
"alt_text_modal.cancel": "ਰੱਦ ਕਰੋ",
|
||||
"alt_text_modal.done": "ਮੁਕੰਮਲ",
|
||||
"announcement.announcement": "ਹੋਕਾ",
|
||||
"annual_report.summary.followers.followers": "ਫ਼ਾਲੋਅਰ",
|
||||
"annual_report.summary.followers.total": "{count} ਕੁੱਲ",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "ਸਭ ਤੋਂ ਵੱਧ ਪਸੰਦ ਕੀਤੀ ਪੋਸਟ",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "ਸਭ ਤੋਂ ਵੱਧ ਬੂਸਟ ਕੀਤੀ ਪੋਸਟ",
|
||||
"annual_report.summary.highlighted_post.by_replies": "ਸਭ ਤੋਂ ਵੱਧ ਜਵਾਬ ਦਿੱਤੀ ਗਈ ਪੋਸਟ",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "ਸਭ ਤੋਂ ਵੱਧ ਵਰਤੀ ਐਪ",
|
||||
"annual_report.summary.most_used_hashtag.none": "ਕੋਈ ਨਹੀਂ",
|
||||
"annual_report.summary.new_posts.new_posts": "ਨਵੀਆਂ ਪੋਸਟਾਂ",
|
||||
"annual_report.summary.thanks": "Mastodon ਦਾ ਹਿੱਸਾ ਬਣਨ ਵਾਸਤੇ ਧੰਨਵਾਦ ਹੈ!",
|
||||
"audio.hide": "ਆਡੀਓ ਨੂੰ ਲੁਕਾਓ",
|
||||
"block_modal.show_less": "ਘੱਟ ਦਿਖਾਓ",
|
||||
"block_modal.show_more": "ਵੱਧ ਦਿਖਾਓ",
|
||||
|
||||
@@ -113,25 +113,11 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Opisz to dla osób niedowidzących…",
|
||||
"alt_text_modal.done": "Gotowe",
|
||||
"announcement.announcement": "Ogłoszenie",
|
||||
"annual_report.summary.archetype.booster": "Łowca treści",
|
||||
"annual_report.summary.archetype.lurker": "Czyhający",
|
||||
"annual_report.summary.archetype.oracle": "Wyrocznia",
|
||||
"annual_report.summary.archetype.pollster": "Ankieter",
|
||||
"annual_report.summary.archetype.replier": "Towarzyski motyl",
|
||||
"annual_report.summary.followers.followers": "obserwujących",
|
||||
"annual_report.summary.followers.total": "łącznie {count}",
|
||||
"annual_report.summary.here_it_is": "Oto przegląd twojego {year} roku:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "najbardziej lubiany wpis",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "najczęściej podbijany wpis",
|
||||
"annual_report.summary.highlighted_post.by_replies": "wpis z największą liczbą komentarzy",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.summary.most_used_app.most_used_app": "najczęściej używana aplikacja",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "najczęściej używany hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Brak",
|
||||
"annual_report.summary.new_posts.new_posts": "nowe wpisy",
|
||||
"annual_report.summary.percentile.text": "<topLabel>To plasuje cię w czołówce</topLabel><percentage></percentage><bottomLabel> użytkowników {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Nie powiemy Berniemu.",
|
||||
"annual_report.summary.thanks": "Dziękujemy, że jesteś częścią Mastodona!",
|
||||
"attachments_list.unprocessed": "(nieprzetworzone)",
|
||||
"audio.hide": "Ukryj dźwięk",
|
||||
"block_modal.remote_users_caveat": "Poprosimy serwer {domain} o uszanowanie twojej decyzji. Nie jest to jednak gwarantowane, bo niektóre serwery mogą obsługiwać blokady w inny sposób. Publiczne wpisy mogą być nadal widoczne dla niezalogowanych użytkowników.",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"about.domain_blocks.suspended.title": "Suspenso",
|
||||
"about.language_label": "Idioma",
|
||||
"about.not_available": "Esta informação não foi disponibilizada neste servidor.",
|
||||
"about.powered_by": "Redes sociais descentralizadas alimentadas por {mastodon}",
|
||||
"about.powered_by": "Rede social descentralizada baseada no {mastodon}",
|
||||
"about.rules": "Regras do servidor",
|
||||
"account.account_note_header": "Nota pessoal",
|
||||
"account.add_or_remove_from_list": "Adicionar ou remover de listas",
|
||||
@@ -55,8 +55,8 @@
|
||||
"account.follows.empty": "Nada aqui.",
|
||||
"account.follows_you": "Segue você",
|
||||
"account.go_to_profile": "Ir ao perfil",
|
||||
"account.hide_reblogs": "Ocultar impulsionamentos de @{name}",
|
||||
"account.in_memoriam": "Em memória.",
|
||||
"account.hide_reblogs": "Ocultar impulsos de @{name}",
|
||||
"account.in_memoriam": "In Memoriam.",
|
||||
"account.joined_short": "Entrou",
|
||||
"account.languages": "Mudar idiomas inscritos",
|
||||
"account.link_verified_on": "A propriedade deste link foi verificada em {date}",
|
||||
@@ -79,7 +79,7 @@
|
||||
"account.requested_follow": "{name} quer te seguir",
|
||||
"account.requests_to_follow_you": "Pediu para seguir você",
|
||||
"account.share": "Compartilhar perfil de @{name}",
|
||||
"account.show_reblogs": "Mostrar impulsionamentos de @{name}",
|
||||
"account.show_reblogs": "Mostrar impulsos de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
||||
"account.unblock": "Desbloquear @{name}",
|
||||
"account.unblock_domain": "Desbloquear domínio {domain}",
|
||||
@@ -106,36 +106,59 @@
|
||||
"alert.unexpected.title": "Eita!",
|
||||
"alt_text_badge.title": "Texto alternativo",
|
||||
"alt_text_modal.add_alt_text": "Adicione texto alternativo",
|
||||
"alt_text_modal.add_text_from_image": "Adicione texto da imagem",
|
||||
"alt_text_modal.add_text_from_image": "Adicione texto a partir da imagem",
|
||||
"alt_text_modal.cancel": "Cancelar",
|
||||
"alt_text_modal.change_thumbnail": "Alterar miniatura",
|
||||
"alt_text_modal.describe_for_people_with_hearing_impairments": "Descreva isso para pessoas com deficiências auditivas…",
|
||||
"alt_text_modal.describe_for_people_with_hearing_impairments": "Descreva isto para pessoas com deficiências auditivas…",
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Descreva isto para pessoas com deficiências visuais…",
|
||||
"alt_text_modal.done": "Feito",
|
||||
"announcement.announcement": "Comunicados",
|
||||
"annual_report.announcement.action_build": "Gerar meu Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Não, obrigado/a",
|
||||
"annual_report.announcement.action_view": "Ver meu Wrapstodon",
|
||||
"annual_report.announcement.description": "Descubra mais sobre seu engajamento no Mastodon ao longo do último ano.",
|
||||
"annual_report.announcement.title": "Chegou o Wrapstodon de {year}",
|
||||
"annual_report.summary.archetype.booster": "Caçador legal",
|
||||
"annual_report.summary.archetype.lurker": "O espreitador",
|
||||
"annual_report.summary.archetype.oracle": "O oráculo",
|
||||
"annual_report.summary.archetype.pollster": "O pesquisador",
|
||||
"annual_report.summary.archetype.replier": "A borboleta social",
|
||||
"annual_report.summary.followers.followers": "seguidores",
|
||||
"annual_report.summary.followers.total": "{count} total",
|
||||
"annual_report.summary.here_it_is": "Aqui está seu {year} em retrospectiva:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "publicação mais favoritada",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "publicação mais impulsionada",
|
||||
"annual_report.summary.highlighted_post.by_replies": "publicação com mais respostas",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.nav_item.badge": "Novo",
|
||||
"annual_report.shared_page.donate": "Doe",
|
||||
"annual_report.shared_page.footer": "Criado com {heart} pela equipe do Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} utiliza {domain}, uma das várias comunidades baseadas no Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} se manteve na caça por publicações para impulsionar, amplificando outros criadores com uma mira perfeita.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Você se manteve na caça por publicações para impulsionar, amplificando outros criadores com uma mira perfeita.",
|
||||
"annual_report.summary.archetype.booster.name": "O Arqueiro",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Sabemos que {name} esteve por aí, em algum lugar, aproveitando o Mastodon do seu próprio jeito silencioso.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Sabemos que você esteve por aí, em algum lugar, aproveitando o Mastodon do seu próprio jeito silencioso.",
|
||||
"annual_report.summary.archetype.lurker.name": "O Estoico",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} criou mais publicações novas que respostas, mantendo o Mastodon fresco e em direção ao futuro.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Você criou mais publicações novas que respostas, mantendo o Mastodon fresco e em direção ao futuro.",
|
||||
"annual_report.summary.archetype.oracle.name": "O Oráculo",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} criou mais enquetes que quaisquer outros tipos de publicações, cultivando curiosidade no Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Você criou mais enquetes que quaisquer outros tipos de publicações, cultivando curiosidade no Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "O Questionador",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} frequentemente respondeu às publicações de outras pessoas, polinizando o Mastodon com novas discussões.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Você frequentemente respondeu às publicações de outras pessoas, polinizando o Mastodon com novas discussões.",
|
||||
"annual_report.summary.archetype.replier.name": "A Borboleta",
|
||||
"annual_report.summary.archetype.reveal": "Revele meu arquétipo",
|
||||
"annual_report.summary.archetype.reveal_description": "Obrigado por ser parte do Mastodon! Está na hora de descobrir qual arquétipo você incorporou em {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Arquétipo de {name}",
|
||||
"annual_report.summary.archetype.title_self": "Seu arquétipo",
|
||||
"annual_report.summary.close": "Fechar",
|
||||
"annual_report.summary.copy_link": "Copiar link",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {novo(a) seguidor(a)} other {novos seguidores}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Esta publicação foi impulsionada {count, plural, one {uma vez} other {# vezes}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Esta publicação foi favoritada {count, plural, one {uma vez} other {# vezes}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Esta postagem recebeu {count, plural, one {uma resposta} other {# respostas}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Publicação mais popular",
|
||||
"annual_report.summary.most_used_app.most_used_app": "aplicativo mais usado",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag mais usada",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nenhuma",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Você incluiu esta hashtag em {count, plural, one {uma publicação} other {# publicações}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} incluiu esta hashtag em {count, plural, one {uma publicação} other {# publicações}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "novas publicações",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Isso lhe coloca no topo</topLabel><percentage></percentage><bottomLabel>de usuários de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Não contaremos ao Bernie.",
|
||||
"annual_report.summary.thanks": "Obrigada por fazer parte do Mastodon!",
|
||||
"annual_report.summary.share_elsewhere": "Compartilhar em outro lugar",
|
||||
"annual_report.summary.share_message": "Eu obtive o arquétipo {archetype}!",
|
||||
"annual_report.summary.share_on_mastodon": "Compartilhar no Mastodon",
|
||||
"attachments_list.unprocessed": "(não processado)",
|
||||
"audio.hide": "Ocultar áudio",
|
||||
"block_modal.remote_users_caveat": "Pediremos ao servidor {domain} que respeite sua decisão. No entanto, a conformidade não é garantida, já que alguns servidores podem lidar com bloqueios de maneira diferente. As publicações públicas ainda podem estar visíveis para usuários não logados.",
|
||||
@@ -145,10 +168,10 @@
|
||||
"block_modal.they_cant_see_posts": "Não poderá ver suas publicações e você não verá as dele/a.",
|
||||
"block_modal.they_will_know": "Poderá ver que você bloqueou.",
|
||||
"block_modal.title": "Bloquear usuário?",
|
||||
"block_modal.you_wont_see_mentions": "Você não verá publicações que mencionem o usuário.",
|
||||
"block_modal.you_wont_see_mentions": "Você não verá publicações que mencionem este usuário.",
|
||||
"boost_modal.combo": "Pressione {combo} para pular isto na próxima vez",
|
||||
"boost_modal.reblog": "Impulsionar a publicação?",
|
||||
"boost_modal.undo_reblog": "Retirar o impulso do post?",
|
||||
"boost_modal.undo_reblog": "Retirar o impulso da publicação?",
|
||||
"bundle_column_error.copy_stacktrace": "Copiar relatório do erro",
|
||||
"bundle_column_error.error.body": "A página solicitada não pôde ser renderizada. Pode ser devido a um erro no nosso código, ou um problema de compatibilidade do seu navegador.",
|
||||
"bundle_column_error.error.title": "Ah, não!",
|
||||
@@ -162,7 +185,7 @@
|
||||
"bundle_modal_error.message": "Algo deu errado ao carregar esta tela.",
|
||||
"bundle_modal_error.retry": "Tente novamente",
|
||||
"carousel.current": "<sr>Slide</sr> {current, number} / {max, number}",
|
||||
"carousel.slide": "Slide {current, number} of {max, number}",
|
||||
"carousel.slide": "Slide {current, number} de {max, number}",
|
||||
"closed_registrations.other_server_instructions": "Como o Mastodon é descentralizado, você pode criar uma conta em outro servidor e ainda pode interagir com este.",
|
||||
"closed_registrations_modal.description": "Não é possível criar uma conta em {domain} no momento, mas atente que você não precisa de uma conta especificamente em {domain} para usar o Mastodon.",
|
||||
"closed_registrations_modal.find_another_server": "Encontrar outro servidor",
|
||||
@@ -179,8 +202,8 @@
|
||||
"column.edit_list": "Editar lista",
|
||||
"column.favourites": "Favoritos",
|
||||
"column.firehose": "Feeds ao vivo",
|
||||
"column.firehose_local": "Transmissão ao vivo deste servidor",
|
||||
"column.firehose_singular": "Transmissão ao vivo",
|
||||
"column.firehose_local": "Feed ao vivo deste servidor",
|
||||
"column.firehose_singular": "Feed ao vivo",
|
||||
"column.follow_requests": "Seguidores pendentes",
|
||||
"column.home": "Página inicial",
|
||||
"column.list_members": "Gerenciar membros da lista",
|
||||
@@ -235,7 +258,7 @@
|
||||
"confirmations.delete_list.title": "Excluir lista?",
|
||||
"confirmations.discard_draft.confirm": "Descartar e continuar",
|
||||
"confirmations.discard_draft.edit.cancel": "Continuar editando",
|
||||
"confirmations.discard_draft.edit.message": "Continuar vai descartar quaisquer mudanças feitas à publicação sendo editada.",
|
||||
"confirmations.discard_draft.edit.message": "Continuar descartará quaisquer mudanças feitas à publicação sendo editada.",
|
||||
"confirmations.discard_draft.edit.title": "Descartar mudanças na sua publicação?",
|
||||
"confirmations.discard_draft.post.cancel": "Continuar rascunho",
|
||||
"confirmations.discard_draft.post.message": "Continuar eliminará a publicação que está sendo elaborada no momento.",
|
||||
@@ -263,7 +286,7 @@
|
||||
"confirmations.quiet_post_quote_info.message": "Ao citar uma publicação pública silenciosa, sua postagem será oculta das linhas de tempo em tendência.",
|
||||
"confirmations.quiet_post_quote_info.title": "Citando publicações públicas silenciadas",
|
||||
"confirmations.redraft.confirm": "Excluir e rascunhar",
|
||||
"confirmations.redraft.message": "Você tem certeza de que quer apagar essa publicação e rascunhá-la? Favoritos e impulsos serão perdidos, e respostas à postagem original ficarão órfãs.",
|
||||
"confirmations.redraft.message": "Você tem certeza de que quer apagar esta publicação e rascunhá-la? Favoritos e impulsos serão perdidos, e respostas à publicação original ficarão órfãs.",
|
||||
"confirmations.redraft.title": "Excluir e rascunhar publicação?",
|
||||
"confirmations.remove_from_followers.confirm": "Remover seguidor",
|
||||
"confirmations.remove_from_followers.message": "{name} vai parar de te seguir. Tem certeza de que deseja continuar?",
|
||||
@@ -304,8 +327,8 @@
|
||||
"domain_block_modal.title": "Bloquear domínio?",
|
||||
"domain_block_modal.you_will_lose_num_followers": "Você perderá {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} e {followingCount, plural, one {{followingCountDisplay} pessoa que você segue} other {{followingCountDisplay} pessoas que você segue}}.",
|
||||
"domain_block_modal.you_will_lose_relationships": "Você irá perder todos os seguidores e pessoas que você segue neste servidor.",
|
||||
"domain_block_modal.you_wont_see_posts": "Você não verá postagens ou notificações de usuários neste servidor.",
|
||||
"domain_pill.activitypub_lets_connect": "Ele permite que você se conecte e interaja com pessoas não apenas no Mastodon, mas também em diferentes aplicativos sociais.",
|
||||
"domain_block_modal.you_wont_see_posts": "Você não verá publicações ou notificações de usuários neste servidor.",
|
||||
"domain_pill.activitypub_lets_connect": "Permite que você se conecte e interaja com pessoas não apenas no Mastodon, mas também em diferentes aplicativos sociais.",
|
||||
"domain_pill.activitypub_like_language": "ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.",
|
||||
"domain_pill.server": "Servidor",
|
||||
"domain_pill.their_handle": "Identificador dele/a:",
|
||||
@@ -347,13 +370,13 @@
|
||||
"empty_column.bookmarked_statuses": "Nada aqui. Quando você salvar um toot, ele aparecerá aqui.",
|
||||
"empty_column.community": "A linha local está vazia. Publique algo para começar!",
|
||||
"empty_column.direct": "Você ainda não tem mensagens privadas. Quando você enviar ou receber uma, será exibida aqui.",
|
||||
"empty_column.disabled_feed": "Este feed foi desativado pelos administradores do servidor.",
|
||||
"empty_column.disabled_feed": "Este feed foi desativado pelos administradores de seu servidor.",
|
||||
"empty_column.domain_blocks": "Nada aqui.",
|
||||
"empty_column.explore_statuses": "Nada está em alta no momento. Volte mais tarde!",
|
||||
"empty_column.favourited_statuses": "Você ainda não tem publicações favoritas. Quanto você marcar uma como favorita, ela aparecerá aqui.",
|
||||
"empty_column.favourites": "Ninguém marcou esta publicação como favorita até agora. Quando alguém o fizer, será listado aqui.",
|
||||
"empty_column.follow_requests": "Nada aqui. Quando você tiver seguidores pendentes, eles aparecerão aqui.",
|
||||
"empty_column.followed_tags": "Você ainda não seguiu nenhuma hashtag. Quando seguir uma, elas serão exibidas aqui.",
|
||||
"empty_column.followed_tags": "Você ainda não seguiu nenhuma hashtag. Quando seguir, elas serão exibidas aqui.",
|
||||
"empty_column.hashtag": "Nada aqui.",
|
||||
"empty_column.home": "Sua página inicial está vazia! Siga mais pessoas para começar: {suggestions}",
|
||||
"empty_column.list": "Nada aqui. Quando membros da lista tootarem, eles aparecerão aqui.",
|
||||
@@ -374,13 +397,13 @@
|
||||
"explore.trending_statuses": "Publicações",
|
||||
"explore.trending_tags": "Hashtags",
|
||||
"featured_carousel.current": "<sr>Publicação</sr> {current, number} / {max, number}",
|
||||
"featured_carousel.header": "{count, plural, one {Postagem fixada} other {Postagens fixadas}}",
|
||||
"featured_carousel.slide": "Publicação {current, number} of {max, number}",
|
||||
"featured_carousel.header": "{count, plural, one {Publicação fixada} other {Publicações fixadas}}",
|
||||
"featured_carousel.slide": "Publicação {current, number} de {max, number}",
|
||||
"filter_modal.added.context_mismatch_explanation": "Esta categoria de filtro não se aplica ao contexto no qual você acessou esta publicação. Se quiser que a publicação seja filtrada nesse contexto também, você terá que editar o filtro.",
|
||||
"filter_modal.added.context_mismatch_title": "Incompatibilidade de contexto!",
|
||||
"filter_modal.added.expired_explanation": "Esta categoria de filtro expirou, você precisará alterar a data de expiração para aplicar.",
|
||||
"filter_modal.added.expired_title": "Filtro expirado!",
|
||||
"filter_modal.added.review_and_configure": "Para revisar e configurar ainda mais esta categoria de filtro, vá até {settings_link}.",
|
||||
"filter_modal.added.review_and_configure": "Para revisar e configurar ainda mais esta categoria de filtro, vá para {settings_link}.",
|
||||
"filter_modal.added.review_and_configure_title": "Configurações de filtro",
|
||||
"filter_modal.added.settings_link": "página de configurações",
|
||||
"filter_modal.added.short_explanation": "Esta publicação foi adicionada à seguinte categoria de filtro: {title}.",
|
||||
@@ -418,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Quem seguir",
|
||||
"followed_tags": "Hashtags seguidas",
|
||||
"footer.about": "Sobre",
|
||||
"footer.about_mastodon": "Sobre o mastodon",
|
||||
"footer.about_server": "Sobre {domain}",
|
||||
"footer.about_this_server": "Sobre",
|
||||
"footer.directory": "Diretório de perfis",
|
||||
"footer.get_app": "Baixe o app",
|
||||
@@ -612,7 +637,7 @@
|
||||
"notification.admin.report_statuses": "{name} Reportou {target} para {category}",
|
||||
"notification.admin.report_statuses_other": "{name} denunciou {target}",
|
||||
"notification.admin.sign_up": "{name} se inscreveu",
|
||||
"notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# other} other {# outros}}",
|
||||
"notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} se inscreveram",
|
||||
"notification.annual_report.message": "O seu #Wrapstodon de {year} está esperando! Desvende seus destaques do ano e momentos memoráveis no Mastodon!",
|
||||
"notification.annual_report.view": "Ver #Wrapstodon",
|
||||
"notification.favourite": "{name} favoritou sua publicação",
|
||||
@@ -622,7 +647,7 @@
|
||||
"notification.follow": "{name} te seguiu",
|
||||
"notification.follow.name_and_others": "{name} e <a>{count, plural, one {# outro} other {# outros}}</a> seguiram você",
|
||||
"notification.follow_request": "{name} quer te seguir",
|
||||
"notification.follow_request.name_and_others": "{name} e {count, plural, one {# other} other {# outros}} pediu para seguir você",
|
||||
"notification.follow_request.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} pediram para seguir você",
|
||||
"notification.label.mention": "Menção",
|
||||
"notification.label.private_mention": "Menção privada",
|
||||
"notification.label.private_reply": "Resposta privada",
|
||||
|
||||
@@ -114,28 +114,51 @@
|
||||
"alt_text_modal.done": "Concluído",
|
||||
"announcement.announcement": "Mensagem de manutenção",
|
||||
"annual_report.announcement.action_build": "Criar o meu Wrapstodon",
|
||||
"annual_report.announcement.action_dismiss": "Não, obrigado",
|
||||
"annual_report.announcement.action_view": "Ver o meu Wrapstodon",
|
||||
"annual_report.announcement.description": "Descobre mais sobre o teu envolvimento com o Mastodon durante o último ano.",
|
||||
"annual_report.announcement.title": "Chegou o Wrapstodon {year}",
|
||||
"annual_report.summary.archetype.booster": "O caçador de tendências",
|
||||
"annual_report.summary.archetype.lurker": "O espreitador",
|
||||
"annual_report.summary.archetype.oracle": "O oráculo",
|
||||
"annual_report.summary.archetype.pollster": "O sondagens",
|
||||
"annual_report.summary.archetype.replier": "A borboleta social",
|
||||
"annual_report.summary.followers.followers": "seguidores",
|
||||
"annual_report.summary.followers.total": "{count} no total",
|
||||
"annual_report.summary.here_it_is": "Aqui está um resumo do ano {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "publicação mais favorita",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "publicação mais partilhada",
|
||||
"annual_report.summary.highlighted_post.by_replies": "publicação com o maior número de respostas",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.nav_item.badge": "Novo",
|
||||
"annual_report.shared_page.donate": "Doar",
|
||||
"annual_report.shared_page.footer": "Gerado com {heart} pela equipa do Mastodon",
|
||||
"annual_report.shared_page.footer_server_info": "{username} utiliza {domain}, uma das muitas comunidades baseadas no Mastodon.",
|
||||
"annual_report.summary.archetype.booster.desc_public": "{name} permaneceu à procura de publicações para partilhar, promovendo outros criadores com uma precisão perfeita.",
|
||||
"annual_report.summary.archetype.booster.desc_self": "Permaneceu à procura de publicações para partilhar, promovendo outros criadores com uma precisão perfeita.",
|
||||
"annual_report.summary.archetype.booster.name": "O Arqueiro",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.lurker.desc_public": "Sabemos que {name} esteve por aí, algures, a apreciar o Mastodon na sua maneira discreta.",
|
||||
"annual_report.summary.archetype.lurker.desc_self": "Sabemos que esteve por aí, algures, a apreciar o Mastodon na sua maneira discreta.",
|
||||
"annual_report.summary.archetype.lurker.name": "O Estoico",
|
||||
"annual_report.summary.archetype.oracle.desc_public": "{name} criou mais publicações novas do que respostas, mantendo o Mastodon atualizado e voltado para o futuro.",
|
||||
"annual_report.summary.archetype.oracle.desc_self": "Criou mais publicações novas do que respostas, mantendo o Mastodon atualizado e voltado para o futuro.",
|
||||
"annual_report.summary.archetype.oracle.name": "O Oráculo",
|
||||
"annual_report.summary.archetype.pollster.desc_public": "{name} criou mais sondagens do que outros tipos de publicações, cultivando a curiosidade no Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.desc_self": "Criou mais sondagens do que outros tipos de publicações, cultivando a curiosidade no Mastodon.",
|
||||
"annual_report.summary.archetype.pollster.name": "O Questionador",
|
||||
"annual_report.summary.archetype.replier.desc_public": "{name} respondeu frequentemente às publicações de outras pessoas, polinizando o Mastodon com novas discussões.",
|
||||
"annual_report.summary.archetype.replier.desc_self": "Respondeu frequentemente às publicações de outras pessoas, polinizando o Mastodon com novas discussões.",
|
||||
"annual_report.summary.archetype.replier.name": "A Borboleta",
|
||||
"annual_report.summary.archetype.reveal": "Revelar o meu arquétipo",
|
||||
"annual_report.summary.archetype.reveal_description": "Obrigado por fazer parte do Mastodon! É hora de descobrir qual arquétipo você encarnou em {year}.",
|
||||
"annual_report.summary.archetype.title_public": "Arquétipo de {name}",
|
||||
"annual_report.summary.archetype.title_self": "O seu arquétipo",
|
||||
"annual_report.summary.close": "Fechar",
|
||||
"annual_report.summary.copy_link": "Copiar hiperligação",
|
||||
"annual_report.summary.followers.new_followers": "{count, plural, one {novo seguidor} other {novos seguidores}}",
|
||||
"annual_report.summary.highlighted_post.boost_count": "Esta publicação foi partilhada {count, plural, one {uma vez} other {# vezes}}.",
|
||||
"annual_report.summary.highlighted_post.favourite_count": "Esta publicação foi colocada nos favoritos {count, plural, one {uma vez} other {# vezes}}.",
|
||||
"annual_report.summary.highlighted_post.reply_count": "Esta publicação teve {count, plural, one {uma resposta} other {# respostas}}.",
|
||||
"annual_report.summary.highlighted_post.title": "Publicação mais popular",
|
||||
"annual_report.summary.most_used_app.most_used_app": "aplicação mais utilizada",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "etiqueta mais utilizada",
|
||||
"annual_report.summary.most_used_hashtag.none": "Nenhuma",
|
||||
"annual_report.summary.most_used_hashtag.used_count": "Incluiu esta etiqueta {count, plural, one {numa publicação} other {em # publicações}}.",
|
||||
"annual_report.summary.most_used_hashtag.used_count_public": "{name} incluiu esta etiqueta {count, plural, one {numa publicação} other {em # publicações}}.",
|
||||
"annual_report.summary.new_posts.new_posts": "novas publicações",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Isso coloca-te no topo</topLabel><percentage></percentage><bottomLabel>dos utilizadores de {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Este segredo fica entre nós.",
|
||||
"annual_report.summary.thanks": "Obrigado por fazeres parte do Mastodon!",
|
||||
"annual_report.summary.share_elsewhere": "Partilhar noutro local",
|
||||
"annual_report.summary.share_message": "Eu obtive o arquétipo {archetype}!",
|
||||
"annual_report.summary.share_on_mastodon": "Partilhar no Mastodon",
|
||||
"attachments_list.unprocessed": "(não processado)",
|
||||
"audio.hide": "Ocultar áudio",
|
||||
"block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a tua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As publicações públicas podem continuar a ser visíveis para utilizadores não autenticados.",
|
||||
@@ -418,6 +441,8 @@
|
||||
"follow_suggestions.who_to_follow": "Quem seguir",
|
||||
"followed_tags": "Etiquetas seguidas",
|
||||
"footer.about": "Sobre",
|
||||
"footer.about_mastodon": "Sobre o Mastodon",
|
||||
"footer.about_server": "Sobre {domain}",
|
||||
"footer.about_this_server": "Sobre",
|
||||
"footer.directory": "Diretório de perfis",
|
||||
"footer.get_app": "Obter a aplicação",
|
||||
@@ -1032,7 +1057,7 @@
|
||||
"visibility_modal.helper.privacy_editing": "A visibilidade não pode ser alterada após a publicação ser publicada.",
|
||||
"visibility_modal.helper.privacy_private_self_quote": "As autocitações de publicações privadas não podem ser tornadas públicas.",
|
||||
"visibility_modal.helper.private_quoting": "As publicações apenas para seguidores criadas no Mastodon não podem ser citadas por outras pessoas.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Quando as pessoas o citarem, as publicações delas serão também ocultadas das tendências.",
|
||||
"visibility_modal.helper.unlisted_quoting": "Quando as pessoas o citarem, as respetivas publicações também serão ocultadas dos destaques.",
|
||||
"visibility_modal.instructions": "Controle quem pode interagir com esta publicação. Também pode definir esta configuração para todas as publicações futuras, em <link>Preferências > Padrões de publicação</link>.",
|
||||
"visibility_modal.privacy_label": "Visibilidade",
|
||||
"visibility_modal.quote_followers": "Apenas seguidores",
|
||||
|
||||
@@ -82,19 +82,8 @@
|
||||
"alert.unexpected.title": "Ups!",
|
||||
"alt_text_badge.title": "Text alternativ",
|
||||
"announcement.announcement": "Anunț",
|
||||
"annual_report.summary.archetype.lurker": "Pânditorul",
|
||||
"annual_report.summary.archetype.oracle": "Oracolul",
|
||||
"annual_report.summary.archetype.pollster": "Sondatorul",
|
||||
"annual_report.summary.archetype.replier": "Fluturele social",
|
||||
"annual_report.summary.followers.followers": "urmăritori",
|
||||
"annual_report.summary.followers.total": "{count} total",
|
||||
"annual_report.summary.here_it_is": "Iată rezumatul dvs. al anului {year}:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "cea mai favorizată postare",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "cea mai boostată postare",
|
||||
"annual_report.summary.highlighted_post.by_replies": "postarea cu cele mai multe răspunsuri",
|
||||
"annual_report.summary.most_used_app.most_used_app": "cea mai utilizată aplicație",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "cel mai utilizat hashtag",
|
||||
"annual_report.summary.most_used_hashtag.none": "Niciunul",
|
||||
"annual_report.summary.new_posts.new_posts": "postări noi",
|
||||
"attachments_list.unprocessed": "(neprocesate)",
|
||||
"audio.hide": "Ascunde audio",
|
||||
|
||||
@@ -113,25 +113,25 @@
|
||||
"alt_text_modal.describe_for_people_with_visual_impairments": "Добавьте описание для людей с нарушениями зрения…",
|
||||
"alt_text_modal.done": "Готово",
|
||||
"announcement.announcement": "Объявление",
|
||||
"annual_report.summary.archetype.booster": "Репостер",
|
||||
"annual_report.summary.archetype.lurker": "Молчун",
|
||||
"annual_report.summary.archetype.oracle": "Гуру",
|
||||
"annual_report.summary.archetype.pollster": "Опросчик",
|
||||
"annual_report.summary.archetype.replier": "Душа компании",
|
||||
"annual_report.summary.followers.followers": "подписчиков",
|
||||
"annual_report.summary.followers.total": "{count} за всё время",
|
||||
"annual_report.summary.here_it_is": "Вот ваши итоги {year} года:",
|
||||
"annual_report.summary.highlighted_post.by_favourites": "пост с наибольшим количеством звёздочек",
|
||||
"annual_report.summary.highlighted_post.by_reblogs": "самый популярный пост",
|
||||
"annual_report.summary.highlighted_post.by_replies": "пост с наибольшим количеством ответов",
|
||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||
"annual_report.announcement.action_dismiss": "Нет, спасибо",
|
||||
"annual_report.announcement.action_view": "Посмотреть мой Wrapstodon",
|
||||
"annual_report.announcement.title": "Wrapstodon {year} уже здесь",
|
||||
"annual_report.nav_item.badge": "Новый",
|
||||
"annual_report.shared_page.donate": "Пожертвовать",
|
||||
"annual_report.shared_page.footer": "Сгенерировано с {heart} командой Mastodon",
|
||||
"annual_report.summary.archetype.die_drei_fragezeichen": "???",
|
||||
"annual_report.summary.archetype.reveal": "Показать мой архетип",
|
||||
"annual_report.summary.archetype.title_public": "Архетип {name}",
|
||||
"annual_report.summary.archetype.title_self": "Ваш архетип",
|
||||
"annual_report.summary.close": "Закрыть",
|
||||
"annual_report.summary.copy_link": "Скопировать ссылку",
|
||||
"annual_report.summary.most_used_app.most_used_app": "наиболее часто используемое приложение",
|
||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "наиболее часто используемый хештег",
|
||||
"annual_report.summary.most_used_hashtag.none": "Нет",
|
||||
"annual_report.summary.new_posts.new_posts": "новых постов",
|
||||
"annual_report.summary.percentile.text": "<topLabel>Всё это помещает вас в топ</topLabel><percentage></percentage><bottomLabel>пользователей {domain}.</bottomLabel>",
|
||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Роскомнадзор об этом не узнает.",
|
||||
"annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!",
|
||||
"annual_report.summary.share_elsewhere": "Поделиться на других",
|
||||
"annual_report.summary.share_on_mastodon": "Поделиться в Mastodon",
|
||||
"attachments_list.unprocessed": "(не обработан)",
|
||||
"audio.hide": "Скрыть аудио",
|
||||
"block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение, однако нельзя гарантировать, что он будет соблюдать блокировку, поскольку некоторые серверы могут по-разному обрабатывать запросы. Публичные посты по-прежнему могут быть видны неавторизованным пользователям.",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user