Compare commits

..

3 Commits

Author SHA1 Message Date
Matt Jankowski
0c39277b55 Update sidekiq to version 8.0.5 2025-07-04 09:18:45 -04:00
Matt Jankowski
d3343989c5 Update sidekiq to version 8.0.4 2025-07-04 09:18:45 -04:00
Matt Jankowski
f0b9bac9d0 Update sidekiq to version 8 2025-07-04 09:18:45 -04:00
126 changed files with 389 additions and 1667 deletions

View File

@ -14,7 +14,6 @@ on:
- config/locales/devise.en.yml
- config/locales/doorkeeper.en.yml
- .github/workflows/crowdin-upload.yml
workflow_dispatch:
jobs:
upload-translations:

View File

@ -2,17 +2,7 @@
All notable changes to this project will be documented in this file.
## [4.4.1] - 2025-07-09
### Fixed
- Fix nearly every sub-directory being crawled as part of Vite build (#35323 by @ClearlyClaire)
- Fix assets not building when Redis is unavailable (#35321 by @oneiros)
- Fix replying from media modal or pop-in-player tagging user `@undefined` (#35317 by @ClearlyClaire)
- Fix support for special characters in various environment variables (#35314 by @mjankowski and @ClearlyClaire)
- Fix some database migrations failing for indexes manually removed by admins (#35309 by @mjankowski)
## [4.4.0] - 2025-07-08
## [4.4.0] - UNRELEASED
### Added
@ -48,7 +38,7 @@ All notable changes to this project will be documented in this file.
Server administrators can now chose to opt in to transmit referrer information when following an external link. Only the domain name is transmitted, not the referrer path.
- Add double tap to zoom and swipe to dismiss to media modal in web UI (#34210 by @Gargron)
- Add link from Web UI for Hashtags to the Moderation UI (#31448 by @ThisIsMissEm)
- **Add terms of service** (#33055, #33233, #33230, #33703, #33699, #33994, #33993, #34105, #34122, #34200, #34527, #35053, #35115, #35126, #35127 and #35233 by @ClearlyClaire, @Gargron, @mjankowski, and @oneiros)\
- **Add terms of service** (#33055, #33233, #33230, #33703, #33699, #33994, #33993, #34105, #34122, #34200, #34527, #35053, #35115, #35126 and #35127 by @ClearlyClaire, @Gargron, @mjankowski, and @oneiros)\
Server administrators can now fill in Terms of Service and notify their users of upcoming changes.
- Add optional bulk mailer settings (#35191 and #35203 by @oneiros)\
This adds the optional environment variables `BULK_SMTP_PORT`, `BULK_SMTP_SERVER`, `BULK_SMTP_LOGIN` and so on analogous to `SMTP_PORT`, `SMTP_SERVER`, `SMTP_LOGIN` and related SMTP configuration environment variables.\
@ -61,7 +51,7 @@ All notable changes to this project will be documented in this file.
- Add ability to dismiss alt text badge by tapping it in web UI (#33737 by @Gargron)
- Add loading indicator to timeline gap indicators in web UI (#33762 by @Gargron)
- Add interaction modal when trying to interact with a poll while logged out (#32609 by @ThisIsMissEm)
- **Add experimental FASP support** (#34031, #34415, #34765, #34965, #34964, #34033, #35218, #35262 and #35263 by @oneiros)\
- **Add experimental FASP support** (#34031, #34415, #34765, #34965, #34964, #34033 and #35218 by @oneiros)\
This is a first step towards supporting “Fediverse Auxiliary Service Providers” (https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications). This is mostly interesting to developers who would like to implement their own FASP, but also includes the capability to share data with a discovery provider (see https://www.fediscovery.org).
- Add ability for admins to send announcements to all users via email (#33928 and #34411 by @ClearlyClaire)\
This is meant for critical announcements only, as this will potentially send a lot of emails and cannot be opted out of by users.
@ -74,7 +64,7 @@ All notable changes to this project will be documented in this file.
- Add dropdown menu with quick actions to lists of accounts in web UI (#34391, #34709, and #34767 by @Gargron, @diondiondion, and @mkljczk)
- Add support for displaying “year in review” notification in web UI (#32710, #32765, #32709, #32807, #32914, #33148, and #33882 by @Gargron and @mjankowski)\
Note that the notification is currently not generated automatically, and at the moment requires a manual undocumented administrator action.
- Add experimental support for receiving HTTP Message Signatures (RFC9421) (#34814, #35033, #35109 and #35278 by @oneiros)\
- Add experimental support for receiving HTTP Message Signatures (RFC9421) (#34814, #35033 and #35109 by @oneiros)\
For now, this needs to be explicitly enabled through the `http_message_signatures` feature flag (`EXPERIMENTAL_FEATURES=http_message_signatures`). This currently only covers verifying such signatures (inbound HTTP requests), not issuing them (outbound HTTP requests).
- Add experimental Async Refreshes API (#34918 by @oneiros)
- Add experimental server-side feature to fetch remote replies (#32615, #34147, #34149, #34151, #34615, #34682, and #34702 by @ClearlyClaire and @sneakers-the-rat)\
@ -228,7 +218,6 @@ All notable changes to this project will be documented in this file.
- Fix admin dashboard crash on specific Elasticsearch connection errors (#34683 by @ClearlyClaire)
- Fix OIDC account creation failing for long display names (#34639 by @defnull)
- Fix use of the deprecated `/api/v1/instance` endpoint in the moderation interface (#34613 by @renchap)
- Fix inaccessible “Clear search” button (#35152 and #35281 by @diondiondion)
- Fix search operators sometimes getting lost (#35190 by @ClearlyClaire)
- Fix directory scroll position reset (#34560 by @przucidlo)
- Fix needlessly complex SVG paths for oEmbed and logo (#34538 by @edent)
@ -243,7 +232,7 @@ All notable changes to this project will be documented in this file.
- Fix extra space under left-indented vertical videos (#34313 by @ClearlyClaire)
- Fix glitchy iOS media attachment drag interactions (#35057 by @diondiondion)
- Fix zoomed images being blurry in Safari (#35052 by @diondiondion)
- Fix redundant focus stop within status component in Web UI and make focus style more noticeable (#35037, #35051, #35096, #35150 and #35251 by @diondiondion)
- Fix redundant focus stop within status component in Web UI and make focus style more noticeable (#35037, #35051, #35096 and #35150 by @diondiondion)
- Fix digits in media player time readout not having a consistent width (#35038 by @diondiondion)
- Fix wrong text color for “Open in advanced web interface” banner in high-contrast theme (#35032 by @diondiondion)
- Fix hover card for limited accounts not hiding information as expected (#35024 by @diondiondion)

View File

@ -186,7 +186,7 @@ FROM build AS libvips
# libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"]
# renovate: datasource=github-releases depName=libvips packageName=libvips/libvips
ARG VIPS_VERSION=8.17.1
ARG VIPS_VERSION=8.17.0
# libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"]
ARG VIPS_URL=https://github.com/libvips/libvips/releases/download

View File

@ -62,7 +62,7 @@ gem 'inline_svg'
gem 'irb', '~> 1.8'
gem 'kaminari', '~> 1.2'
gem 'link_header', '~> 0.0'
gem 'linzer', '~> 0.7.7'
gem 'linzer', '~> 0.7.2'
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'mime-types', '~> 3.7.0', require: 'mime/types/columnar'
gem 'mutex_m'

View File

@ -365,7 +365,7 @@ GEM
json-ld-preloaded (3.3.1)
json-ld (~> 3.3)
rdf (~> 3.3)
json-schema (5.2.1)
json-schema (5.1.1)
addressable (~> 2.8)
bigdecimal (~> 3.1)
jsonapi-renderer (0.2.2)
@ -403,7 +403,7 @@ GEM
rexml
link_header (0.0.8)
lint_roller (1.1.0)
linzer (0.7.7)
linzer (0.7.3)
cgi (~> 0.4.2)
forwardable (~> 1.3, >= 1.3.3)
logger (~> 1.7, >= 1.7.0)
@ -761,7 +761,7 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 9)
rspec-support (3.13.4)
rubocop (1.78.0)
rubocop (1.77.0)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@ -1007,7 +1007,7 @@ DEPENDENCIES
letter_opener (~> 1.8)
letter_opener_web (~> 3.0)
link_header (~> 0.0)
linzer (~> 0.7.7)
linzer (~> 0.7.2)
lograge (~> 0.12)
mail (~> 2.8)
mario-redis-lock (~> 1.2)

View File

@ -13,9 +13,8 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
## Supported Versions
| Version | Supported |
| ------- | ---------------- |
| 4.4.x | Yes |
| 4.3.x | Yes |
| 4.2.x | Until 2026-01-08 |
| < 4.2 | No |
| Version | Supported |
| ------- | --------- |
| 4.3.x | Yes |
| 4.2.x | Yes |
| < 4.2 | No |

View File

@ -64,9 +64,6 @@ module SignatureVerification
return (@signed_request_actor = actor) if signed_request.verified?(actor)
fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri}"
rescue Mastodon::MalformedHeaderError => e
@signature_verification_failure_code = 400
fail_with! e.message
rescue Mastodon::SignatureVerificationError => e
fail_with! e.message
rescue *Mastodon::HTTP_CONNECTION_ERRORS => e

View File

@ -66,7 +66,7 @@ module ApplicationHelper
def provider_sign_in_link(provider)
label = Devise.omniauth_configs[provider]&.strategy&.display_name.presence || I18n.t("auth.providers.#{provider}", default: provider.to_s.chomp('_oauth2').capitalize)
link_to label, omniauth_authorize_path(:user, provider), class: "btn button-#{provider}", method: :post
link_to label, omniauth_authorize_path(:user, provider), class: "button button-#{provider}", method: :post
end
def locale_direction

View File

@ -47,6 +47,10 @@ const labelForRecentSearch = (search: RecentSearch) => {
}
};
const unfocus = () => {
document.querySelector('.ui')?.parentElement?.focus();
};
const ClearButton: React.FC<{
onClick: () => void;
hasValue: boolean;
@ -103,11 +107,6 @@ export const Search: React.FC<{
}, [initialValue]);
const searchOptions: SearchOption[] = [];
const unfocus = useCallback(() => {
document.querySelector('.ui')?.parentElement?.focus();
setExpanded(false);
}, []);
if (searchEnabled) {
searchOptions.push(
{
@ -283,7 +282,7 @@ export const Search: React.FC<{
history.push({ pathname: '/search', search: queryParams.toString() });
unfocus();
},
[dispatch, history, unfocus],
[dispatch, history],
);
const handleChange = useCallback(
@ -403,7 +402,7 @@ export const Search: React.FC<{
setQuickActions(newQuickActions);
},
[signedIn, dispatch, unfocus, history, submit],
[dispatch, history, signedIn, setValue, setQuickActions, submit],
);
const handleClear = useCallback(() => {
@ -411,7 +410,7 @@ export const Search: React.FC<{
setQuickActions([]);
setSelectedOption(-1);
unfocus();
}, [unfocus]);
}, [setValue, setQuickActions, setSelectedOption]);
const handleKeyDown = useCallback(
(e: React.KeyboardEvent) => {
@ -462,7 +461,7 @@ export const Search: React.FC<{
break;
}
},
[unfocus, navigableOptions, selectedOption, submit, value],
[navigableOptions, value, selectedOption, setSelectedOption, submit],
);
const handleFocus = useCallback(() => {
@ -482,38 +481,12 @@ export const Search: React.FC<{
}, [setExpanded, setSelectedOption, singleColumn]);
const handleBlur = useCallback(() => {
setExpanded(false);
setSelectedOption(-1);
}, [setSelectedOption]);
const formRef = useRef<HTMLFormElement>(null);
useEffect(() => {
// If the search popover is expanded, close it when tabbing or
// clicking outside of it or the search form, while allowing
// tabbing or clicking inside of the popover
if (expanded) {
function closeOnLeave(event: FocusEvent | MouseEvent) {
const form = formRef.current;
const isClickInsideForm =
form &&
(form === event.target || form.contains(event.target as Node));
if (!isClickInsideForm) {
setExpanded(false);
}
}
document.addEventListener('focusin', closeOnLeave);
document.addEventListener('click', closeOnLeave);
return () => {
document.removeEventListener('focusin', closeOnLeave);
document.removeEventListener('click', closeOnLeave);
};
}
return () => null;
}, [expanded]);
}, [setExpanded, setSelectedOption]);
return (
<form ref={formRef} className={classNames('search', { active: expanded })}>
<form className={classNames('search', { active: expanded })}>
<input
ref={searchInputRef}
className='search__input'
@ -533,7 +506,7 @@ export const Search: React.FC<{
<ClearButton hasValue={hasValue} onClick={handleClear} />
<div className='search__popout' tabIndex={-1}>
<div className='search__popout'>
{!hasValue && (
<>
<h4>

View File

@ -1,110 +0,0 @@
// Utility codes
export const VARIATION_SELECTOR_CODE = 0xfe0f;
export const KEYCAP_CODE = 0x20e3;
// Gender codes
export const GENDER_FEMALE_CODE = 0x2640;
export const GENDER_MALE_CODE = 0x2642;
// Skin tone codes
export const SKIN_TONE_CODES = [
0x1f3fb, // Light skin tone
0x1f3fc, // Medium-light skin tone
0x1f3fd, // Medium skin tone
0x1f3fe, // Medium-dark skin tone
0x1f3ff, // Dark skin tone
] as const;
export const EMOJIS_WITH_DARK_BORDER = [
'🎱', // 1F3B1
'🐜', // 1F41C
'⚫', // 26AB
'🖤', // 1F5A4
'⬛', // 2B1B
'◼️', // 25FC-FE0F
'◾', // 25FE
'◼️', // 25FC-FE0F
'✒️', // 2712-FE0F
'▪️', // 25AA-FE0F
'💣', // 1F4A3
'🎳', // 1F3B3
'📷', // 1F4F7
'📸', // 1F4F8
'♣️', // 2663-FE0F
'🕶️', // 1F576-FE0F
'✴️', // 2734-FE0F
'🔌', // 1F50C
'💂‍♀️', // 1F482-200D-2640-FE0F
'📽️', // 1F4FD-FE0F
'🍳', // 1F373
'🦍', // 1F98D
'💂', // 1F482
'🔪', // 1F52A
'🕳️', // 1F573-FE0F
'🕹️', // 1F579-FE0F
'🕋', // 1F54B
'🖊️', // 1F58A-FE0F
'🖋️', // 1F58B-FE0F
'💂‍♂️', // 1F482-200D-2642-FE0F
'🎤', // 1F3A4
'🎓', // 1F393
'🎥', // 1F3A5
'🎼', // 1F3BC
'♠️', // 2660-FE0F
'🎩', // 1F3A9
'🦃', // 1F983
'📼', // 1F4FC
'📹', // 1F4F9
'🎮', // 1F3AE
'🐃', // 1F403
'🏴', // 1F3F4
'🐞', // 1F41E
'🕺', // 1F57A
'📱', // 1F4F1
'📲', // 1F4F2
'🚲', // 1F6B2
'🪮', // 1FAA6
'🐦‍⬛', // 1F426-200D-2B1B
];
export const EMOJIS_WITH_LIGHT_BORDER = [
'👽', // 1F47D
'⚾', // 26BE
'🐔', // 1F414
'☁️', // 2601-FE0F
'💨', // 1F4A8
'🕊️', // 1F54A-FE0F
'👀', // 1F440
'🍥', // 1F365
'👻', // 1F47B
'🐐', // 1F410
'❕', // 2755
'❔', // 2754
'⛸️', // 26F8-FE0F
'🌩️', // 1F329-FE0F
'🔊', // 1F50A
'🔇', // 1F507
'📃', // 1F4C3
'🌧️', // 1F327-FE0F
'🐏', // 1F40F
'🍚', // 1F35A
'🍙', // 1F359
'🐓', // 1F413
'🐑', // 1F411
'💀', // 1F480
'☠️', // 2620-FE0F
'🌨️', // 1F328-FE0F
'🔉', // 1F509
'🔈', // 1F508
'💬', // 1F4AC
'💭', // 1F4AD
'🏐', // 1F3D0
'🏳️', // 1F3F3-FE0F
'⚪', // 26AA
'⬜', // 2B1C
'◽', // 25FD
'◻️', // 25FB-FE0F
'▫️', // 25AB-FE0F
'🪽', // 1FAE8
'🪿', // 1FABF
];

View File

@ -1,102 +0,0 @@
import { SUPPORTED_LOCALES } from 'emojibase';
import type { FlatCompactEmoji, Locale } from 'emojibase';
import type { DBSchema } from 'idb';
import { openDB } from 'idb';
import type { ApiCustomEmojiJSON } from '@/mastodon/api_types/custom_emoji';
import type { LocaleOrCustom } from './locale';
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
interface EmojiDB extends LocaleTables, DBSchema {
custom: {
key: string;
value: ApiCustomEmojiJSON;
indexes: {
category: string;
};
};
etags: {
key: LocaleOrCustom;
value: string;
};
}
interface LocaleTable {
key: string;
value: FlatCompactEmoji;
indexes: {
group: number;
label: string;
order: number;
tags: string[];
};
}
type LocaleTables = Record<Locale, LocaleTable>;
const SCHEMA_VERSION = 1;
const db = await openDB<EmojiDB>('mastodon-emoji', SCHEMA_VERSION, {
upgrade(database) {
const customTable = database.createObjectStore('custom', {
keyPath: 'shortcode',
autoIncrement: false,
});
customTable.createIndex('category', 'category');
database.createObjectStore('etags');
for (const locale of SUPPORTED_LOCALES) {
const localeTable = database.createObjectStore(locale, {
keyPath: 'hexcode',
autoIncrement: false,
});
localeTable.createIndex('group', 'group');
localeTable.createIndex('label', 'label');
localeTable.createIndex('order', 'order');
localeTable.createIndex('tags', 'tags', { multiEntry: true });
}
},
});
export async function putEmojiData(emojis: FlatCompactEmoji[], locale: Locale) {
const trx = db.transaction(locale, 'readwrite');
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
await trx.done;
}
export async function putCustomEmojiData(emojis: ApiCustomEmojiJSON[]) {
const trx = db.transaction('custom', 'readwrite');
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
await trx.done;
}
export function putLatestEtag(etag: string, localeString: string) {
const locale = toSupportedLocaleOrCustom(localeString);
return db.put('etags', etag, locale);
}
export function searchEmojiByHexcode(hexcode: string, localeString: string) {
const locale = toSupportedLocale(localeString);
return db.get(locale, hexcode);
}
export function searchEmojiByTag(tag: string, localeString: string) {
const locale = toSupportedLocale(localeString);
const range = IDBKeyRange.only(tag.toLowerCase());
return db.getAllFromIndex(locale, 'tags', range);
}
export function searchCustomEmojiByShortcode(shortcode: string) {
return db.get('custom', shortcode);
}
export async function loadLatestEtag(localeString: string) {
const locale = toSupportedLocaleOrCustom(localeString);
const rowCount = await db.count(locale);
if (!rowCount) {
return null; // No data for this locale, return null even if there is an etag.
}
const etag = await db.get('etags', locale);
return etag ?? null;
}

View File

@ -1,38 +0,0 @@
import initialState from '@/mastodon/initial_state';
import { toSupportedLocale } from './locale';
const serverLocale = toSupportedLocale(initialState?.meta.locale ?? 'en');
const worker =
'Worker' in window
? new Worker(new URL('./worker', import.meta.url), {
type: 'module',
})
: null;
export async function initializeEmoji() {
if (worker) {
worker.addEventListener('message', (event: MessageEvent<string>) => {
const { data: message } = event;
if (message === 'ready') {
worker.postMessage(serverLocale);
worker.postMessage('custom');
}
});
} else {
const { importCustomEmojiData, importEmojiData } = await import('./loader');
await Promise.all([importCustomEmojiData(), importEmojiData(serverLocale)]);
}
}
export async function loadEmojiLocale(localeString: string) {
const locale = toSupportedLocale(localeString);
if (worker) {
worker.postMessage(locale);
} else {
const { importEmojiData } = await import('./loader');
await importEmojiData(locale);
}
}

View File

@ -1,77 +0,0 @@
import { flattenEmojiData } from 'emojibase';
import type { CompactEmoji, FlatCompactEmoji } from 'emojibase';
import type { ApiCustomEmojiJSON } from '@/mastodon/api_types/custom_emoji';
import { isDevelopment } from '@/mastodon/utils/environment';
import {
putEmojiData,
putCustomEmojiData,
loadLatestEtag,
putLatestEtag,
} from './database';
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
import type { LocaleOrCustom } from './locale';
export async function importEmojiData(localeString: string) {
const locale = toSupportedLocale(localeString);
const emojis = await fetchAndCheckEtag<CompactEmoji[]>(locale);
if (!emojis) {
return;
}
const flattenedEmojis: FlatCompactEmoji[] = flattenEmojiData(emojis);
await putEmojiData(flattenedEmojis, locale);
}
export async function importCustomEmojiData() {
const emojis = await fetchAndCheckEtag<ApiCustomEmojiJSON[]>('custom');
if (!emojis) {
return;
}
await putCustomEmojiData(emojis);
}
async function fetchAndCheckEtag<ResultType extends object[]>(
localeOrCustom: LocaleOrCustom,
): Promise<ResultType | null> {
const locale = toSupportedLocaleOrCustom(localeOrCustom);
let uri: string;
if (locale === 'custom') {
uri = '/api/v1/custom_emojis';
} else {
uri = `/packs${isDevelopment() ? '-dev' : ''}/emoji/${locale}.json`;
}
const oldEtag = await loadLatestEtag(locale);
const response = await fetch(uri, {
headers: {
'Content-Type': 'application/json',
'If-None-Match': oldEtag ?? '', // Send the old ETag to check for modifications
},
});
// If not modified, return null
if (response.status === 304) {
return null;
}
if (!response.ok) {
throw new Error(
`Failed to fetch emoji data for ${localeOrCustom}: ${response.statusText}`,
);
}
const data = (await response.json()) as ResultType;
if (!Array.isArray(data)) {
throw new Error(
`Unexpected data format for ${localeOrCustom}: expected an array`,
);
}
// Store the ETag for future requests
const etag = response.headers.get('ETag');
if (etag) {
await putLatestEtag(etag, localeOrCustom);
}
return data;
}

View File

@ -1,6 +1,52 @@
import { SUPPORTED_LOCALES } from 'emojibase';
import { flattenEmojiData, SUPPORTED_LOCALES } from 'emojibase';
import emojiEnData from 'emojibase-data/en/compact.json';
import emojiFrData from 'emojibase-data/fr/compact.json';
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
import { toSupportedLocale, unicodeToLocaleLabel } from './locale';
describe('unicodeToLocaleLabel', () => {
const emojiTestCases = [
'1F3CB-1F3FF-200D-2640-FE0F', // 🏋🏿‍♀️ Woman weightlifter, dark skin
'1F468-1F3FB', // 👨🏻 Man, light skin
'1F469-1F3FB-200D-2695-FE0F', // 👩🏻‍⚕️ Woman health worker, light skin
'1F468-1F3FD-200D-1F692', // 👨🏽‍🚒 Man firefighter, medium skin
'1F469-1F3FE', // 👩🏾 Woman, medium-dark skin
'1F469-1F3FF-200D-1F4BB', // 👩🏿‍💻 Woman technologist, dark skin
'1F478-1F3FF', // 👸🏿 Princess with dark skin tone
'1F935-1F3FC-200D-2640-FE0F', // 🤵🏼‍♀️ Woman in tuxedo, medium-light skin
'1F9D1-1F3FC', // 🧑🏼 Person, medium-light skin
'1F9D4-1F3FE', // 🧔🏾 Person with beard, medium-dark skin
];
const flattenedEnData = flattenEmojiData(emojiEnData);
const flattenedFrData = flattenEmojiData(emojiFrData);
const emojiTestEnLabels = new Map(
emojiTestCases.map((code) => [
code,
flattenedEnData.find((emoji) => emoji.hexcode === code)?.label,
]),
);
const emojiTestFrLabels = new Map(
emojiTestCases.map((code) => [
code,
flattenedFrData.find((emoji) => emoji.hexcode === code)?.label,
]),
);
test.for(
emojiTestCases.flatMap((code) => [
[code, 'en', emojiTestEnLabels.get(code)],
[code, 'fr', emojiTestFrLabels.get(code)],
]) satisfies [string, string, string | undefined][],
)(
'returns correct label for %s for %s locale',
async ([unicodeHex, locale, expectedLabel]) => {
const label = await unicodeToLocaleLabel(unicodeHex, locale);
expect(label).toBe(expectedLabel);
},
);
});
describe('toSupportedLocale', () => {
test('returns the same locale if it is supported', () => {
@ -16,14 +62,3 @@ describe('toSupportedLocale', () => {
}
});
});
describe('toSupportedLocaleOrCustom', () => {
test('returns custom for "custom" locale', () => {
expect(toSupportedLocaleOrCustom('custom')).toBe('custom');
});
test('returns supported locale for valid locales', () => {
for (const locale of SUPPORTED_LOCALES) {
expect(toSupportedLocaleOrCustom(locale)).toBe(locale);
}
});
});

View File

@ -1,23 +1,51 @@
import type { Locale } from 'emojibase';
import { SUPPORTED_LOCALES } from 'emojibase';
import type { CompactEmoji, Locale } from 'emojibase';
import { flattenEmojiData, SUPPORTED_LOCALES } from 'emojibase';
export type LocaleOrCustom = Locale | 'custom';
// Simple cache. This will be replaced with an IndexedDB cache in the future.
const localeCache = new Map<Locale, Map<string, CompactEmoji>>();
export function toSupportedLocale(localeBase: string): Locale {
const locale = localeBase.toLowerCase();
export async function unicodeToLocaleLabel(
unicodeHex: string,
localeString: string,
) {
const locale = toSupportedLocale(localeString);
let hexMap = localeCache.get(locale);
if (!hexMap) {
hexMap = await loadLocaleLabels(locale);
localeCache.set(locale, hexMap);
}
const label = hexMap.get(unicodeHex)?.label;
if (!label) {
throw new Error(
`Label for unicode hex ${unicodeHex} not found in locale ${locale}`,
);
}
return label;
}
async function loadLocaleLabels(
locale: Locale,
): Promise<Map<string, CompactEmoji>> {
const { default: localeEmoji } = ((await import(
`emojibase-data/${locale}/compact.json`
)) ?? { default: [] }) as { default: CompactEmoji[] };
if (!Array.isArray(localeEmoji)) {
throw new Error(`Locale data for ${locale} not found`);
}
const hexMapEntries = flattenEmojiData(localeEmoji).map(
(emoji) => [emoji.hexcode, emoji] satisfies [string, CompactEmoji],
);
return new Map(hexMapEntries);
}
export function toSupportedLocale(locale: string): Locale {
if (isSupportedLocale(locale)) {
return locale;
}
return 'en'; // Default to English if unsupported
}
export function toSupportedLocaleOrCustom(locale: string): LocaleOrCustom {
if (locale.toLowerCase() === 'custom') {
return 'custom';
}
return toSupportedLocale(locale);
}
function isSupportedLocale(locale: string): locale is Locale {
return SUPPORTED_LOCALES.includes(locale.toLowerCase() as Locale);
return SUPPORTED_LOCALES.includes(locale as Locale);
}

View File

@ -1,17 +1,9 @@
import { readdir } from 'fs/promises';
import { basename, resolve } from 'path';
import { flattenEmojiData } from 'emojibase';
import unicodeRawEmojis from 'emojibase-data/en/data.json';
import unicodeEmojis from 'emojibase-data/en/data.json';
import {
twemojiHasBorder,
twemojiToUnicodeInfo,
unicodeToTwemojiHex,
CODES_WITH_DARK_BORDER,
CODES_WITH_LIGHT_BORDER,
emojiToUnicodeHex,
} from './normalize';
import { twemojiToUnicodeInfo, unicodeToTwemojiHex } from './normalize';
const emojiSVGFiles = await readdir(
// This assumes tests are run from project root
@ -21,81 +13,60 @@ const emojiSVGFiles = await readdir(
},
);
const svgFileNames = emojiSVGFiles
.filter((file) => file.isFile() && file.name.endsWith('.svg'))
.filter(
(file) =>
file.isFile() &&
file.name.endsWith('.svg') &&
!file.name.endsWith('_border.svg'),
)
.map((file) => basename(file.name, '.svg').toUpperCase());
const svgFileNamesWithoutBorder = svgFileNames.filter(
(fileName) => !fileName.endsWith('_BORDER'),
);
const unicodeEmojis = flattenEmojiData(unicodeRawEmojis);
describe('emojiToUnicodeHex', () => {
test.concurrent.for([
['🎱', '1F3B1'],
['🐜', '1F41C'],
['⚫', '26AB'],
['🖤', '1F5A4'],
['💀', '1F480'],
['💂‍♂️', '1F482-200D-2642-FE0F'],
] as const)(
'emojiToUnicodeHex converts %s to %s',
([emoji, hexcode], { expect }) => {
expect(emojiToUnicodeHex(emoji)).toBe(hexcode);
},
);
});
describe('unicodeToTwemojiHex', () => {
test.concurrent.for(
unicodeEmojis
// Our version of Twemoji only supports up to version 15.1
.filter((emoji) => emoji.version < 16)
.map((emoji) => [emoji.hexcode, emoji.label] as [string, string]),
)('verifying an emoji exists for %s (%s)', ([hexcode], { expect }) => {
const result = unicodeToTwemojiHex(hexcode);
expect(svgFileNamesWithoutBorder).toContain(result);
describe('normalizeEmoji', () => {
describe('unicodeToSVGName', () => {
test.concurrent.for(
unicodeEmojis
// Our version of Twemoji only supports up to version 15.1
.filter((emoji) => emoji.version < 16)
.map((emoji) => [emoji.hexcode, emoji.label] as [string, string]),
)('verifying an emoji exists for %s (%s)', ([hexcode], { expect }) => {
const result = unicodeToTwemojiHex(hexcode);
expect(svgFileNames).toContain(result);
});
});
});
describe('twemojiHasBorder', () => {
test.concurrent.for(
svgFileNames
.filter((file) => file.endsWith('_BORDER'))
.map((file) => {
const hexCode = file.replace('_BORDER', '');
return [
hexCode,
CODES_WITH_LIGHT_BORDER.includes(hexCode),
CODES_WITH_DARK_BORDER.includes(hexCode),
] as const;
describe('twemojiToUnicodeInfo', () => {
const unicodeMap = new Map(
unicodeEmojis.flatMap((emoji) => {
const base: [string, string][] = [[emoji.hexcode, emoji.label]];
if (emoji.skins) {
base.push(
...emoji.skins.map(
(skin) => [skin.hexcode, skin.label] as [string, string],
),
);
}
return base;
}),
)('twemojiHasBorder for %s', ([hexCode, isLight, isDark], { expect }) => {
const result = twemojiHasBorder(hexCode);
expect(result).toHaveProperty('hexCode', hexCode);
expect(result).toHaveProperty('hasLightBorder', isLight);
expect(result).toHaveProperty('hasDarkBorder', isDark);
);
test.concurrent.for(svgFileNames)(
'verifying SVG file %s maps to Unicode emoji',
(svgFileName, { expect }) => {
assert(!!svgFileName);
const result = twemojiToUnicodeInfo(svgFileName);
const hexcode =
typeof result === 'string' ? result : result.unqualified;
if (!hexcode) {
// No hexcode means this is a special case like the Shibuya 109 emoji
expect(result).toHaveProperty('label');
return;
}
assert(!!hexcode);
expect(
unicodeMap.has(hexcode),
`${hexcode} (${svgFileName}) not found`,
).toBeTruthy();
},
);
});
});
describe('twemojiToUnicodeInfo', () => {
const unicodeCodeSet = new Set(unicodeEmojis.map((emoji) => emoji.hexcode));
test.concurrent.for(svgFileNamesWithoutBorder)(
'verifying SVG file %s maps to Unicode emoji',
(svgFileName, { expect }) => {
assert(!!svgFileName);
const result = twemojiToUnicodeInfo(svgFileName);
const hexcode = typeof result === 'string' ? result : result.unqualified;
if (!hexcode) {
// No hexcode means this is a special case like the Shibuya 109 emoji
expect(result).toHaveProperty('label');
return;
}
assert(!!hexcode);
expect(
unicodeCodeSet.has(hexcode),
`${hexcode} (${svgFileName}) not found`,
).toBeTruthy();
},
);
});

View File

@ -1,12 +1,19 @@
import {
VARIATION_SELECTOR_CODE,
KEYCAP_CODE,
GENDER_FEMALE_CODE,
GENDER_MALE_CODE,
SKIN_TONE_CODES,
EMOJIS_WITH_DARK_BORDER,
EMOJIS_WITH_LIGHT_BORDER,
} from './constants';
// Utility codes
const VARIATION_SELECTOR_CODE = 0xfe0f;
const KEYCAP_CODE = 0x20e3;
// Gender codes
const GENDER_FEMALE_CODE = 0x2640;
const GENDER_MALE_CODE = 0x2642;
// Skin tone codes
const SKIN_TONE_CODES = [
0x1f3fb, // Light skin tone
0x1f3fc, // Medium-light skin tone
0x1f3fd, // Medium skin tone
0x1f3fe, // Medium-dark skin tone
0x1f3ff, // Dark skin tone
] as const;
// Misc codes that have special handling
const SKIER_CODE = 0x26f7;
@ -17,17 +24,6 @@ const LEVITATING_PERSON_CODE = 0x1f574;
const SPEECH_BUBBLE_CODE = 0x1f5e8;
const MS_CLAUS_CODE = 0x1f936;
export function emojiToUnicodeHex(emoji: string): string {
const codes: number[] = [];
for (const char of emoji) {
const code = char.codePointAt(0);
if (code !== undefined) {
codes.push(code);
}
}
return hexNumbersToString(codes);
}
export function unicodeToTwemojiHex(unicodeHex: string): string {
const codes = hexStringToNumbers(unicodeHex);
const normalizedCodes: number[] = [];
@ -54,35 +50,6 @@ export function unicodeToTwemojiHex(unicodeHex: string): string {
return hexNumbersToString(normalizedCodes, 0);
}
interface TwemojiBorderInfo {
hexCode: string;
hasLightBorder: boolean;
hasDarkBorder: boolean;
}
export const CODES_WITH_DARK_BORDER =
EMOJIS_WITH_DARK_BORDER.map(emojiToUnicodeHex);
export const CODES_WITH_LIGHT_BORDER =
EMOJIS_WITH_LIGHT_BORDER.map(emojiToUnicodeHex);
export function twemojiHasBorder(twemojiHex: string): TwemojiBorderInfo {
const normalizedHex = twemojiHex.toUpperCase();
let hasLightBorder = false;
let hasDarkBorder = false;
if (CODES_WITH_LIGHT_BORDER.includes(normalizedHex)) {
hasLightBorder = true;
}
if (CODES_WITH_DARK_BORDER.includes(normalizedHex)) {
hasDarkBorder = true;
}
return {
hexCode: normalizedHex,
hasLightBorder,
hasDarkBorder,
};
}
interface TwemojiSpecificEmoji {
unqualified?: string;
gender?: number;
@ -117,16 +84,11 @@ export function twemojiToUnicodeInfo(
let gender: undefined | number;
let skin: undefined | number;
for (const code of codes) {
if (!gender && code in GENDER_CODES_MAP) {
if (code in GENDER_CODES_MAP) {
gender = GENDER_CODES_MAP[code];
} else if (!skin && code in SKIN_TONE_CODES) {
} else if (code in SKIN_TONE_CODES) {
skin = code;
}
// Exit if we have both skin and gender
if (skin && gender) {
break;
}
}
let mappedCodes: unknown[] = codes;
@ -141,8 +103,8 @@ export function twemojiToUnicodeInfo(
// For key emoji, insert the variation selector
mappedCodes = [codes[0], VARIATION_SELECTOR_CODE, KEYCAP_CODE];
} else if (
(codes.at(0) === SKIER_CODE || codes.at(0) === LEVITATING_PERSON_CODE) &&
codes.length > 1
codes.at(0) === SKIER_CODE ||
codes.at(0) === LEVITATING_PERSON_CODE
) {
// Twemoji offers more gender and skin options for the skier and levitating person emoji.
return {

View File

@ -1,13 +0,0 @@
import { importEmojiData, importCustomEmojiData } from './loader';
addEventListener('message', handleMessage);
self.postMessage('ready'); // After the worker is ready, notify the main thread
function handleMessage(event: MessageEvent<string>) {
const { data: locale } = event;
if (locale !== 'custom') {
void importEmojiData(locale);
} else {
void importCustomEmojiData();
}
}

View File

@ -1,4 +1,4 @@
import { useCallback, useMemo } from 'react';
import { useCallback } from 'react';
import { defineMessages, useIntl } from 'react-intl';
@ -21,9 +21,6 @@ import { openModal } from 'mastodon/actions/modal';
import { IconButton } from 'mastodon/components/icon_button';
import { useIdentity } from 'mastodon/identity_context';
import { me } from 'mastodon/initial_state';
import type { Status } from 'mastodon/models/status';
import { makeGetStatus } from 'mastodon/selectors';
import type { RootState } from 'mastodon/store';
import { useAppSelector, useAppDispatch } from 'mastodon/store';
const messages = defineMessages({
@ -50,11 +47,6 @@ const messages = defineMessages({
open: { id: 'status.open', defaultMessage: 'Expand this status' },
});
type GetStatusSelector = (
state: RootState,
props: { id?: string | null; contextType?: string },
) => Status | null;
export const Footer: React.FC<{
statusId: string;
withOpenButton?: boolean;
@ -64,8 +56,7 @@ export const Footer: React.FC<{
const intl = useIntl();
const history = useHistory();
const dispatch = useAppDispatch();
const getStatus = useMemo(() => makeGetStatus(), []) as GetStatusSelector;
const status = useAppSelector((state) => getStatus(state, { id: statusId }));
const status = useAppSelector((state) => state.statuses.get(statusId));
const accountId = status?.get('account') as string | undefined;
const account = useAppSelector((state) =>
accountId ? state.accounts.get(accountId) : undefined,

View File

@ -1,7 +1,7 @@
{
"about.blocks": "خوادم تحت الإشراف",
"about.contact": "للاتصال:",
"about.default_locale": "افتراضيالافتراضية",
"about.default_locale": "الافتراضية",
"about.disclaimer": "ماستدون برنامج حر ومفتوح المصدر وعلامة تجارية لـ Mastodon GmbH.",
"about.domain_blocks.no_reason_available": "السبب غير متوفر",
"about.domain_blocks.preamble": "يتيح مَستُدون عمومًا لمستخدميه مطالعة المحتوى من المستخدمين من الخواديم الأخرى في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادوم.",

View File

@ -8,7 +8,6 @@
"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": "Правила на сървъра",
@ -29,7 +28,6 @@
"account.edit_profile": "Редактиране на профила",
"account.enable_notifications": "Известяване при публикуване от @{name}",
"account.endorse": "Представи в профила",
"account.familiar_followers_many": "Последвано от {name1}, {name2}, и {othersCount, plural, one {един друг, когото познавате} other {# други, които познавате}}",
"account.familiar_followers_one": "Последвано от {name1}",
"account.familiar_followers_two": "Последвано от {name1} и {name2}",
"account.featured": "Препоръчано",
@ -42,7 +40,6 @@
"account.followers": "Последователи",
"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": "Потребителят още никого не следва.",
@ -188,7 +185,7 @@
"community.column_settings.remote_only": "Само отдалечено",
"compose.language.change": "Смяна на езика",
"compose.language.search": "Търсене на езици...",
"compose.published.body": "Публикувано.",
"compose.published.body": "Публикувана публикация.",
"compose.published.open": "Отваряне",
"compose.saved.body": "Запазена публикация.",
"compose_form.direct_message_warning_learn_more": "Още информация",
@ -218,13 +215,6 @@
"confirmations.delete_list.confirm": "Изтриване",
"confirmations.delete_list.message": "Наистина ли искате да изтриете завинаги списъка?",
"confirmations.delete_list.title": "Изтривате ли списъка?",
"confirmations.discard_draft.confirm": "Изхвърляне и продължаване",
"confirmations.discard_draft.edit.cancel": "Възобновяване на редактиране",
"confirmations.discard_draft.edit.message": "Продължаването ще изхвърли всякакви промени, които сте правили в публикацията, която сега редактирате.",
"confirmations.discard_draft.edit.title": "Изхвърляте ли промените в публикацията си?",
"confirmations.discard_draft.post.cancel": "Възстановка на чернова",
"confirmations.discard_draft.post.message": "Продължаването ще изхвърли публикацията, която сега съставяте.",
"confirmations.discard_draft.post.title": "Изхвърляте ли черновата си публикация?",
"confirmations.discard_edit_media.confirm": "Отхвърляне",
"confirmations.discard_edit_media.message": "Не сте запазили промени на описанието или огледа на мултимедията, отхвърляте ли ги?",
"confirmations.follow_to_list.confirm": "Последване и добавяне в списък",
@ -334,15 +324,9 @@
"errors.unexpected_crash.copy_stacktrace": "Копиране на трасето на стека в буферната памет",
"errors.unexpected_crash.report_issue": "Сигнал за проблем",
"explore.suggested_follows": "Хора",
"explore.title": "Вървежно",
"explore.trending_links": "Новини",
"explore.trending_statuses": "Публикации",
"explore.trending_tags": "Хаштагове",
"featured_carousel.header": "{count, plural, one {закачена публикация} other {закачени публикации}}",
"featured_carousel.next": "Напред",
"featured_carousel.post": "Публикация",
"featured_carousel.previous": "Назад",
"featured_carousel.slide": "{index} от {total}",
"filter_modal.added.context_mismatch_explanation": "Тази категория филтър не е приложима към контекста, в който достъпвате тази публикация. Ако желаете да филтрирате публикациите в този контекст, трябва да изберете друг филтър.",
"filter_modal.added.context_mismatch_title": "Несъвпадащ контекст!",
"filter_modal.added.expired_explanation": "Валидността на тази категория филтър е изтекла. Сменете срока на валидност, за да я приложите.",
@ -421,7 +405,6 @@
"hints.profiles.see_more_posts": "Преглед на още публикации на {domain}",
"hints.threads.replies_may_be_missing": "Отговори от други сървъри може да липсват.",
"hints.threads.see_more": "Преглед на още отговори на {domain}",
"home.column_settings.show_quotes": "Показване на цитираното",
"home.column_settings.show_reblogs": "Показване на подсилванията",
"home.column_settings.show_replies": "Показване на отговорите",
"home.hide_announcements": "Скриване на оповестяванията",
@ -544,10 +527,8 @@
"mute_modal.you_wont_see_mentions": "Няма да виждате споменаващите ги публикации.",
"mute_modal.you_wont_see_posts": "Още могат да виждат публикациите ви, но вие техните не.",
"navigation_bar.about": "Относно",
"navigation_bar.account_settings": "Парола и сигурност",
"navigation_bar.administration": "Администрация",
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
"navigation_bar.automated_deletion": "Автоматично изтриване на публикации",
"navigation_bar.blocks": "Блокирани потребители",
"navigation_bar.bookmarks": "Отметки",
"navigation_bar.direct": "Частни споменавания",
@ -557,17 +538,13 @@
"navigation_bar.follow_requests": "Заявки за последване",
"navigation_bar.followed_tags": "Последвани хаштагове",
"navigation_bar.follows_and_followers": "Последвания и последователи",
"navigation_bar.import_export": "Внасяне и изнасяне",
"navigation_bar.lists": "Списъци",
"navigation_bar.logout": "Излизане",
"navigation_bar.moderation": "Модериране",
"navigation_bar.more": "Още",
"navigation_bar.mutes": "Заглушени потребители",
"navigation_bar.opened_in_classic_interface": "Публикации, акаунти и други особени страници се отварят по подразбиране в класическия мрежови интерфейс.",
"navigation_bar.preferences": "Предпочитания",
"navigation_bar.privacy_and_reach": "Поверителност и обхват",
"navigation_bar.search": "Търсене",
"navigation_bar.search_trends": "Търсене / Вървежно",
"not_signed_in_indicator.not_signed_in": "Трябва ви вход за достъп до ресурса.",
"notification.admin.report": "{name} докладва {target}",
"notification.admin.report_account": "{name} докладва {count, plural, one {публикация} other {# публикации}} от {target} за {category}",
@ -794,7 +771,6 @@
"report_notification.categories.violation": "Нарушение на правилото",
"report_notification.categories.violation_sentence": "нарушение на правило",
"report_notification.open": "Отваряне на доклада",
"search.clear": "Изчистване на търсенето",
"search.no_recent_searches": "Няма скорошни търсения",
"search.placeholder": "Търсене",
"search.quick_action.account_search": "Съвпадение на профили {x}",
@ -861,13 +837,6 @@
"status.mute_conversation": "Заглушаване на разговора",
"status.open": "Разширяване на публикацията",
"status.pin": "Закачане в профила",
"status.quote_error.filtered": "Скрито поради един от филтрите ви",
"status.quote_error.not_found": "Публикацията не може да се показва.",
"status.quote_error.pending_approval": "Публикацията чака одобрение от първоначалния автор.",
"status.quote_error.rejected": "Публикацията не може да се показва като първоначалния автор не позволява цитирането ѝ.",
"status.quote_error.removed": "Публикацията е премахната от автора ѝ.",
"status.quote_error.unauthorized": "Публикацията не може да се показва, тъй като не сте упълномощени да я гледате.",
"status.quote_post_author": "Публикация от {name}",
"status.read_more": "Още за четене",
"status.reblog": "Подсилване",
"status.reblog_private": "Подсилване с оригиналната видимост",
@ -897,10 +866,7 @@
"subscribed_languages.save": "Запазване на промените",
"subscribed_languages.target": "Промяна на абонираните езици за {target}",
"tabs_bar.home": "Начало",
"tabs_bar.menu": "Меню",
"tabs_bar.notifications": "Известия",
"tabs_bar.publish": "Нова публикация",
"tabs_bar.search": "Търсене",
"terms_of_service.effective_as_of": "В сила от {date}",
"terms_of_service.title": "Условия на услугата",
"terms_of_service.upcoming_changes_on": "Предстоящи промени на {date}",

View File

@ -83,7 +83,7 @@
"account.unendorse": "Vis ikke på profil",
"account.unfollow": "Følg ikke længere",
"account.unmute": "Vis @{name} igen",
"account.unmute_notifications_short": "Vis notifikationer igen",
"account.unmute_notifications_short": "Tænd for notifikationer",
"account.unmute_short": "Vis igen",
"account_note.placeholder": "Klik for at tilføje notat",
"admin.dashboard.daily_retention": "Brugerfastholdelsesrate pr. dag efter tilmelding",
@ -130,7 +130,7 @@
"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.",
"block_modal.show_less": "Vis mindre",
"block_modal.show_less": "Vis færre",
"block_modal.show_more": "Vis flere",
"block_modal.they_cant_mention": "Vedkommende kan ikke omtale eller følge dig.",
"block_modal.they_cant_see_posts": "Vedkommende kan ikke se dine indlæg, og du vil ikke se vedkommendes.",
@ -239,9 +239,9 @@
"confirmations.missing_alt_text.secondary": "Læg op alligevel",
"confirmations.missing_alt_text.title": "Tilføj alt-tekst?",
"confirmations.mute.confirm": "Skjul",
"confirmations.redraft.confirm": "Slet og omskriv",
"confirmations.redraft.confirm": "Slet og omformulér",
"confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og fremhævelser går tabt, og svar til det oprindelige indlæg mister tilknytningen.",
"confirmations.redraft.title": "Slet og omskriv indlæg?",
"confirmations.redraft.title": "Slet og omformulér indlæg?",
"confirmations.remove_from_followers.confirm": "Fjern følger",
"confirmations.remove_from_followers.message": "{name} vil ikke længere følge dig. Er du sikker på, at du vil fortsætte?",
"confirmations.remove_from_followers.title": "Fjern følger?",
@ -279,14 +279,14 @@
"domain_pill.activitypub_lets_connect": "Det muliggører at forbinde og interagere med folk, ikke kun på Mastodon, men også på tværs af forskellige sociale apps.",
"domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", som Mastodon taler med andre sociale netværk.",
"domain_pill.server": "Server",
"domain_pill.their_handle": "Deres handle:",
"domain_pill.their_handle": "Deres greb:",
"domain_pill.their_server": "Det digitale hjem, hvor alle indlæggene findes.",
"domain_pill.their_username": "Entydig identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
"domain_pill.username": "Brugernavn",
"domain_pill.whats_in_a_handle": "Hvad indeholder et handle?",
"domain_pill.whats_in_a_handle": "Hvad er der i et greb?",
"domain_pill.who_they_are": "Da et handle fortæller, hvem nogen er, og hvor de er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
"domain_pill.who_you_are": "Fordi dit handle fortæller, hvem du er, og hvor du er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
"domain_pill.your_handle": "Dit handle:",
"domain_pill.your_handle": "Dit greb:",
"domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.",
"domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
"embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.",
@ -386,7 +386,7 @@
"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",
"followed_tags": "Hashtag, som følges",
"footer.about": "Om",
"footer.directory": "Profiloversigt",
"footer.get_app": "Hent appen",
@ -414,7 +414,7 @@
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
"hashtag.feature": "Fremhæv på profil",
"hashtag.follow": "Følg hashtag",
"hashtag.mute": "Skjul #{hashtag}",
"hashtag.mute": "Tavsgør #{hashtag}",
"hashtag.unfeature": "Fremhæv ikke på profil",
"hashtag.unfollow": "Følg ikke længere hashtag",
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
@ -543,10 +543,10 @@
"mute_modal.hide_options": "Skjul valgmuligheder",
"mute_modal.indefinite": "Indtil jeg vælger at se dem igen",
"mute_modal.show_options": "Vis valgmuligheder",
"mute_modal.they_can_mention_and_follow": "Vedkommende kan nævne og følge dig, men vil ikke blive vist.",
"mute_modal.they_can_mention_and_follow": "De kan omtale og følge dig, men du vil ikke se dem.",
"mute_modal.they_wont_know": "De vil ikke vide, at de er blevet skjult.",
"mute_modal.title": "Skjul bruger?",
"mute_modal.you_wont_see_mentions": "Indlæg, som nævner vedkommende, vises ikke.",
"mute_modal.you_wont_see_mentions": "Du vil ikke se indlæg som omtaler dem.",
"mute_modal.you_wont_see_posts": "De kan stadig se dine indlæg, men du vil ikke se deres.",
"navigation_bar.about": "Om",
"navigation_bar.account_settings": "Adgangskode og sikkerhed",
@ -560,7 +560,7 @@
"navigation_bar.favourites": "Favoritter",
"navigation_bar.filters": "Skjulte ord",
"navigation_bar.follow_requests": "Følgeanmodninger",
"navigation_bar.followed_tags": "Hashtags, som følges",
"navigation_bar.followed_tags": "Hashtag, som følges",
"navigation_bar.follows_and_followers": "Følges og følgere",
"navigation_bar.import_export": "Import og eksport",
"navigation_bar.lists": "Lister",
@ -686,11 +686,11 @@
"notifications.policy.filter_limited_accounts_hint": "Begrænset af servermoderatorer",
"notifications.policy.filter_limited_accounts_title": "Modererede konti",
"notifications.policy.filter_new_accounts.hint": "Oprettet indenfor {days, plural, one {den seneste dag} other {de seneste # dage}}",
"notifications.policy.filter_new_accounts_title": "Nye konti",
"notifications.policy.filter_not_followers_hint": "Inklusiv personer, som har fulgt dig {days, plural, one {mindre end én dag} other {mindre end # dage}}",
"notifications.policy.filter_not_followers_title": "Personer, som ikke følger dig",
"notifications.policy.filter_new_accounts_title": "Ny konti",
"notifications.policy.filter_not_followers_hint": "Inklusiv personer, som har fulgt dig {days, plural, one {mindre end én dag} other {færre end # dage}}",
"notifications.policy.filter_not_followers_title": "Folk, som ikke følger dig",
"notifications.policy.filter_not_following_hint": "Indtil du manuelt godkender dem",
"notifications.policy.filter_not_following_title": "Personer, du ikke følger",
"notifications.policy.filter_not_following_title": "Folk, du ikke følger",
"notifications.policy.filter_private_mentions_hint": "Filtreret, medmindre det er i svar på egen omtale, eller hvis afsenderen følges",
"notifications.policy.filter_private_mentions_title": "Uopfordrede private omtaler",
"notifications.policy.title": "Håndtér notifikationer fra…",
@ -830,7 +830,7 @@
"search_results.see_all": "Vis alle",
"search_results.statuses": "Indlæg",
"search_results.title": "Søg efter \"{q}\"",
"server_banner.about_active_users": "Personer, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.active_users": "aktive brugere",
"server_banner.administered_by": "Håndteres af:",
"server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, du kan bruge for at deltage i fediverset.",
@ -885,10 +885,10 @@
"status.reblogged_by": "{name} fremhævede",
"status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}",
"status.reblogs.empty": "Ingen har endnu fremhævet dette indlæg. Når nogen gør, vil det fremgå hér.",
"status.redraft": "Slet og omskriv",
"status.redraft": "Slet og omformulér",
"status.remove_bookmark": "Fjern bogmærke",
"status.remove_favourite": "Fjern fra favoritter",
"status.replied_in_thread": "Svarede i tråd",
"status.replied_in_thread": "Svaret i tråd",
"status.replied_to": "Svarede {name}",
"status.reply": "Besvar",
"status.replyAll": "Svar alle",
@ -902,7 +902,7 @@
"status.translate": "Oversæt",
"status.translated_from_with": "Oversat fra {lang} ved brug af {provider}",
"status.uncached_media_warning": "Ingen forhåndsvisning",
"status.unmute_conversation": "Vis samtale",
"status.unmute_conversation": "Genaktivér samtale",
"status.unpin": "Frigør fra profil",
"subscribed_languages.lead": "Efter ændringen vises kun indlæg på de valgte sprog på din hjem- og listetidslinje. Vælger du ingen, vil du modtage indlæg på alle sprog.",
"subscribed_languages.save": "Gem ændringer",

View File

@ -219,13 +219,6 @@
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
"confirmations.delete_list.title": "Delete list?",
"confirmations.discard_draft.confirm": "Discard and continue",
"confirmations.discard_draft.edit.cancel": "Resume editing",
"confirmations.discard_draft.edit.message": "Continuing will discard any changes you have made to the post you are currently editing.",
"confirmations.discard_draft.edit.title": "Discard changes to your post?",
"confirmations.discard_draft.post.cancel": "Resume draft",
"confirmations.discard_draft.post.message": "Continuing will discard the post you are currently composing.",
"confirmations.discard_draft.post.title": "Discard your draft post?",
"confirmations.discard_edit_media.confirm": "Discard",
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
"confirmations.follow_to_list.confirm": "Follow and add to list",
@ -337,7 +330,6 @@
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
"errors.unexpected_crash.report_issue": "Report issue",
"explore.suggested_follows": "People",
"explore.title": "Trending",
"explore.trending_links": "News",
"explore.trending_statuses": "Posts",
"explore.trending_tags": "Hashtags",
@ -549,10 +541,8 @@
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
"navigation_bar.about": "About",
"navigation_bar.account_settings": "Password and security",
"navigation_bar.administration": "Administration",
"navigation_bar.advanced_interface": "Open in advanced web interface",
"navigation_bar.automated_deletion": "Automated post deletion",
"navigation_bar.blocks": "Blocked users",
"navigation_bar.bookmarks": "Bookmarks",
"navigation_bar.direct": "Private mentions",
@ -562,23 +552,13 @@
"navigation_bar.follow_requests": "Follow requests",
"navigation_bar.followed_tags": "Followed hashtags",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.import_export": "Import and export",
"navigation_bar.lists": "Lists",
"navigation_bar.live_feed_local": "Live feed (local)",
"navigation_bar.live_feed_public": "Live feed (public)",
"navigation_bar.logout": "Logout",
"navigation_bar.moderation": "Moderation",
"navigation_bar.more": "More",
"navigation_bar.mutes": "Muted users",
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
"navigation_bar.preferences": "Preferences",
"navigation_bar.privacy_and_reach": "Privacy and reach",
"navigation_bar.search": "Search",
"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",
"navigation_panel.expand_lists": "Expand list menu",
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
"notification.admin.report": "{name} reported {target}",
"notification.admin.report_account": "{name} reported {count, plural, one {one post} other {# posts}} from {target} for {category}",
@ -805,7 +785,6 @@
"report_notification.categories.violation": "Rule violation",
"report_notification.categories.violation_sentence": "rule violation",
"report_notification.open": "Open report",
"search.clear": "Clear search",
"search.no_recent_searches": "No recent searches",
"search.placeholder": "Search",
"search.quick_action.account_search": "Profiles matching {x}",
@ -908,10 +887,7 @@
"subscribed_languages.save": "Save changes",
"subscribed_languages.target": "Change subscribed languages for {target}",
"tabs_bar.home": "Home",
"tabs_bar.menu": "Menu",
"tabs_bar.notifications": "Notifications",
"tabs_bar.publish": "New Post",
"tabs_bar.search": "Search",
"terms_of_service.effective_as_of": "Effective as of {date}",
"terms_of_service.title": "Terms of Service",
"terms_of_service.upcoming_changes_on": "Upcoming changes on {date}",

View File

@ -327,14 +327,10 @@
"errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera",
"errors.unexpected_crash.report_issue": "Eman arazoaren berri",
"explore.suggested_follows": "Jendea",
"explore.title": "Joerak",
"explore.trending_links": "Berriak",
"explore.trending_statuses": "Tutak",
"explore.trending_tags": "Traolak",
"featured_carousel.next": "Hurrengoa",
"featured_carousel.post": "Argitaratu",
"featured_carousel.previous": "Aurrekoa",
"featured_carousel.slide": "{total}-tik {index}",
"filter_modal.added.context_mismatch_explanation": "Iragazki-kategoria hau ez zaio aplikatzen bidalketa honetara sartzeko erabili duzun testuinguruari. Bidalketa testuinguru horretan ere iragaztea nahi baduzu, iragazkia editatu beharko duzu.",
"filter_modal.added.context_mismatch_title": "Testuingurua ez dator bat!",
"filter_modal.added.expired_explanation": "Iragazki kategoria hau iraungi da, eragina izan dezan bere iraungitze-data aldatu beharko duzu.",
@ -387,8 +383,6 @@
"generic.saved": "Gordea",
"getting_started.heading": "Menua",
"hashtag.admin_moderation": "#{name}-(r)en moderazio-interfazea ireki",
"hashtag.browse": "Arakatu bidalketak #{hashtag}(e)n",
"hashtag.browse_from_account": "Arakatu @{name}(r)en bidalketak #{hashtag}(e)n",
"hashtag.column_header.tag_mode.all": "eta {osagarria}",
"hashtag.column_header.tag_mode.any": "edo {osagarria}",
"hashtag.column_header.tag_mode.none": "gabe {osagarria}",
@ -401,10 +395,7 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} parte-hartzaile} other {{counter} parte-hartzaile}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}} gaur",
"hashtag.feature": "Nabarmendu profilean",
"hashtag.follow": "Jarraitu traolari",
"hashtag.mute": "Mututu #{hashtag}",
"hashtag.unfeature": "Ez nabarmendu profilean",
"hashtag.unfollow": "Utzi traola jarraitzeari",
"hashtags.and_other": "…eta {count, plural, one {}other {# gehiago}}",
"hints.profiles.followers_may_be_missing": "Baliteke profil honen jarraitzaile guztiak ez agertzea.",
@ -415,7 +406,6 @@
"hints.profiles.see_more_posts": "Ikusi bidalketa gehiago {domain}-(e)n",
"hints.threads.replies_may_be_missing": "Baliteke beste zerbitzari batzuen erantzun batzuk ez erakustea.",
"hints.threads.see_more": "Ikusi erantzun gehiago {domain}-(e)n",
"home.column_settings.show_quotes": "Erakutsi aipamenak",
"home.column_settings.show_reblogs": "Erakutsi bultzadak",
"home.column_settings.show_replies": "Erakutsi erantzunak",
"home.hide_announcements": "Ezkutatu iragarpenak",
@ -434,11 +424,6 @@
"ignore_notifications_modal.not_followers_title": "Jarraitzen ez zaituzten pertsonen jakinarazpenei ez ikusiarena egin?",
"ignore_notifications_modal.not_following_title": "Jarraitzen ez dituzun pertsonen jakinarazpenei ez ikusiarena egin?",
"ignore_notifications_modal.private_mentions_title": "Eskatu gabeko aipamen pribatuen jakinarazpenei ez ikusiarena egin?",
"info_button.label": "Laguntza",
"interaction_modal.action.favourite": "Jarraitzeko, zure kontutik atsegindu behar duzu.",
"interaction_modal.action.follow": "Jarraitzeko zure kontutik jarraitu behar duzu.",
"interaction_modal.action.reply": "Jarraitzeko zure kontutik erantzun behar duzu.",
"interaction_modal.action.vote": "Jarraitzeko, zure kontutik bozkatu behar duzu.",
"interaction_modal.go": "Joan",
"interaction_modal.no_account_yet": "Ez al duzu konturik oraindik?",
"interaction_modal.on_another_server": "Beste zerbitzari batean",
@ -483,14 +468,11 @@
"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.translate": "bidalketa itzultzeko",
"keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
"keyboard_shortcuts.up": "zerrendan gora mugitzea",
"lightbox.close": "Itxi",
"lightbox.next": "Hurrengoa",
"lightbox.previous": "Aurrekoa",
"lightbox.zoom_in": "Zooma egungo tamainara",
"lightbox.zoom_out": "Zooma egokitzeko",
"limited_account_hint.action": "Erakutsi profila hala ere",
"limited_account_hint.title": "Profil hau ezkutatu egin dute {domain} zerbitzariko moderatzaileek.",
"link_preview.author": "Egilea: {name}",
@ -500,24 +482,13 @@
"lists.add_to_list": "Gehitu zerrendara",
"lists.add_to_lists": "Gehitu {name} zerrendetara",
"lists.create": "Sortu",
"lists.create_a_list_to_organize": "Sortu zerrenda berria zure Hasierako jarioa antolatzeko",
"lists.create_list": "Sortu zerrenda",
"lists.delete": "Ezabatu zerrenda",
"lists.done": "Egina",
"lists.edit": "Editatu zerrenda",
"lists.exclusive": "Ezkutatu kideak Hasieran",
"lists.exclusive_hint": "Norbait zerrenda honetan badago, ezkutatu zure Hasierako jariotik mezuak bi aldiz ez ikusteko.",
"lists.find_users_to_add": "Bilatu erabiltzaileak gehitzeko",
"lists.list_name": "Zerrenda izena",
"lists.new_list_name": "Zerrenda izen berria",
"lists.no_lists_yet": "Ez duzu zerrendarik oraindik.",
"lists.no_members_yet": "Ez duzu kiderik oraindik.",
"lists.no_results_found": "Ez da emaitzarik aurkitu.",
"lists.remove_member": "Ezabatu",
"lists.replies_policy.followed": "Jarraitutako edozein erabiltzaile",
"lists.replies_policy.list": "Zerrendako kideak",
"lists.replies_policy.none": "Bat ere ez",
"lists.save": "Gorde",
"lists.search": "Bilatu",
"load_pending": "{count, plural, one {elementu berri #} other {# elementu berri}}",
"loading_indicator.label": "Kargatzen…",
@ -533,10 +504,8 @@
"mute_modal.you_wont_see_mentions": "Ez duzu ikusiko bera aipatzen duen argitalpenik.",
"mute_modal.you_wont_see_posts": "Zure argitalpenak ikus ditzake, baina ez dituzu bereak ikusiko.",
"navigation_bar.about": "Honi buruz",
"navigation_bar.account_settings": "Pasahitza eta segurtasuna",
"navigation_bar.administration": "Administrazioa",
"navigation_bar.advanced_interface": "Ireki web interfaze aurreratuan",
"navigation_bar.automated_deletion": "Bidalketa automatikoaren ezabaketa",
"navigation_bar.blocks": "Blokeatutako erabiltzaileak",
"navigation_bar.bookmarks": "Laster-markak",
"navigation_bar.direct": "Aipamen pribatuak",
@ -546,19 +515,13 @@
"navigation_bar.follow_requests": "Jarraitzeko eskaerak",
"navigation_bar.followed_tags": "Jarraitutako traolak",
"navigation_bar.follows_and_followers": "Jarraitutakoak eta jarraitzaileak",
"navigation_bar.import_export": "Inportazioa eta esportazioa",
"navigation_bar.lists": "Zerrendak",
"navigation_bar.live_feed_local": "Zuzeneko jarioa (lokala)",
"navigation_bar.live_feed_public": "Zuzeneko jarioa (publikoa)",
"navigation_bar.logout": "Amaitu saioa",
"navigation_bar.moderation": "Moderazioa",
"navigation_bar.more": "Gehiago",
"navigation_bar.mutes": "Mutututako erabiltzaileak",
"navigation_bar.opened_in_classic_interface": "Argitalpenak, kontuak eta beste orri jakin batzuk lehenespenez irekitzen dira web-interfaze klasikoan.",
"navigation_bar.preferences": "Hobespenak",
"navigation_bar.privacy_and_reach": "Pribatutasuna eta irismena",
"navigation_bar.search": "Bilatu",
"navigation_bar.search_trends": "Bilatu / Joera",
"not_signed_in_indicator.not_signed_in": "Baliabide honetara sarbidea izateko saioa hasi behar duzu.",
"notification.admin.report": "{name} erabiltzaileak {target} salatu du",
"notification.admin.report_account": "{name}-(e)k {target}-ren {count, plural, one {bidalketa bat} other {# bidalketa}} salatu zituen {category} delakoagatik",
@ -569,7 +532,6 @@
"notification.admin.sign_up.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiago} other {# erabiltzaile gehiago}} erregistratu dira",
"notification.favourite": "{name}(e)k zure bidalketa gogoko du",
"notification.favourite.name_and_others_with_link": "{name} eta <a>{count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}}</a> zure bidalketa gogoko dute",
"notification.favourite_pm": "{name}-ek zure aipamen pribatua gogokoetan jarri du",
"notification.follow": "{name}(e)k jarraitzen dizu",
"notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du",
"notification.follow_request.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zu jarraitzeko eskaera egin dute",
@ -578,7 +540,6 @@
"notification.label.private_reply": "Erantzun pribatua",
"notification.label.reply": "Erantzuna",
"notification.mention": "Aipamena",
"notification.mentioned_you": "{name}(e)k aipatu zaitu",
"notification.moderation-warning.learn_more": "Informazio gehiago",
"notification.moderation_warning": "Moderazio-abisu bat jaso duzu",
"notification.moderation_warning.action_delete_statuses": "Argitalpen batzuk kendu dira.",
@ -625,7 +586,6 @@
"notifications.column_settings.filter_bar.category": "Iragazki-barra bizkorra",
"notifications.column_settings.follow": "Jarraitzaile berriak:",
"notifications.column_settings.follow_request": "Jarraitzeko eskaera berriak:",
"notifications.column_settings.group": "Taldea",
"notifications.column_settings.mention": "Aipamenak:",
"notifications.column_settings.poll": "Inkestaren emaitzak:",
"notifications.column_settings.push": "Push jakinarazpenak",
@ -776,7 +736,6 @@
"report_notification.categories.violation": "Arau haustea",
"report_notification.categories.violation_sentence": "arau haustea",
"report_notification.open": "Ireki salaketa",
"search.clear": "Garbitu bilaketa",
"search.no_recent_searches": "Duela gutxiko bilaketarik ez",
"search.placeholder": "Bilatu",
"search.quick_action.account_search": "{x}-(r)ekin bat datozen profilak",
@ -841,8 +800,6 @@
"status.mute_conversation": "Mututu elkarrizketa",
"status.open": "Hedatu bidalketa hau",
"status.pin": "Finkatu profilean",
"status.quote_error.not_found": "Bidalketa hau ezin da erakutsi.",
"status.quote_error.pending_approval": "Bidalketa hau egile originalak onartzeko zain dago.",
"status.read_more": "Irakurri gehiago",
"status.reblog": "Bultzada",
"status.reblog_private": "Bultzada jatorrizko hartzaileei",
@ -871,11 +828,7 @@
"subscribed_languages.save": "Gorde aldaketak",
"subscribed_languages.target": "Aldatu {target}(e)n harpidetutako hizkuntzak",
"tabs_bar.home": "Hasiera",
"tabs_bar.menu": "Menua",
"tabs_bar.notifications": "Jakinarazpenak",
"tabs_bar.publish": "Bidalketa berria",
"tabs_bar.search": "Bilatu",
"terms_of_service.title": "Zerbitzuaren baldintzak",
"time_remaining.days": "{number, plural, one {egun #} other {# egun}} amaitzeko",
"time_remaining.hours": "{number, plural, one {ordu #} other {# ordu}} amaitzeko",
"time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
@ -902,8 +855,5 @@
"video.fullscreen": "Pantaila osoa",
"video.hide": "Ezkutatu bideoa",
"video.pause": "Pausatu",
"video.play": "Jo",
"video.unmute": "Soinua ezarri",
"video.volume_down": "Bolumena jaitsi",
"video.volume_up": "Bolumena Igo"
"video.play": "Jo"
}

View File

@ -564,8 +564,6 @@
"navigation_bar.follows_and_followers": "Folgers en folgjenden",
"navigation_bar.import_export": "Ymportearje en eksportearje",
"navigation_bar.lists": "Listen",
"navigation_bar.live_feed_local": "Livefeed (lokaal)",
"navigation_bar.live_feed_public": "Livefeed (iepenbier)",
"navigation_bar.logout": "Ofmelde",
"navigation_bar.moderation": "Moderaasje",
"navigation_bar.more": "Mear",
@ -805,7 +803,6 @@
"report_notification.categories.violation": "Skeinde regels",
"report_notification.categories.violation_sentence": "skeinde regels",
"report_notification.open": "Rapport iepenje",
"search.clear": "Sykopdracht wiskje",
"search.no_recent_searches": "Gjin resinte sykopdrachten",
"search.placeholder": "Sykje",
"search.quick_action.account_search": "Accounts dyt oerienkomme mei {x}",

View File

@ -6,7 +6,6 @@
"about.domain_blocks.preamble": "Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi.",
"about.domain_blocks.silenced.title": "Ɣur-s talast",
"about.domain_blocks.suspended.title": "Yettwaḥbes",
"about.language_label": "Tutlayt",
"about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.",
"about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}",
"about.rules": "Ilugan n uqeddac",
@ -238,10 +237,6 @@
"explore.trending_links": "Isallen",
"explore.trending_statuses": "Tisuffaɣ",
"explore.trending_tags": "Ihacṭagen",
"featured_carousel.next": "Uḍfiṛ",
"featured_carousel.post": "Tasuffeɣt",
"featured_carousel.previous": "Uzwir",
"featured_carousel.slide": "{index} ɣef {total}",
"filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig",
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
"filter_modal.added.short_explanation": "Tasuffeɣt-a tettwarna ɣer taggayt-a n yimsizdegen: {title}.",
@ -362,7 +357,6 @@
"lists.add_to_list": "Rnu ɣer tebdart",
"lists.add_to_lists": "Rnu {name} ɣer tebdarin",
"lists.create": "Snulfu-d",
"lists.create_list": "Snulfu-d tabdart",
"lists.delete": "Kkes tabdart",
"lists.done": "Immed",
"lists.edit": "Ẓreg tabdart",
@ -403,7 +397,6 @@
"navigation_bar.lists": "Tibdarin",
"navigation_bar.logout": "Ffeɣ",
"navigation_bar.moderation": "Aseɣyed",
"navigation_bar.more": "Ugar",
"navigation_bar.mutes": "Iseqdacen yettwasusmen",
"navigation_bar.opened_in_classic_interface": "Tisuffaɣ, imiḍanen akked isebtar-nniḍen igejdanen ldin-d s wudem amezwer deg ugrudem web aklasiki.",
"navigation_bar.preferences": "Imenyafen",
@ -617,7 +610,6 @@
"status.mute_conversation": "Sgugem adiwenni",
"status.open": "Semɣeṛ tasuffeɣt-ayi",
"status.pin": "Senteḍ-itt deg umaɣnu",
"status.quote_post_author": "Izen sɣur {name}",
"status.read_more": "Issin ugar",
"status.reblog": "Bḍu",
"status.reblogged_by": "Yebḍa-tt {name}",
@ -643,10 +635,7 @@
"status.unpin": "Kkes asenteḍ seg umaɣnu",
"subscribed_languages.save": "Sekles ibeddilen",
"tabs_bar.home": "Agejdan",
"tabs_bar.menu": "Umuɣ",
"tabs_bar.notifications": "Ilɣa",
"tabs_bar.publish": "Tasuffeɣt tamaynut",
"tabs_bar.search": "Nadi",
"terms_of_service.title": "Tiwtilin n useqdec",
"time_remaining.days": "Mazal {number, plural, one {# wass} other {# wussan}}",
"time_remaining.hours": "Mazal {number, plural, one {# usarag} other {# yisragen}}",

View File

@ -356,7 +356,6 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} partisipante} other {{counter} partisipantes}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}} oy",
"hashtag.feature": "Avalia en profil",
"hashtag.follow": "Sige etiketa",
"hashtag.mute": "Silensia #{hashtag}",
"hashtag.unfeature": "No avalia en profil",
@ -391,7 +390,6 @@
"interaction_modal.title.reblog": "Repartaja publikasyon de {name}",
"interaction_modal.title.reply": "Arisponde a publikasyon de {name}",
"interaction_modal.title.vote": "Vota en la anketa de {name}",
"interaction_modal.username_prompt": "Por enshemplo {example}",
"intervals.full.days": "{number, plural, one {# diya} other {# diyas}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
@ -444,7 +442,6 @@
"lists.delete": "Efasa lista",
"lists.done": "Fecho",
"lists.edit": "Edita lista",
"lists.list_name": "Nombre de lista",
"lists.new_list_name": "Nombre de mueva lista",
"lists.replies_policy.followed": "Kualseker utilizador segido",
"lists.replies_policy.list": "Miembros de la lista",
@ -741,7 +738,6 @@
"status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.",
"status.redraft": "Efasa i eskrive de muevo",
"status.remove_bookmark": "Kita markador",
"status.remove_favourite": "Kita de los favoritos",
"status.replied_in_thread": "Arispondo en filo",
"status.replied_to": "Arispondio a {name}",
"status.reply": "Arisponde",
@ -762,7 +758,6 @@
"subscribed_languages.save": "Guadra trokamientos",
"subscribed_languages.target": "Troka linguas abonadas para {target}",
"tabs_bar.home": "Linya prinsipala",
"tabs_bar.menu": "Menu",
"tabs_bar.notifications": "Avizos",
"tabs_bar.publish": "Mueva publikasyon",
"tabs_bar.search": "Bushkeda",

View File

@ -1,7 +1,6 @@
{
"about.blocks": "Servidores moderados",
"about.contact": "Contato:",
"about.default_locale": "Padrão",
"about.disclaimer": "Mastodon é um software de código aberto e livre, e uma marca registrada de Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Razão não disponível",
"about.domain_blocks.preamble": "O Mastodon geralmente permite que você veja o conteúdo e interaja com usuários de qualquer outro servidor no fediverso. Estas são as exceções deste servidor em específico.",
@ -9,7 +8,6 @@
"about.domain_blocks.silenced.title": "Limitado",
"about.domain_blocks.suspended.explanation": "Nenhum dado desse servidor será processado, armazenado ou trocado, impossibilitando qualquer interação ou comunicação com os usuários deste servidor.",
"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.rules": "Regras do servidor",
@ -219,11 +217,6 @@
"confirmations.delete_list.confirm": "Excluir",
"confirmations.delete_list.message": "Você tem certeza de que deseja excluir esta lista?",
"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 ao post sendo editado.",
"confirmations.discard_draft.edit.title": "Descartar mudanças no seu post?",
"confirmations.discard_draft.post.cancel": "Continuar rascunho",
"confirmations.discard_edit_media.confirm": "Descartar",
"confirmations.discard_edit_media.message": "Há mudanças não salvas na descrição ou pré-visualização da mídia. Descartar assim mesmo?",
"confirmations.follow_to_list.confirm": "Seguir e adicionar à lista",

View File

@ -363,7 +363,7 @@
"filter_modal.select_filter.title": "Фильтровать этот пост",
"filter_modal.title.status": "Фильтровать пост",
"filter_warning.matches_filter": "Соответствует фильтру «<span>{title}</span>»",
"filtered_notifications_banner.pending_requests": "От {count, plural, =0 {незнакомых вам людей} one {# человека, которого вы можете знать} other {# человек, которых вы можете знать}}",
"filtered_notifications_banner.pending_requests": "От {count, plural, =0 {не знакомых вам людей} one {# человека, которого вы можете знать} other {# человек, которых вы можете знать}}",
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
"firehose.all": "Всё вместе",
"firehose.local": "Этот сервер",

View File

@ -27,7 +27,6 @@
"account.edit_profile": "Upraviť profil",
"account.enable_notifications": "Zapnúť upozornenia na príspevky od @{name}",
"account.endorse": "Zobraziť na vlastnom profile",
"account.featured": "Zviditeľnené",
"account.featured.accounts": "Profily",
"account.featured.hashtags": "Hashtagy",
"account.featured_tags.last_status_at": "Posledný príspevok dňa {date}",

View File

@ -1,7 +1,6 @@
{
"about.blocks": "เซิร์ฟเวอร์ที่ได้รับการกลั่นกรอง",
"about.contact": "ติดต่อ:",
"about.default_locale": "ค่าเริ่มต้น",
"about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH",
"about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน",
"about.domain_blocks.preamble": "โดยทั่วไป Mastodon อนุญาตให้คุณดูเนื้อหาจากและโต้ตอบกับผู้ใช้จากเซิร์ฟเวอร์อื่นใดในจักรวาลสหพันธ์ นี่คือข้อยกเว้นที่ทำขึ้นในเซิร์ฟเวอร์นี้โดยเฉพาะ",
@ -9,7 +8,6 @@
"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": "กฎของเซิร์ฟเวอร์",
@ -21,18 +19,14 @@
"account.block_domain": "ปิดกั้นโดเมน {domain}",
"account.block_short": "ปิดกั้น",
"account.blocked": "ปิดกั้นอยู่",
"account.blocking": "กำลังปิดกั้น",
"account.cancel_follow_request": "ยกเลิกการติดตาม",
"account.copy": "คัดลอกลิงก์ไปยังโปรไฟล์",
"account.direct": "กล่าวถึง @{name} แบบส่วนตัว",
"account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์",
"account.domain_blocking": "กำลังปิดกั้นโดเมน",
"account.domain_blocking": "โดเมน",
"account.edit_profile": "แก้ไขโปรไฟล์",
"account.enable_notifications": "แจ้งเตือนฉันเมื่อ @{name} โพสต์",
"account.endorse": "แสดงในโปรไฟล์",
"account.featured": "น่าสนใจ",
"account.featured.accounts": "โปรไฟล์",
"account.featured.hashtags": "แฮชแท็ก",
"account.featured_tags.last_status_at": "โพสต์ล่าสุดเมื่อ {date}",
"account.featured_tags.last_status_never": "ไม่มีโพสต์",
"account.follow": "ติดตาม",
@ -43,7 +37,6 @@
"account.following": "กำลังติดตาม",
"account.following_counter": "{count, plural, other {{counter} กำลังติดตาม}}",
"account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร",
"account.follows_you": "ติดตามคุณ",
"account.go_to_profile": "ไปยังโปรไฟล์",
"account.hide_reblogs": "ซ่อนการดันจาก @{name}",
"account.in_memoriam": "เพื่อระลึกถึง",
@ -58,7 +51,6 @@
"account.mute_notifications_short": "ซ่อนการแจ้งเตือน",
"account.mute_short": "ซ่อน",
"account.muted": "ซ่อนอยู่",
"account.muting": "กำลังซ่อน",
"account.no_bio": "ไม่ได้ให้คำอธิบาย",
"account.open_original_page": "เปิดหน้าดั้งเดิม",
"account.posts": "โพสต์",
@ -313,14 +305,9 @@
"errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด",
"errors.unexpected_crash.report_issue": "รายงานปัญหา",
"explore.suggested_follows": "ผู้คน",
"explore.title": "กำลังนิยม",
"explore.trending_links": "ข่าว",
"explore.trending_statuses": "โพสต์",
"explore.trending_tags": "แฮชแท็ก",
"featured_carousel.next": "ถัดไป",
"featured_carousel.post": "โพสต์",
"featured_carousel.previous": "ก่อนหน้า",
"featured_carousel.slide": "{index} จาก {total}",
"filter_modal.added.context_mismatch_explanation": "หมวดหมู่ตัวกรองนี้ไม่นำไปใช้กับบริบทที่คุณได้เข้าถึงโพสต์นี้ หากคุณต้องการกรองโพสต์ในบริบทนี้ด้วย คุณจะต้องแก้ไขตัวกรอง",
"filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!",
"filter_modal.added.expired_explanation": "หมวดหมู่ตัวกรองนี้หมดอายุแล้ว คุณจะต้องเปลี่ยนวันหมดอายุสำหรับหมวดหมู่เพื่อนำไปใช้",
@ -385,10 +372,7 @@
"hashtag.counter_by_accounts": "{count, plural, other {{counter} ผู้มีส่วนร่วม}}",
"hashtag.counter_by_uses": "{count, plural, other {{counter} โพสต์}}",
"hashtag.counter_by_uses_today": "{count, plural, other {{counter} โพสต์}}วันนี้",
"hashtag.feature": "แสดงในโปรไฟล์",
"hashtag.follow": "ติดตามแฮชแท็ก",
"hashtag.mute": "ซ่อน #{hashtag}",
"hashtag.unfeature": "ไม่แสดงในโปรไฟล์",
"hashtag.unfollow": "เลิกติดตามแฮชแท็ก",
"hashtags.and_other": "…และอีก {count, plural, other {# เพิ่มเติม}}",
"hints.profiles.followers_may_be_missing": "ผู้ติดตามสำหรับโปรไฟล์นี้อาจขาดหายไป",
@ -520,10 +504,8 @@
"mute_modal.you_wont_see_mentions": "คุณจะไม่เห็นโพสต์ที่กล่าวถึงเขา",
"mute_modal.you_wont_see_posts": "เขายังคงสามารถเห็นโพสต์ของคุณ แต่คุณจะไม่เห็นโพสต์ของเขา",
"navigation_bar.about": "เกี่ยวกับ",
"navigation_bar.account_settings": "รหัสผ่านและความปลอดภัย",
"navigation_bar.administration": "การดูแล",
"navigation_bar.advanced_interface": "เปิดในส่วนติดต่อเว็บขั้นสูง",
"navigation_bar.automated_deletion": "การลบโพสต์แบบอัตโนมัติ",
"navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่",
"navigation_bar.bookmarks": "ที่คั่นหน้า",
"navigation_bar.direct": "การกล่าวถึงแบบส่วนตัว",
@ -533,15 +515,12 @@
"navigation_bar.follow_requests": "คำขอติดตาม",
"navigation_bar.followed_tags": "แฮชแท็กที่ติดตาม",
"navigation_bar.follows_and_followers": "การติดตามและผู้ติดตาม",
"navigation_bar.import_export": "การนำเข้าและการส่งออก",
"navigation_bar.lists": "รายการ",
"navigation_bar.logout": "ออกจากระบบ",
"navigation_bar.moderation": "การกลั่นกรอง",
"navigation_bar.more": "เพิ่มเติม",
"navigation_bar.mutes": "ผู้ใช้ที่ซ่อนอยู่",
"navigation_bar.opened_in_classic_interface": "จะเปิดโพสต์, บัญชี และหน้าที่เฉพาะเจาะจงอื่น ๆ เป็นค่าเริ่มต้นในส่วนติดต่อเว็บแบบคลาสสิก",
"navigation_bar.preferences": "การกำหนดลักษณะ",
"navigation_bar.privacy_and_reach": "ความเป็นส่วนตัวและการเข้าถึง",
"navigation_bar.search": "ค้นหา",
"not_signed_in_indicator.not_signed_in": "คุณจำเป็นต้องเข้าสู่ระบบเพื่อเข้าถึงทรัพยากรนี้",
"notification.admin.report": "{name} ได้รายงาน {target}",
@ -768,7 +747,6 @@
"report_notification.categories.violation": "การละเมิดกฎ",
"report_notification.categories.violation_sentence": "การละเมิดกฎ",
"report_notification.open": "รายงานที่เปิด",
"search.clear": "ล้างการค้นหา",
"search.no_recent_searches": "ไม่มีการค้นหาล่าสุด",
"search.placeholder": "ค้นหา",
"search.quick_action.account_search": "โปรไฟล์ที่ตรงกับ {x}",
@ -834,7 +812,6 @@
"status.mute_conversation": "ซ่อนการสนทนา",
"status.open": "ขยายโพสต์นี้",
"status.pin": "ปักหมุดในโปรไฟล์",
"status.quote_post_author": "โพสต์โดย {name}",
"status.read_more": "อ่านเพิ่มเติม",
"status.reblog": "ดัน",
"status.reblog_private": "ดันด้วยการมองเห็นดั้งเดิม",
@ -864,10 +841,7 @@
"subscribed_languages.save": "บันทึกการเปลี่ยนแปลง",
"subscribed_languages.target": "เปลี่ยนภาษาที่บอกรับสำหรับ {target}",
"tabs_bar.home": "หน้าแรก",
"tabs_bar.menu": "เมนู",
"tabs_bar.notifications": "การแจ้งเตือน",
"tabs_bar.publish": "โพสต์ใหม่",
"tabs_bar.search": "ค้นหา",
"terms_of_service.title": "เงื่อนไขการให้บริการ",
"time_remaining.days": "เหลืออีก {number, plural, other {# วัน}}",
"time_remaining.hours": "เหลืออีก {number, plural, other {# ชั่วโมง}}",

View File

@ -218,9 +218,6 @@
"confirmations.delete_list.confirm": "删除",
"confirmations.delete_list.message": "确定要永久删除此列表吗?",
"confirmations.delete_list.title": "确定要删除列表?",
"confirmations.discard_draft.confirm": "放弃并继续",
"confirmations.discard_draft.edit.cancel": "恢复编辑",
"confirmations.discard_draft.post.cancel": "恢复草稿",
"confirmations.discard_edit_media.confirm": "丢弃",
"confirmations.discard_edit_media.message": "你还有未保存的媒体描述或预览修改,仍要丢弃吗?",
"confirmations.follow_to_list.confirm": "关注并添加到列表",

View File

@ -28,7 +28,7 @@ class AnnualReport::Archetype < AnnualReport::Source
end
def polls_count
@polls_count ||= report_statuses.only_polls.count
@polls_count ||= report_statuses.where.not(poll_id: nil).count
end
def reblogs_count
@ -36,7 +36,7 @@ class AnnualReport::Archetype < AnnualReport::Source
end
def replies_count
@replies_count ||= report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count
@replies_count ||= report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count
end
def standalone_count

View File

@ -18,7 +18,7 @@ class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source
private
def commonly_interacted_with_accounts
report_statuses.not_replying_to_account(@account).group(:in_reply_to_account_id).having(minimum_interaction_count).order(count_all: :desc).limit(SET_SIZE).count
report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having(minimum_interaction_count).order(count_all: :desc).limit(SET_SIZE).count
end
def minimum_interaction_count

View File

@ -2,44 +2,20 @@
class AnnualReport::TopStatuses < AnnualReport::Source
def generate
top_reblogs = base_scope.order(reblogs_count: :desc).first&.id
top_favourites = base_scope.where.not(id: top_reblogs).order(favourites_count: :desc).first&.id
top_replies = base_scope.where.not(id: [top_reblogs, top_favourites]).order(replies_count: :desc).first&.id
{
top_statuses: {
by_reblogs: status_identifier(most_reblogged_status),
by_favourites: status_identifier(most_favourited_status),
by_replies: status_identifier(most_replied_status),
by_reblogs: top_reblogs&.to_s,
by_favourites: top_favourites&.to_s,
by_replies: top_replies&.to_s,
},
}
end
private
def status_identifier(status)
status.id.to_s if status.present?
end
def most_reblogged_status
base_scope
.order(reblogs_count: :desc)
.first
end
def most_favourited_status
base_scope
.excluding(most_reblogged_status)
.order(favourites_count: :desc)
.first
end
def most_replied_status
base_scope
.excluding(most_reblogged_status, most_favourited_status)
.order(replies_count: :desc)
.first
end
def base_scope
report_statuses
.public_visibility
.joins(:status_stat)
report_statuses.public_visibility.joins(:status_stat)
end
end

View File

@ -6,7 +6,7 @@ class AnnualReport::TypeDistribution < AnnualReport::Source
type_distribution: {
total: report_statuses.count,
reblogs: report_statuses.only_reblogs.count,
replies: report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count,
replies: report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count,
standalone: report_statuses.without_replies.without_reblogs.count,
},
}

View File

@ -196,8 +196,6 @@ class SignedRequest
return if body_digest == received_digest
raise Mastodon::SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{received_digest}"
rescue Starry::ParseError
raise Mastodon::MalformedHeaderError, 'Content-Digest could not be parsed. It does not contain a valid RFC8941 dictionary.'
end
def created_time

View File

@ -138,7 +138,10 @@ class Account < ApplicationRecord
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) }
scope :recent, -> { reorder(id: :desc) }
scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) }
scope :non_automated, -> { where.not(actor_type: AUTOMATED_ACTOR_TYPES) }
scope :groups, -> { where(actor_type: 'Group') }
scope :alphabetic, -> { order(domain: :asc, username: :asc) }
scope :matches_uri_prefix, ->(value) { where(arel_table[:uri].matches("#{sanitize_sql_like(value)}/%", false, true)).or(where(uri: value)) }
scope :matches_username, ->(value) { where('lower((username)::text) LIKE lower(?)', "#{value}%") }
scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) }

View File

@ -161,7 +161,7 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
end
def without_poll_scope
Status.without_polls
Status.where(poll_id: nil)
end
def without_popular_scope

View File

@ -4,8 +4,14 @@ module FollowLimitable
extend ActiveSupport::Concern
included do
validates_with FollowLimitValidator, on: :create, unless: :bypass_follow_limit
validates_with FollowLimitValidator, on: :create, unless: :bypass_follow_limit?
end
attribute :bypass_follow_limit, :boolean, default: false
def bypass_follow_limit=(value)
@bypass_follow_limit = value
end
def bypass_follow_limit?
@bypass_follow_limit
end
end

View File

@ -24,7 +24,7 @@ class GeneratedAnnualReport < ApplicationRecord
end
def view!
touch(:viewed_at)
update!(viewed_at: Time.now.utc)
end
def account_ids

View File

@ -121,10 +121,7 @@ class Status < ApplicationRecord
scope :without_replies, -> { not_reply.or(reply_to_account) }
scope :not_reply, -> { where(reply: false) }
scope :only_reblogs, -> { where.not(reblog_of_id: nil) }
scope :only_polls, -> { where.not(poll_id: nil) }
scope :without_polls, -> { where(poll_id: nil) }
scope :reply_to_account, -> { where(arel_table[:in_reply_to_account_id].eq arel_table[:account_id]) }
scope :not_replying_to_account, ->(account) { where.not(in_reply_to_account: account) }
scope :without_reblogs, -> { where(statuses: { reblog_of_id: nil }) }
scope :tagged_with, ->(tag_ids) { joins(:statuses_tags).where(statuses_tags: { tag_id: tag_ids }) }
scope :not_excluded_by_account, ->(account) { where.not(account_id: account.excluded_from_timeline_account_ids) }

View File

@ -49,8 +49,8 @@ class Tag < ApplicationRecord
validates :name, presence: true, format: { with: HASHTAG_NAME_RE }
validates :display_name, format: { with: HASHTAG_NAME_RE }
validate :validate_name_change, on: :update, if: :name_changed?
validate :validate_display_name_change, on: :update, if: :display_name_changed?
validate :validate_name_change, if: -> { !new_record? && name_changed? }
validate :validate_display_name_change, if: -> { !new_record? && display_name_changed? }
scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) }
scope :usable, -> { where(usable: [true, nil]) }

View File

@ -35,7 +35,6 @@ class UserSettings
setting :expand_content_warnings, default: false
setting :display_media, default: 'default', in: %w(default show_all hide_all)
setting :auto_play, default: false
setting :emoji_style, default: 'auto', in: %w(auto native twemoji)
end
namespace :notification_emails do

View File

@ -31,17 +31,6 @@
label: I18n.t('simple_form.labels.defaults.setting_theme'),
wrapper: :with_label
- if Mastodon::Feature.modern_emojis_enabled?
.fields-group
= f.simple_fields_for :settings, current_user.settings do |ff|
= ff.input :'web.emoji_style',
collection: %w(auto twemoji native),
include_blank: false,
hint: I18n.t('simple_form.hints.defaults.setting_emoji_style'),
label: I18n.t('simple_form.labels.defaults.setting_emoji_style'),
label_method: ->(emoji_style) { I18n.t("emoji_styles.#{emoji_style}", default: emoji_style) },
wrapper: :with_label
- unless I18n.locale == :en
.flash-message.translation-prompt
#{t 'appearance.localization.body'} #{content_tag(:a, t('appearance.localization.guide_link_text'), href: t('appearance.localization.guide_link'), target: '_blank', rel: 'noopener')}

View File

@ -1,5 +1,5 @@
shared:
enabled: <%= ENV.fetch('CACHE_BUSTER_ENABLED', 'false') == 'true' %>
secret_header: <%= ENV.fetch('CACHE_BUSTER_SECRET_HEADER', nil)&.to_json %>
secret: <%= ENV.fetch('CACHE_BUSTER_SECRET', nil)&.to_json %>
secret_header: <%= ENV.fetch('CACHE_BUSTER_SECRET_HEADER', nil) %>
secret: <%= ENV.fetch('CACHE_BUSTER_SECRET', nil) %>
http_method: <%= ENV.fetch('CACHE_BUSTER_HTTP_METHOD', 'GET') %>

View File

@ -2,14 +2,14 @@
# keys are added here.
production:
delivery_method: <%= ENV.fetch('SMTP_DELIVERY_METHOD', 'smtp') %>
from_address: <%= ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost')&.to_json %>
reply_to: <%= ENV.fetch('SMTP_REPLY_TO', nil)&.to_json %>
return_path: <%= ENV.fetch('SMTP_RETURN_PATH', nil)&.to_json %>
from_address: <%= ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost') %>
reply_to: <%= ENV.fetch('SMTP_REPLY_TO', nil) %>
return_path: <%= ENV.fetch('SMTP_RETURN_PATH', nil) %>
smtp_settings:
port: <%= ENV.fetch('SMTP_PORT', nil) %>
address: <%= ENV.fetch('SMTP_SERVER', nil)&.to_json %>
user_name: <%= ENV.fetch('SMTP_LOGIN', nil)&.to_json %>
password: <%= ENV.fetch('SMTP_PASSWORD', nil)&.to_json %>
address: <%= ENV.fetch('SMTP_SERVER', nil) %>
user_name: <%= ENV.fetch('SMTP_LOGIN', nil) %>
password: <%= ENV.fetch('SMTP_PASSWORD', nil) %>
domain: <%= ENV.fetch('SMTP_DOMAIN', ENV.fetch('LOCAL_DOMAIN', nil)) %>
authentication: <%= ENV.fetch('SMTP_AUTH_METHOD', 'plain') %>
ca_file: <%= ENV.fetch('SMTP_CA_FILE', '/etc/ssl/certs/ca-certificates.crt') %>
@ -22,9 +22,9 @@ production:
bulk_mail:
smtp_settings:
port: <%= ENV.fetch('BULK_SMTP_PORT', nil) %>
address: <%= ENV.fetch('BULK_SMTP_SERVER', nil)&.to_json %>
user_name: <%= ENV.fetch('BULK_SMTP_LOGIN', nil)&.to_json %>
password: <%= ENV.fetch('BULK_SMTP_PASSWORD', nil)&.to_json %>
address: <%= ENV.fetch('BULK_SMTP_SERVER', nil) %>
user_name: <%= ENV.fetch('BULK_SMTP_LOGIN', nil) %>
password: <%= ENV.fetch('BULK_SMTP_PASSWORD', nil) %>
domain: <%= ENV.fetch('BULK_SMTP_DOMAIN', ENV.fetch('LOCAL_DOMAIN', nil)) %>
authentication: <%= ENV.fetch('BULK_SMTP_AUTH_METHOD', 'plain') %>
ca_file: <%= ENV.fetch('BULK_SMTP_CA_FILE', '/etc/ssl/certs/ca-certificates.crt') %>

View File

@ -5,14 +5,24 @@ require 'linzer/message/adapter/http_gem/response'
module Linzer::Message::Adapter
module ActionDispatch
class Response < Linzer::Message::Adapter::Generic::Response
private
class Response < Linzer::Message::Adapter::Abstract
def initialize(operation, **_options) # rubocop:disable Lint/MissingSuper
@operation = operation
end
def header(name)
@operation.headers[name]
end
def attach!(signature)
signature.to_h.each { |h, v| @operation.headers[h] = v }
end
# Incomplete, but sufficient for FASP
def derived(name)
case name.value
when '@status' then @operation.status
end
def [](field_name)
return @operation.status if field_name == '@status'
@operation.headers[field_name]
end
end
end

View File

@ -3,7 +3,7 @@
Rails.application.config.to_prepare do
custom_css = begin
Setting.custom_css
rescue # Running without a cache, database, not migrated, no connection, etc
rescue ActiveRecord::AdapterError # Running without a database, not migrated, no connection, etc
nil
end

View File

@ -49,14 +49,8 @@ en-GB:
attributes:
reblog:
taken: of post already exists
terms_of_service:
attributes:
effective_date:
too_soon: is too soon, must be later than %{date}
user:
attributes:
date_of_birth:
below_limit: is below the age limit
email:
blocked: uses a disallowed e-mail provider
unreachable: does not seem to exist

View File

@ -49,14 +49,8 @@ eu:
attributes:
reblog:
taken: mezu honentzat bazegoen aurretik
terms_of_service:
attributes:
effective_date:
too_soon: goizegi da, %{date} baino geroagokoa izan behar da
user:
attributes:
date_of_birth:
below_limit: adinaren mugaren azpitik dago
email:
blocked: onartu gabeko e-posta hornitzaile bat erabiltzen du
unreachable: dirudienez ez da existitzen

View File

@ -566,13 +566,6 @@ bg:
all: Всичко
limited: Ограничено
title: Mодериране
moderation_notes:
create: Добавяне на бележка за модериране
created_msg: Успешно създадена бележка за модериране на екземпляр!
description_html: Прегледайте и оставете бележки за други модератори и за вас в бъдеще
destroyed_msg: Успешно изтрита бележка за модериране на екземпляр!
placeholder: Сведенията за този екземпляр, предприети действия, или всичко друго, което ще ви помогне да модерирате този екземпляр в бъдеще.
title: Бележки за модериране
private_comment: Личен коментар
public_comment: Публичен коментар
purge: Чистка
@ -781,16 +774,11 @@ bg:
title: Роли
rules:
add_new: Добавяне на правило
add_translation: Добавяне на превод
delete: Изтриване
description_html: Дори повечето хора да отбелязват, че са прочели и са съгласни с условията на услугата, обикновено хората не ги четат, докато не се сблъскат с проблем. <strong>Улеснете четенето на правилата за сървъра си, представяйки ги като списък с точки.</strong> Опитайте да се придържате към кратки и прости правила, но не ги разпилявайте в премного точки.
edit: Промяна на правило
empty: Още няма определени правила на сървъра.
move_down: Преместване надолу
move_up: Преместване нагоре
title: Сървърни правила
translation: Превод
translations: Преводи
settings:
about:
manage_rules: Управление на правилата на сървъра
@ -816,7 +804,6 @@ bg:
discovery:
follow_recommendations: Препоръки за следване
preamble: За потребители, които са нови и не познават никого в Mastodon, показването на интересно съдържание е ключово. Настройте начина, по който различни функции по откриване на съдържание работят на вашия сървър.
privacy: Поверителност
profile_directory: Указател на профила
public_timelines: Публични хронологии
publish_statistics: Публикуване на статистиката
@ -903,8 +890,6 @@ bg:
system_checks:
database_schema_check:
message_html: Има миграции на базата данни, които чакат да бъдат изпълнени. Моля, изпълнете ги, за да осигурите изправността на приложението
elasticsearch_analysis_index_mismatch:
message_html: Настройките за анализиращия индекс Elasticsearch са остарели. Пуснете <code>tootctl search deploy --only-mapping --only=%{value}</code>
elasticsearch_health_red:
message_html: Клъстерът Elasticsearch е нездрав (червено състояние), функциите за търсене не са налични
elasticsearch_health_yellow:
@ -1856,10 +1841,6 @@ bg:
limit: Вече сте закачили максималния брой публикации
ownership: Публикация на някого другиго не може да бъде закачена
reblog: Раздуване не може да бъде закачано
quote_policies:
followers: Последователи и споменати потребители
nobody: Само споменатите потребители
public: Всеки
title: "%{name}: „%{quote}“"
visibilities:
direct: Директно
@ -1913,11 +1894,6 @@ bg:
does_not_match_previous_name: не съвпада с предишното име
terms_of_service:
title: Условия на услугата
terms_of_service_interstitial:
future_preamble_html: Правим някои промени в условията на услугата ни, което ще влезе в сила на <strong>%{date}</strong>. Насърчаваме ви да разгледате обновените условия.
past_preamble_html: Променихме условията на услугата ни от последното ви посещение. Насърчаваме ви да разгледате обновените условия.
review_link: Разглеждане на условията на услугата
title: Условията на услугата на %{domain} се променят
themes:
contrast: Mastodon (висок контраст)
default: Mastodon (тъмно)

View File

@ -396,9 +396,6 @@ br:
created_at: Deiziad
title_actions:
none: Diwall
emoji_styles:
auto: Emgefreek
twemoji: Twemoji
exports:
archive_takeout:
date: Deiziad

View File

@ -1387,10 +1387,6 @@ cs:
basic_information: Základní informace
hint_html: "<strong>Nastavte si, co lidé uvidí na vašem veřejném profilu a vedle vašich příspěvků.</strong> Ostatní lidé vás budou spíše sledovat a komunikovat s vámi, když budete mít vyplněný profil a profilový obrázek."
other: Další
emoji_styles:
auto: Auto
native: Výchozí
twemoji: Twemoji
errors:
'400': Žádost, kterou jste odeslali, byla neplatná nebo poškozená.
'403': Nejste oprávněni tuto stránku zobrazit.

View File

@ -1006,7 +1006,7 @@ da:
one: Send %{display_count} e-mail
other: Send %{display_count} e-mails
title: Forhåndsvis Tjenestevilkår-underretning
publish: Publicér
publish: Udgiv
published_on_html: Udgivet pr. %{date}
save_draft: Gem udkast
title: Tjenestevilkår
@ -1347,12 +1347,8 @@ da:
your_appeal_rejected: Din appel er afvist
edit_profile:
basic_information: Oplysninger
hint_html: "<strong>Tilpas, hvad folk ser på din offentlige profil og ved siden af dine indlæg.</strong> Andre personer er mere tilbøjelige til at følge dig tilbage og interagere med dig, når du har en udfyldt profil og et profilbillede."
hint_html: "<strong>Tilpas hvad folk ser på din offentlige profil og ved siden af dine indlæg.</strong> Andre personer vil mere sandsynligt følge dig tilbage og interagere med dig, når du har en udfyldt profil og et profilbillede."
other: Andre
emoji_styles:
auto: Auto
native: Indbygget
twemoji: Twemoji
errors:
'400': Din indsendte anmodning er ugyldig eller fejlbehæftet.
'403': Du har ikke tilladelse til at se denne side.
@ -1489,8 +1485,8 @@ da:
one: Man er ved at <strong>erstatte sine lister</strong> med indhold fra <strong>%{filename}</strong>. <strong>%{count} konto</strong> føjes til nye lister.
other: Man er ved at <strong>erstatte sine lister</strong> med indhold fra <strong>%{filename}</strong>. Op til <strong>%{count} konti</strong> føjes til nye lister.
muting_html:
one: Du er ved at <strong>erstatte din liste over en skjult konto</strong> med op til <strong>%{count} konto</strong> fra <strong>%{filename}</strong>.
other: Du er ved at <strong>erstatte din liste over skjulte konti</strong> med op til <strong>%{count} konti</strong> fra <strong>%{filename}</strong>.
one: Man er ved at <strong>sin liste over en tavsgjort konto</strong> med <strong>%{count} konto</strong> fra <strong>%{filename}</strong>.
other: Du er ved at <strong>erstatte din liste over skjulte kontoer</strong> med op til <strong>%{count} kontoer</strong> fra <strong>%{filename}</strong>.
preambles:
blocking_html:
one: Man er ved at <strong>blokere</strong> <strong>%{count} konto</strong> fra <strong>%{filename}</strong>.
@ -1508,8 +1504,8 @@ da:
one: Man er ved at tilføje <strong>%{count} konto</strong> fra <strong>%{filename}</strong> til sine <strong>lister</strong>. Nye lister oprettes, hvis der ikke findes nogen liste at tilføje til.
other: Man er ved at tilføje <strong>%{count} konti</strong> fra <strong>%{filename}</strong> til sine <strong>lister</strong>. Nye lister oprettes, hvis der ikke findes nogen liste at tilføje til.
muting_html:
one: Du er ved at <strong>skjule</strong> op til <strong>%{count} konto</strong> fra <strong>%{filename}</strong>.
other: Du er ved at <strong>skjule</strong> op til <strong>%{count} konti</strong> fra <strong>%{filename}</strong>.
one: Man er ved at <strong>tavsgøre</strong> <strong>%{count} konto</strong> fra <strong>%{filename}</strong>.
other: Du er ved at <strong>skjule</strong> op til <strong>%{count} kontoer</strong> fra <strong>%{filename}</strong>.
preface: Du kan importere data, du har eksporteret fra en anden server, såsom en liste over folk du følger eller blokerer.
recent_imports: Seneste importer
states:
@ -1526,11 +1522,11 @@ da:
domain_blocking: Importerer blokerede konti
following: Importerer fulgte konti
lists: Import af lister
muting: Importerer skjulte konti
muting: Importerer skjulte kontoer
type: Importtype
type_groups:
constructive: Følger og Bogmærker
destructive: Blokerede og skjulte konti
destructive: Blokerede og skjulte kontoer
types:
blocking: Blokeringsliste
bookmarks: Bogmærker
@ -1632,7 +1628,7 @@ da:
title: Moderation
move_handler:
carry_blocks_over_text: Denne bruger er flyttet fra %{acct}, som du har haft blokeret.
carry_mutes_over_text: Denne bruger flyttede fra %{acct}, som du havde skjult.
carry_mutes_over_text: Denne bruger er flyttet fra %{acct}, som du har haft skjult.
copy_account_note_text: 'Denne bruger er flyttet fra %{acct}, hvor dine tidligere noter om dem var:'
navigation:
toggle_menu: Åbn/luk menu
@ -1836,7 +1832,7 @@ da:
profile: Offentlig profil
relationships: Følger og følgere
severed_relationships: Afbrudte forhold
statuses_cleanup: Automatiseret sletning af indlæg
statuses_cleanup: Auto-indlægssletning
strikes: Moderationsadvarsler
two_factor_authentication: Tofaktorgodkendelse
webauthn_authentication: Sikkerhedsnøgler
@ -1909,9 +1905,9 @@ da:
keep_polls: Behold afstemninger
keep_polls_hint: Sletter ingen af dine afstemninger
keep_self_bookmark: Behold bogmærkede indlæg
keep_self_bookmark_hint: Sletter ikke dine egne indlæg, hvis du har bogmærket dem
keep_self_bookmark_hint: Sletter ikke dine egne indlæg, såfremt de er bogmærket
keep_self_fav: Behold favoritmarkerede indlæg
keep_self_fav_hint: Sletter ikke dine egne indlæg, hvis du har favoritmarkeret dem
keep_self_fav_hint: Sletter ikke dine egne indlæg, såfremt de er favoritmarkeret
min_age:
'1209600': 2 uger
'15778476': 6 måneder

View File

@ -1349,10 +1349,6 @@ de:
basic_information: Allgemeine Informationen
hint_html: "<strong>Bestimme, was andere auf deinem öffentlichen Profil und neben deinen Beiträgen sehen können.</strong> Wenn du ein Profilbild festlegst und dein Profil vervollständigst, werden andere eher mit dir interagieren und dir folgen."
other: Andere
emoji_styles:
auto: Automatisch
native: Nativ
twemoji: Twemoji
errors:
'400': Die Anfrage, die du gestellt hast, war ungültig oder fehlerhaft.
'403': Dir fehlt die Berechtigung, diese Seite aufzurufen.
@ -1944,7 +1940,7 @@ de:
contrast: Mastodon (Hoher Kontrast)
default: Mastodon (Dunkel)
mastodon-light: Mastodon (Hell)
system: Automatisch (wie Betriebssystem)
system: Automatisch (mit System synchronisieren)
time:
formats:
default: "%d. %b %Y, %H:%M Uhr"

View File

@ -49,14 +49,14 @@ vi:
title: Đổi lại mật khẩu
two_factor_disabled:
explanation: Đăng nhập bây giờ chỉ có thể sử dụng địa chỉ email và mật khẩu.
subject: 'Mastodon: Xác thực 2 bước đã bị vô hiệu hóa'
subtitle: Xác thực 2 bước cho tài khoản của bạn đã bị vô hiệu hóa.
title: Vô hiệu hóa xác thực 2 bước
subject: 'Mastodon: Xác minh 2 bước đã bị vô hiệu hóa'
subtitle: Xác minh hai bước cho tài khoản của bạn đã bị vô hiệu hóa.
title: Vô hiệu hóa xác minh 2 bước
two_factor_enabled:
explanation: Cần có mã token được tạo bởi ứng dụng TOTP được ghép nối để đăng nhập.
subject: 'Mastodon: Kích hoạt xác thực 2 bước'
subtitle: Xác thực 2 bước đã được bật cho tài khoản của bạn.
title: Kích hoạt xác thực 2 bước
subject: 'Mastodon: Kích hoạt xác minh 2 bước'
subtitle: Xác minh hai bước đã được bật cho tài khoản của bạn.
title: Kích hoạt xác minh 2 bước
two_factor_recovery_codes_changed:
explanation: Các mã khôi phục trước đó đã bị vô hiệu hóa và thay bằng mã mới.
subject: 'Mastodon: Mã khôi phục xác thực hai yếu tố đã được tạo lại'

View File

@ -29,7 +29,7 @@ cs:
edit:
title: Upravit aplikaci
form:
error: A jéje! Zkontrolujte formulář pro případné chyby
error: A jéje! Zkontrolujte ve formuláři případné chyby
help:
native_redirect_uri: Pro místní testy použijte %{native_redirect_uri}
redirect_uri: Jedno URI na každý řádek

View File

@ -130,11 +130,11 @@ da:
crypto: Ende-til-ende kryptering
favourites: Favoritter
filters: Filtre
follow: Fulgte, skjulte og blokerede konti
follow: Fulgte, skjjulte og blokerede kontoer
follows: Følger
lists: Lister
media: Medievedhæftninger
mutes: Skjulte
mutes: Skjulte kontoer
notifications: Notifikationer
profile: Din Mastodon-profil
push: Push-notifikationer
@ -177,7 +177,7 @@ da:
read:filters: se dine filtre
read:follows: se dine følger
read:lists: se dine lister
read:mutes: se dine skjulte konti
read:mutes: se dine skjulte kontoer
read:notifications: se dine notifikationer
read:reports: se dine anmeldelser
read:search: søg på dine vegne

View File

@ -309,7 +309,6 @@ en-GB:
title: Audit log
unavailable_instance: "(domain name unavailable)"
announcements:
back: Back to announcements
destroyed_msg: Announcement successfully deleted!
edit:
title: Edit announcement
@ -318,10 +317,6 @@ en-GB:
new:
create: Create announcement
title: New announcement
preview:
disclaimer: As users cannot opt out of them, email notifications should be limited to important announcements such as personal data breach or server closure notifications.
explanation_html: 'The email will be sent to <strong>%{display_count} users</strong>. The following text will be included in the e-mail:'
title: Preview announcement notification
publish: Publish
published_msg: Announcement successfully published!
scheduled_for: Scheduled for %{time}
@ -480,36 +475,6 @@ en-GB:
new:
title: Import domain blocks
no_file: No file selected
fasp:
debug:
callbacks:
created_at: Created at
delete: Delete
ip: IP address
request_body: Request body
title: Debug Callbacks
providers:
active: Active
base_url: Base URL
callback: Callback
delete: Delete
edit: Edit Provider
finish_registration: Finish registration
name: Name
providers: Providers
public_key_fingerprint: Public key fingerprint
registration_requested: Registration requested
registrations:
confirm: Confirm
description: You received a registration from a FASP. Reject it if you did not initiate this. If you initiated this, carefully compare name and key fingerprint before confirming the registration.
reject: Reject
title: Confirm FASP Registration
save: Save
select_capabilities: Select Capabilities
sign_in: Sign In
status: Status
title: Fediverse Auxiliary Service Providers
title: FASP
follow_recommendations:
description_html: "<strong>Follow recommendations help new users quickly find interesting content</strong>. When a user has not interacted with others enough to form personalised follow recommendations, these accounts are recommended instead. They are re-calculated on a daily basis from a mix of accounts with the highest recent engagements and highest local follower counts for a given language."
language: For language
@ -578,13 +543,6 @@ en-GB:
all: All
limited: Limited
title: Moderation
moderation_notes:
create: Add Moderation Note
created_msg: Instance moderation note successfully created!
description_html: View and leave notes for other moderators and your future self
destroyed_msg: Instance moderation note successfully deleted!
placeholder: Information about this instance, actions taken, or anything else that will help you moderate this instance in the future.
title: Moderation Notes
private_comment: Private comment
public_comment: Public comment
purge: Purge
@ -793,26 +751,17 @@ en-GB:
title: Roles
rules:
add_new: Add rule
add_translation: Add translation
delete: Delete
description_html: While most claim to have read and agree to the terms of service, usually people do not read through until after a problem arises. <strong>Make it easier to see your server's rules at a glance by providing them in a flat bullet point list.</strong> Try to keep individual rules short and simple, but try not to split them up into many separate items either.
edit: Edit rule
empty: No server rules have been defined yet.
move_down: Move down
move_up: Move up
title: Server rules
translation: Translation
translations: Translations
translations_explanation: You can optionally add translations for the rules. The default value will be shown if no translated version is available. Please always ensure any provided translation is in sync with the default value.
settings:
about:
manage_rules: Manage server rules
preamble: Provide in-depth information about how the server is operated, moderated, funded.
rules_hint: There is a dedicated area for rules that your users are expected to adhere to.
title: About
allow_referrer_origin:
desc: When your users click links to external sites, their browser may send the address of your Mastodon server as the referrer. Disable this if this would uniquely identify your users, e.g. if this is a personal Mastodon server.
title: Allow external sites to see your Mastodon server as a traffic source
appearance:
preamble: Customise Mastodon's web interface.
title: Appearance
@ -832,7 +781,6 @@ en-GB:
discovery:
follow_recommendations: Follow recommendations
preamble: Surfacing interesting content is instrumental in onboarding new users who may not know anyone Mastodon. Control how various discovery features work on your server.
privacy: Privacy
profile_directory: Profile directory
public_timelines: Public timelines
publish_statistics: Publish statistics
@ -919,8 +867,6 @@ en-GB:
system_checks:
database_schema_check:
message_html: There are pending database migrations. Please run them to ensure the application behaves as expected
elasticsearch_analysis_index_mismatch:
message_html: Elasticsearch index analyser settings are outdated. Please run <code>tootctl search deploy --only-mapping --only=%{value}</code>
elasticsearch_health_red:
message_html: Elasticsearch cluster is unhealthy (red status), search features are unavailable
elasticsearch_health_yellow:
@ -992,7 +938,6 @@ en-GB:
chance_to_review_html: "<strong>The generated terms of service will not be published automatically.</strong> You will have a chance to review the results. Please fill in the necessary details to proceed."
explanation_html: The terms of service template provided is for informational purposes only, and should not be construed as legal advice on any subject matter. Please consult with your own legal counsel on your situation and specific legal questions you have.
title: Terms of Service Setup
going_live_on_html: Live, effective %{date}
history: History
live: Live
no_history: There are no recorded changes of the terms of service yet.
@ -1349,10 +1294,6 @@ en-GB:
basic_information: Basic information
hint_html: "<strong>Customise what people see on your public profile and next to your posts.</strong> Other people are more likely to follow you back and interact with you when you have a filled out profile and a profile picture."
other: Other
emoji_styles:
auto: Auto
native: Native
twemoji: Twemoji
errors:
'400': The request you submitted was invalid or malformed.
'403': You don't have permission to view this page.
@ -1878,10 +1819,6 @@ en-GB:
limit: You have already pinned the maximum number of posts
ownership: Someone else's post cannot be pinned
reblog: A boost cannot be pinned
quote_policies:
followers: Followers and mentioned users
nobody: Only mentioned users
public: Everyone
title: '%{name}: "%{quote}"'
visibilities:
direct: Direct
@ -1935,11 +1872,6 @@ en-GB:
does_not_match_previous_name: does not match the previous name
terms_of_service:
title: Terms of Service
terms_of_service_interstitial:
future_preamble_html: We're making some changes to our terms of service, which will be effective on <strong>%{date}</strong>. We encourage you to review the updated terms.
past_preamble_html: We have changed our terms of service since your last visit. We encourage you to review the updated terms.
review_link: Review terms of service
title: The terms of service of %{domain} are changing
themes:
contrast: Mastodon (High contrast)
default: Mastodon (Dark)
@ -1971,10 +1903,6 @@ en-GB:
recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. <strong>Keep the recovery codes safe</strong>. For example, you may print them and store them with other important documents.
webauthn: Security keys
user_mailer:
announcement_published:
description: 'The administrators of %{domain} are making an announcement:'
subject: Service announcement
title: "%{domain} service announcement"
appeal_approved:
action: Account Settings
explanation: The appeal of the strike against your account on %{strike_date} that you submitted on %{appeal_date} has been approved. Your account is once again in good standing.
@ -2007,8 +1935,6 @@ en-GB:
terms_of_service_changed:
agreement: By continuing to use %{domain}, you are agreeing to these terms. If you disagree with the updated terms, you may terminate your agreement with %{domain} at any time by deleting your account.
changelog: 'At a glance, here is what this update means for you:'
description: 'You are receiving this e-mail because we''re making some changes to our terms of service at %{domain}. These updates will take effect on %{date}. We encourage you to review the updated terms in full here:'
description_html: You are receiving this e-mail because we're making some changes to our terms of service at %{domain}. These updates will take effect on <strong>%{date}</strong>. We encourage you to review the <a href="%{path}" target="_blank">updated terms in full here</a>.
sign_off: The %{domain} team
subject: Updates to our terms of service
subtitle: The terms of service of %{domain} are changing

View File

@ -1349,10 +1349,6 @@ en:
basic_information: Basic information
hint_html: "<strong>Customize what people see on your public profile and next to your posts.</strong> Other people are more likely to follow you back and interact with you when you have a filled out profile and a profile picture."
other: Other
emoji_styles:
auto: Auto
native: Native
twemoji: Twemoji
errors:
'400': The request you submitted was invalid or malformed.
'403': You don't have permission to view this page.

View File

@ -1349,10 +1349,6 @@ es-AR:
basic_information: Información básica
hint_html: "<strong>Personalizá lo que la gente ve en tu perfil público y junto a tus publicaciones.</strong> Es más probable que otras personas te sigan e interactúen con vos cuando tengas un perfil completo y una foto de perfil."
other: Otros
emoji_styles:
auto: Automático
native: Nativo
twemoji: Twemoji
errors:
'400': La solicitud que enviaste no era válida o estaba corrompida.
'403': No tenés permiso para ver esta página.

View File

@ -1349,10 +1349,6 @@ es-MX:
basic_information: Información básica
hint_html: "<strong>Personaliza lo que la gente ve en tu perfil público junto a tus publicaciones.</strong> Es más probable que otras personas te sigan e interactúen contigo cuando completes tu perfil y agregues una foto."
other: Otro
emoji_styles:
auto: Automático
native: Nativo
twemoji: Twemoji
errors:
'400': La solicitud que has enviado no es valida o estaba malformada.
'403': No tienes permiso para acceder a esta página.

View File

@ -1349,10 +1349,6 @@ es:
basic_information: Información básica
hint_html: "<strong>Personaliza lo que la gente ve en tu perfil público junto a tus publicaciones.</strong> Es más probable que otras personas te sigan e interactúen contigo cuando completas tu perfil y foto."
other: Otros
emoji_styles:
auto: Automático
native: Nativo
twemoji: Twemoji
errors:
'400': La solicitud que has enviado no es valida o estaba malformada.
'403': No tienes permiso para acceder a esta página.

View File

@ -187,7 +187,6 @@ eu:
create_domain_block: Sortu domeinu blokeoa
create_email_domain_block: Sortu email domeinu blokeoa
create_ip_block: Sortu IP araua
create_relay: Erreleboa sortu
create_unavailable_domain: Sortu eskuragarri ez dagoen domeinua
create_user_role: Sortu rola
demote_user: Jaitsi erabiltzailearen maila
@ -199,13 +198,11 @@ eu:
destroy_email_domain_block: Ezabatu email domeinu blokeoa
destroy_instance: Ezabatu betiko domeinua
destroy_ip_block: Ezabatu IP araua
destroy_relay: Erreleboa ezabatu
destroy_status: Ezabatu bidalketa
destroy_unavailable_domain: Ezabatu eskuragarri ez dagoen domeinua
destroy_user_role: Ezabatu rola
disable_2fa_user: Desgaitu 2FA
disable_custom_emoji: Desgaitu emoji pertsonalizatua
disable_relay: Erreleboa desaktibatu
disable_sign_in_token_auth_user: Desgaitu email token autentifikazioa erabiltzailearentzat
disable_user: Desgaitu erabiltzailea
enable_custom_emoji: Gaitu emoji pertsonalizatua
@ -213,7 +210,6 @@ eu:
enable_user: Gaitu erabiltzailea
memorialize_account: Bihurtu kontua oroigarri
promote_user: Igo erabiltzailea mailaz
publish_terms_of_service: Zerbitzu-baldintzak argitaratu
reject_appeal: Baztertu apelazioa
reject_user: Baztertu erabiltzailea
remove_avatar_user: Kendu abatarra
@ -233,29 +229,23 @@ eu:
update_custom_emoji: Eguneratu emoji pertsonalizatua
update_domain_block: Eguneratu domeinu-blokeoa
update_ip_block: Eguneratu IP araua
update_report: Txostena eguneratu
update_status: Eguneratu bidalketa
update_user_role: Eguneratu rola
actions:
approve_appeal_html: "%{name} erabiltzaileak %{target} erabiltzailearen moderazio erabakiaren apelazioa onartu du"
approve_user_html: "%{name} erabiltzaileak %{target} erabiltzailearen izen-ematea onartu du"
assigned_to_self_report_html: "%{name} erabiltzaileak %{target} salaketa bere buruari esleitu dio"
change_email_user_html: "%{name}(e)k %{target} erabiltzailearen e-posta helbidea aldatu du"
change_role_user_html: "%{name} erabiltzaileak %{target} kontuaren rola aldatu du"
confirm_user_html: "%{name}(e)k %{target} erabiltzailearen e-posta helbidea berretsi du"
create_account_warning_html: "%{name} erabiltzaileak abisua bidali dio %{target} erabiltzaileari"
create_announcement_html: "%{name} erabiltzaileak %{target} iragarpen berria sortu du"
create_canonical_email_block_html: "%{name}(e)k %{target} hash-a duen helbide elektronikoa blokeatu du"
create_custom_emoji_html: "%{name} erabiltzaileak %{target} emoji berria kargatu du"
create_domain_allow_html: "%{name} erabiltzaileak %{target} domeinuarekin federazioa onartu du"
create_domain_block_html: "%{name} erabiltzaileak %{target} domeinua blokeatu du"
create_email_domain_block_html: "%{name}(e)k %{target} e-posta helbideen domeinua blokeatu du"
create_ip_block_html: "%{name} kontuak %{target} IParen araua sortu du"
create_unavailable_domain_html: "%{name}(e)k %{target} domeinurako banaketa gelditu du"
create_user_role_html: "%{name} erabiltzaileak %{target} rola sortu du"
demote_user_html: "%{name} erabiltzaileak %{target} erabiltzailea mailaz jaitsi du"
destroy_announcement_html: "%{name} erabiltzaileak %{target} iragarpena ezabatu du"
destroy_canonical_email_block_html: "%{name}(e)k %{target} hash-a duen helbide elektronikoa desblokeatu du"
destroy_custom_emoji_html: "%{name} erabiltzaileak %{target} emoji-a ezabatu du"
destroy_domain_allow_html: "%{name} erabiltzaileak %{target} domeinuarekin federatzea debekatu du"
destroy_domain_block_html: "%{name} erabiltzaileak %{target} domeinua desblokeatu du"
@ -296,9 +286,7 @@ eu:
filter_by_action: Iragazi ekintzen arabera
filter_by_user: Iragazi erabiltzaileen arabera
title: Auditoria-egunkaria
unavailable_instance: "(domeinu izena ez dago erabilgarri)"
announcements:
back: Oharretara bueltatu
destroyed_msg: Iragarpena ongi ezabatu da!
edit:
title: Editatu iragarpena
@ -445,10 +433,8 @@ eu:
new:
create: Gehitu domeinua
resolve: Ebatzi domeinua
title: Posta domeinu berria blokeatu
not_permitted: Baimendu gabea
resolved_through_html: "%{domain} domeinuaren bidez ebatzia"
title: Email domeinua blokeatuta
export_domain_allows:
new:
title: Baimendutako domeinuak inportatu
@ -464,32 +450,6 @@ eu:
new:
title: Domeinu-blokeoak inportatu
no_file: Ez da fitxategirik hautatu
fasp:
debug:
callbacks:
created_at: Sortua hemen
delete: Ezabatu
ip: IP helbidea
request_body: Eskaeraren edukia
title: Atzera-deiak araztu
providers:
active: Aktibo
base_url: Oinarrizko URL-a
delete: Ezabatu
edit: Editatu hornitzailea
finish_registration: Izen-ematea bukatu
name: Izena
providers: Hornitzaileak
public_key_fingerprint: Gako publikoaren hatz-marka
registration_requested: Izen-ematea eskatuta
registrations:
confirm: Berretsi
reject: Ukatu
save: Gorde
sign_in: Hasi saioa
status: Egoera
title: Fedibertsoko zerbitzu osagarrien hornitzaileak
title: FZOH
follow_recommendations:
description_html: "<strong>Jarraitzeko gomendioek erabiltzaile berriei eduki interesgarria azkar aurkitzen laguntzen diete</strong>. Erabiltzaile batek jarraitzeko gomendio pertsonalizatuak jasotzeko adina interakzio izan ez duenean, kontu hauek gomendatzen zaizkio. Egunero birkalkulatzen dira hizkuntza bakoitzerako, azken aldian parte-hartze handiena izan duten eta jarraitzaile lokal gehien dituzten kontuak nahasiz."
language: Hizkuntza
@ -555,10 +515,6 @@ eu:
all: Denak
limited: Mugatua
title: Moderazioa
moderation_notes:
create: Gehitu Moderazio Oharra
created_msg: Instantziako moderazio oharra ongi sortu da!
description_html: Ikusi eta idatzi oharrak beste moderatzaileentzat eta zuretzat etorkizunerako
private_comment: Iruzkin pribatua
public_comment: Iruzkin publikoa
purge: Ezabatu betiko
@ -761,14 +717,11 @@ eu:
title: Rolak
rules:
add_new: Gehitu araua
add_translation: Gehitu itzulpena
delete: Ezabatu
description_html: Gehienek erabilera baldintzak irakurri eta onartu dituztela baieztatzen badute ere, orokorrean arazoren bat dagoen arte ez dituzte irakurtzen. <strong>Zerbitzariaren arauak begirada batean ikustea errazteko buletadun zerrenda batean bildu.</strong> Saiatu arauak labur eta sinple idazten, baina elementu askotan banatu gabe.
edit: Editatu araua
empty: Ez da zerbitzariko araurik definitu oraindik.
title: Zerbitzariaren arauak
translation: Itzulpena
translations: Itzulpenak
settings:
about:
manage_rules: Kudeatu zerbitzariaren arauak
@ -794,7 +747,6 @@ eu:
discovery:
follow_recommendations: Jarraitzeko gomendioak
preamble: Eduki interesgarria aurkitzea garrantzitsua da Mastodoneko erabiltzaile berrientzat, behar bada inor ez dutelako ezagutuko. Kontrolatu zure zerbitzariko aurkikuntza-ezaugarriek nola funtzionatzen duten.
privacy: Pribatutasuna
profile_directory: Profil-direktorioa
public_timelines: Denbora-lerro publikoak
publish_statistics: Argitaratu estatistikak
@ -825,7 +777,6 @@ eu:
destroyed_msg: Guneko igoera ongi ezabatu da!
software_updates:
critical_update: Kritikoa — mesedez, eguneratu azkar
description: Gomendagarria da Mastodon instalazioa eguneratuta mantentzea azken konponketa eta funtzioez baliatzeko. Gainera, batzuetan ezinbestekoa da Mastodon garaiz eguneratzea segurtasun arazoak saihesteko. Arrazoi hauengatik, Mastodonek 30 minuturo eguneratzeak egiaztatzen ditu, eta zure posta elektroniko bidezko jakinarazpenen lehentasunen arabera jakinaraziko dizu.
documentation_link: Informazio gehiago
release_notes: Bertsio oharrak
title: Eguneraketak eskuragarri
@ -843,7 +794,6 @@ eu:
batch:
remove_from_report: Kendu txostenetik
report: Salatu
contents: Edukiak
deleted: Ezabatuta
favourites: Gogokoak
history: Bertsio-historia
@ -852,7 +802,6 @@ eu:
media:
title: Multimedia
metadata: Metadatuak
no_history: Bidalketa hau ez da editatu
no_status_selected: Ez da bidalketarik aldatu ez delako bat ere hautatu
open: Ireki bidalketa
original_status: Jatorrizko bidalketa
@ -900,8 +849,6 @@ eu:
message_html: Ez duzu zerbitzariaren araurik definitu.
sidekiq_process_check:
message_html: Ez da ari Sidekiq prozesurik exekutatzen %{value} ilad(et)an. Egiaztatu Sidekiq konfigurazioa
software_version_check:
message_html: Mastodon eguneratze bat eskuragarri dago.
software_version_critical_check:
action: Ikusi eguneraketa eskuragarriak
message_html: Mastodon eguneraketa kritikoa eskuragarri, mesedez eguneratu ahal bezain azkar.
@ -915,35 +862,8 @@ eu:
action: Ikus hemen informazio gehiagorako
message_html: "<strong>Zure objektuen biltegiratzea ez dago ongi konfiguratua. Zure erabiltzaileen pribatutasuna arriskuan dago.</strong>"
tags:
moderation:
not_usable: Ez erabilgarri
pending_review: Berrikusketaren zain
reviewed: Berrikusita
title: Egoera
unreviewed: Berrikusi gabe
usable: Erabilgarri
name: Izena
newest: Berriena
oldest: Zaharrena
open: Publikoki ikusi
reset: Berrezarri
review: Berrikusketaren egoera
search: Bilatu
title: Traolak
updated_msg: Traola-ezarpenak ongi eguneratu dira
terms_of_service:
changelog: Zer aldatu da
current: Oraingoa
draft: Zirriborroa
generate: Txantiloila erabili
generates:
action: Sortu
history: Historia
live: Zuzenean
publish: Argitaratu
published_on_html: "%{date}(e)an argitaratua"
save_draft: Gorde zirriborroa
title: Zerbitzuaren baldintzak
title: Administrazioa
trends:
allow: Onartu
@ -1136,7 +1056,6 @@ eu:
migrate_account_html: Kontu hau beste batera birbideratu nahi baduzu, <a href="%{path}">hemen konfiguratu</a> dezakezu.
or_log_in_with: Edo hasi saioa honekin
progress:
confirm: Berretsi e-mail helbidea
details: Zure xehetasunak
review: Gure berrikuspena
rules: Onartu arauak
@ -1158,7 +1077,6 @@ eu:
security: Segurtasuna
set_new_password: Ezarri pasahitza berria
setup:
email_below_hint_html: Begiratu zure spameko karpetan, edo eskatu beste bat. Zure helbide elektronikoa zuzen dezakezu oker badago.
link_not_received: Ez duzu estekarik jaso?
title: Begiratu zure sarrera-ontzia
sign_in:
@ -1669,12 +1587,10 @@ eu:
delete: Kontuaren ezabaketa
development: Garapena
edit_profile: Editatu profila
export: Esportatu
featured_tags: Nabarmendutako traolak
import: Inportazioa
import_and_export: Inportatu eta esportatu
migrate: Kontuaren migrazioa
notifications: Posta bidezko jakinarazpenak
preferences: Hobespenak
profile: Profila
relationships: Jarraitutakoak eta jarraitzaileak
@ -1721,10 +1637,6 @@ eu:
limit: Gehienez finkatu daitekeen bidalketa kopurua finkatu duzu jada
ownership: Ezin duzu beste norbaiten bidalketa bat finkatu
reblog: Bultzada bat ezin da finkatu
quote_policies:
followers: Jarraitzaileak eta aipatutako erabiltzaileak
nobody: Aipatutako erabiltzaileak soilik
public: Guztiak
title: '%{name}: "%{quote}"'
visibilities:
direct: Zuzena
@ -1776,8 +1688,6 @@ eu:
too_late: Beranduegi da neurri hau apelatzeko
tags:
does_not_match_previous_name: ez dator aurreko izenarekin bat
terms_of_service:
title: Erabilera baldintzak
themes:
contrast: Mastodon (Kontraste altua)
default: Mastodon (Iluna)
@ -1923,7 +1833,6 @@ eu:
instructions_html: Kopiatu eta itsatsi ondoko kodea zure webguneko HTMLan. Ondoren, gehitu zure webgunearen helbidea zure profileko eremu gehigarrietako batean, "Editatu profila" fitxatik eta gorde aldaketak.
verification: Egiaztaketa
verified_links: Zure lotura egiaztatuak
website_verification: Web orriaren egiaztapena
webauthn_credentials:
add: Gehitu segurtasun gako berria
create:

View File

@ -1347,10 +1347,6 @@ fi:
basic_information: Perustiedot
hint_html: "<strong>Mukauta, mitä ihmiset näkevät julkisessa profiilissasi ja julkaisujesi vieressä.</strong> Sinua seurataan takaisin ja kanssasi ollaan vuorovaikutuksessa todennäköisemmin, kun sinulla on täytetty profiili ja profiilikuva."
other: Muut
emoji_styles:
auto: Automaattinen
native: Natiivi
twemoji: Twemoji
errors:
'400': Lähettämäsi pyyntö oli virheellinen tai muotoiltu virheellisesti.
'403': Sinulla ei ole oikeutta nähdä tätä sivua.

View File

@ -1349,10 +1349,6 @@ fo:
basic_information: Grundleggjandi upplýsingar
hint_html: "<strong>Tillaga tað, sum fólk síggja á tínum almenna vanga og við síðna av tínum postum.</strong> Sannlíkindini fyri, at onnur fylgja tær og virka saman við tær eru størri, tá tú hevur fylt út vangan og eina vangamynd."
other: Onnur
emoji_styles:
auto: Sjálvvirkandi
native: Upprunalig
twemoji: Twitter kenslutekn
errors:
'400': Umbønin, sum tú sendi inn, var ógildug ella hevði skeivt skap.
'403': Tú hevur ikki loyvi at síggja hesa síðuna.

View File

@ -1851,8 +1851,6 @@ fr-CA:
limit: Vous avez déjà épinglé le nombre maximum de messages
ownership: Vous ne pouvez pas épingler un message ne vous appartenant pas
reblog: Un partage ne peut pas être épinglé
quote_policies:
followers: Abonné·e·s et utilisateur·trice·s mentionné·e·s
title: "%{name}: « %{quote} »"
visibilities:
direct: Direct
@ -1906,8 +1904,6 @@ fr-CA:
does_not_match_previous_name: ne correspond pas au nom précédent
terms_of_service:
title: Conditions d'utilisation
terms_of_service_interstitial:
title: Les conditions d'utilisation de %{domain} ont changées
themes:
contrast: Mastodon (Contraste élevé)
default: Mastodon (Sombre)

View File

@ -1851,8 +1851,6 @@ fr:
limit: Vous avez déjà épinglé le nombre maximum de messages
ownership: Vous ne pouvez pas épingler un message ne vous appartenant pas
reblog: Un partage ne peut pas être épinglé
quote_policies:
followers: Abonné·e·s et utilisateur·trice·s mentionné·e·s
title: "%{name}: « %{quote} »"
visibilities:
direct: Direct
@ -1906,8 +1904,6 @@ fr:
does_not_match_previous_name: ne correspond pas au nom précédent
terms_of_service:
title: Conditions d'utilisation
terms_of_service_interstitial:
title: Les conditions d'utilisation de %{domain} ont changées
themes:
contrast: Mastodon (Contraste élevé)
default: Mastodon (Sombre)

View File

@ -578,13 +578,6 @@ fy:
all: Alle
limited: Beheind
title: Moderaasje
moderation_notes:
create: Moderaasje-opmerking oanmeitsje
created_msg: Oanmeitsjen fan servermoderaasje-opmerking slagge!
description_html: Opmerkingen besjen en foar josele en oare moderatoaren efterlitte
destroyed_msg: Fuortsmiten fan servermoderaasje-opmerking slagge!
placeholder: Ynformaasje oer dizze server, nommen aksjes of wat oars dyt jo helpe kinne om dizze server yn de takomst te moderearjen.
title: Moderaasje-opmerkingen
private_comment: Priveeopmerking
public_comment: Iepenbiere opmerking
purge: Folslein fuortsmite
@ -1349,10 +1342,6 @@ fy:
basic_information: Algemiene ynformaasje
hint_html: "<strong>Pas oan wat minsken op jo iepenbiere profyl en njonken jo berjochten sjogge.</strong> Oare minsken sille jo earder folgje en mei jo kommunisearje wanneart jo profyl ynfolle is en jo in profylfoto hawwe."
other: Oars
emoji_styles:
auto: Automatysk
native: Systeemeigen
twemoji: Twemoji
errors:
'400': De oanfraach dyt jo yntsjinne hawwe wie ûnjildich of fout.
'403': Jo hawwe gjin tastimming om dizze side te besjen.

View File

@ -1406,10 +1406,6 @@ ga:
basic_information: Eolas bunúsach
hint_html: "<strong>Saincheap a bhfeiceann daoine ar do phróifíl phoiblí agus in aice le do phostálacha.</strong> Is dóichí go leanfaidh daoine eile ar ais tú agus go n-idirghníomhóidh siad leat nuair a bhíonn próifíl líonta agus pictiúr próifíle agat."
other: Eile
emoji_styles:
auto: Uath
native: Dúchasach
twemoji: Twemoji
errors:
'400': Bhí an t-iarratas a chuir tú isteach neamhbhailí nó míchumtha.
'403': Níl cead agat an leathanach seo a fheiceáil.

View File

@ -1349,10 +1349,6 @@ gl:
basic_information: Información básica
hint_html: "<strong>Personaliza o que van ver no teu perfil público e ao lado das túas publicacións.</strong> As outras persoas estarán máis animadas a seguirte e interactuar contigo se engades algún dato sobre ti así como unha imaxe de perfil."
other: Outros
emoji_styles:
auto: Auto
native: Nativo
twemoji: Twemoji
errors:
'400': A solicitude que enviou non é válida ou ten formato incorrecto.
'403': Non ten permiso para ver esta páxina.

View File

@ -1387,10 +1387,6 @@ he:
basic_information: מידע בסיסי
hint_html: "<strong>התאמה אישית של מה שיראו אחרים בפרופיל הציבורי שלך וליד הודעותיך.</strong> אחרים עשויים יותר להחזיר עוקב וליצור אתך שיחה אם הפרופיל והתמונה יהיו מלאים."
other: אחר
emoji_styles:
auto: אוטומטי
native: מקומי
twemoji: Twemoji
errors:
'400': הבקשה שהגשת לא תקינה.
'403': חסרות לך הרשאות לצפיה בעמוד זה.

View File

@ -1353,10 +1353,6 @@ is:
basic_information: Grunnupplýsingar
hint_html: "<strong>Sérsníddu hvað fólk sér á opinbera notandasniðinu þínu og næst færslunum þínum.</strong> Annað fólk er líklegra til að fylgjast með þér og eiga í samskiptum við þig ef þú fyllir út notandasniðið og setur auðkennismynd."
other: Annað
emoji_styles:
auto: Sjálfvirkt
native: Innbyggt
twemoji: Twemoji
errors:
'400': Beiðnin sem þú sendir er ógild eða rangt uppsett.
'403': Þú hefur ekki heimildir til að skoða þessari síðu.

View File

@ -1351,10 +1351,6 @@ it:
basic_information: Informazioni di base
hint_html: "<strong>Personalizza ciò che le persone vedono sul tuo profilo pubblico e accanto ai tuoi post.</strong> È più probabile che altre persone ti seguano e interagiscano con te quando hai un profilo compilato e un'immagine del profilo."
other: Altro
emoji_styles:
auto: Automatico
native: Nativo
twemoji: Twemoji
errors:
'400': La richiesta che hai inviato non è valida o non è corretta.
'403': Non sei autorizzato a visualizzare questa pagina.

View File

@ -280,7 +280,6 @@ kab:
registrations:
confirm: Sentem
save: Sekles
sign_in: Qqen
title: FASP
follow_recommendations:
language: I tutlayt
@ -384,9 +383,6 @@ kab:
updated_at: Yettwaleqqem
view_profile: Wali amaɣnu
roles:
assigned_users:
one: "%{count} n useqdac"
other: "%{count} n iseqdacen"
categories:
administration: Tadbelt
invites: Iɛeṛṛuḍen
@ -399,20 +395,16 @@ kab:
view_dashboard: Timẓriwt n tfelwit
rules:
add_new: Rnu alugen
add_translation: Ad yernu tasuqilt
delete: Kkes
edit: Ẓreg alugen
empty: Mazal ur ttwasbadun ara yilugan n uqeddac.
title: Ilugan n uqeddac
translation: Tasuqilt
translations: Tisuqilin
settings:
about:
title: Ɣef
appearance:
title: Udem
discovery:
privacy: Tabaḍnit
profile_directory: Akaram n imaɣnuten
title: Asnirem
trends: Ayen mucaɛen
@ -448,10 +440,6 @@ kab:
visibility: Abani
with_media: S umidya
system_checks:
elasticsearch_preset:
action: Wali tasemlit
elasticsearch_preset_single_node:
action: Wali tasemlit
rules_check:
action: Sefrek ilugan n uqeddac
software_version_critical_check:
@ -613,8 +601,6 @@ kab:
basic_information: Talɣut tamatut
hint_html: "<strong>Mudd udem i wayen ttwalin medden deg umaɣnu-inek azayez ɣer yidis n yiznan-ik.</strong> Imdanen niḍen zemren ad k-ḍefren yernu ad gen assaɣ yid-k mi ara tesɛuḍ amaɣnu yeccuṛen ed tugna n umaɣnu."
other: Ayen nniḍen
emoji_styles:
auto: Awurman
errors:
'404': Asebter i tettnadiḍ ulac-it da.
'500':
@ -849,8 +835,6 @@ kab:
one: "%{count} n tbidyutt"
other: "%{count} n tbidyutin"
edited_at_html: Tettwaẓreg ass n %{date}
quote_policies:
public: Yal yiwen
title: '%{name}: "%{quote}"'
visibilities:
direct: Usrid

View File

@ -1332,10 +1332,6 @@ ko:
basic_information: 기본 정보
hint_html: "<strong>사람들이 공개 프로필을 보고서 게시물을 볼 때를 위한 프로필을 꾸밉니다.</strong> 프로필과 프로필 사진을 채우면 다른 사람들이 나를 팔로우하고 나와 교류할 기회가 더 많아집니다."
other: 기타
emoji_styles:
auto: 자동
native: 시스템 기본
twemoji: 트웨모지
errors:
'400': 제출한 요청이 올바르지 않습니다.
'403': 이 페이지를 표시할 권한이 없습니다.

View File

@ -186,7 +186,6 @@ lad:
create_domain_block: Kriya bloko de domeno
create_email_domain_block: Kriya bloko de domeno de posta
create_ip_block: Kriya regla de IP
create_relay: Kriya relevo
create_unavailable_domain: Kriya domeno no desponivle
create_user_role: Kriya rolo
demote_user: Degrada utilizador
@ -198,7 +197,6 @@ lad:
destroy_email_domain_block: Efasa bloko de domeno de posta
destroy_instance: Efasa domeno
destroy_ip_block: Efasa regla de IP
destroy_relay: Efasa relevo
destroy_status: Efasa publikasyon
destroy_unavailable_domain: Efasa domeno no desponivle
destroy_user_role: Efasa rolo
@ -207,7 +205,6 @@ lad:
disable_sign_in_token_auth_user: Inkapasita la autentifikasyon por token de posta elektronika para el utilizador
disable_user: Inkapasita utilizador
enable_custom_emoji: Kapasita emoji personalizados
enable_relay: Aktiva relevo
enable_sign_in_token_auth_user: Kapasita la autentifikasyon por token de posta para el utilizador
enable_user: Kapasita utilizador
memorialize_account: Transforma en kuento komemorativo
@ -232,7 +229,6 @@ lad:
update_custom_emoji: Aktualiza emoji personalizado
update_domain_block: Aktualiza bloko de domeno
update_ip_block: Aktualiza regla de IP
update_report: Aktualiza raporto
update_status: Aktualiza publikasyon
update_user_role: Aktualiza rolo
actions:
@ -470,13 +466,10 @@ lad:
fasp:
debug:
callbacks:
created_at: Kriyado en
delete: Efasa
ip: Adreso IP
providers:
active: Aktivo
delete: Efasa
finish_registration: Finaliza enrejistrasyon
name: Nombre
registrations:
confirm: Konfirma
@ -549,12 +542,6 @@ lad:
all: Todos
limited: Limitado
title: Moderasyon
moderation_notes:
create: Adjusta nota de moderasyon
created_msg: Nota de moderasyon de sirvidor kriyada kon sukseso!
description_html: Ve i desha notas a otros moderadores i a tu yo futuro
destroyed_msg: Nota de moderasyon de sirvidor efasada kon sukseso!
title: Notas de moderasyon
private_comment: Komento privado
public_comment: Komento publiko
purge: Purga
@ -761,7 +748,6 @@ lad:
title: Rolos
rules:
add_new: Adjusta regla
add_translation: Adjusta traduksyon
delete: Efasa
description_html: Aunke la majorita afirma aver meldado i estar de akodro kon los terminos de servisyo, la djente normalmente no los melda asta dempues de ke surja algun problema. <strong>Az ke sea mas kolay ver las normas de tu sirvidor de un vistazo estipulándolas en una lista de puntos.</strong> Aprova ke kada norma sea corta i kolay, ama sin estar divididas en munchos puntos.
edit: Edita regla
@ -934,9 +920,6 @@ lad:
updated_msg: Konfigurasyon de etiketas aktualizada kon sukseso
terms_of_service:
changelog: Ke troko
current: Aktual
generates:
action: Djenera
history: Istorya
live: En bivo
publish: Publika
@ -1262,10 +1245,6 @@ lad:
basic_information: Enformasyon bazika
hint_html: "<strong>Personaliza lo ke la djente ve en tu profil publiko i kon tus publikasyones.</strong> Es mas probavle ke otras personas te sigan i enteraktuen kontigo kuando kompletas tu profil i foto."
other: Otros
emoji_styles:
auto: Otomatiko
native: Nativo
twemoji: Twemoji
errors:
'400': La solisitasyon ke enviates no fue valida o fue malformada.
'403': No tienes permiso para ver esta pajina.

View File

@ -346,68 +346,6 @@ nan:
enabled: 啟用ê
enabled_msg: Hit ê emoji成功啟用ah
image_hint: Sài-suh無超過 %{size} ê PNG á是 GIF
list: 列單
listed: 加入列單ah
new:
title: 加添新ê自訂emoji
no_emoji_selected: 因為無揀任何emoji所以lóng無改變
not_permitted: Lí無允准行tsit ê動作
overwrite: Khàm掉
shortcode: 短碼
shortcode_hint: 字元上少2 êkan-ta接受字母、數字kap底線(_)
title: 自訂emoji
uncategorized: Iáu無分類
unlist: Tuì列單the̍h掉
unlisted: The̍h掉ah
update_failed_msg: Bē當更新hit ê emoji
updated_msg: Emoji成功更新ah
upload: 傳上去
dashboard:
active_users: 活動ê用者
interactions: 互動
media_storage: 媒體儲存
new_users: 新用者
opened_reports: 拍開ê報告
pending_appeals_html:
other: "<strong>%{count}</strong> ê投訴愛處理"
pending_reports_html:
other: "<strong>%{count}</strong> ê檢舉愛處理"
pending_tags_html:
other: "<strong>%{count}</strong> ê hashtag愛處理"
pending_users_html:
other: "<strong>%{count}</strong> ê用者愛處理"
resolved_reports: 解決ê報告
software: 軟體
sources: 註冊ê源頭
space: 空間ê使用
title: Le-jí-páng (dashboard)
top_languages: 上tsia̍p出現ê語言
top_servers: 上tsia̍p活動ê服侍器
website: 網站
disputes:
appeals:
empty: Tshuē無投訴。
title: 投訴
domain_allows:
add_new: 允准kap tsit ê域名相連
created_msg: 域名已經成功允准相連
destroyed_msg: 域名已經成功取消相連
export: 輸出
import: 輸入
undo: 禁止kap tsit ê域名相連
domain_blocks:
add_new: 加添新ê封鎖域名
confirm_suspension:
cancel: 取消
confirm: 中止權限
permanent_action: 取消中止權限bē當復原任何資料á是關係。
preamble_html: Lí teh beh停止 <strong>%{domain}</strong> kap伊ê kiánn域名ê權限。
remove_all_data: Tse ē tī lí ê服侍器內底kā tuì tsit ê域名ê口座來ê所有內容、媒體kap個人資料lóng thâi掉。
stop_communication: Lí ê服侍器ē停止kap hia ê服侍器聯絡。
title: 確認封鎖域名 %{domain}
edit: 編輯域名封鎖
export: 輸出
import: 輸入
instances:
dashboard:
instance_languages_dimension: Tsia̍p用ê語言

View File

@ -583,7 +583,7 @@ nl:
created_msg: Aanmaken van servermoderatie-opmerking geslaagd!
description_html: Opmerkingen bekijken, en voor jezelf en andere moderatoren achterlaten
destroyed_msg: Verwijderen van servermoderatie-opmerking geslaagd!
placeholder: Informatie over deze server, genomen acties of iets anders die jou kunnen helpen om deze server in de toekomst te modereren.
placeholder: Informatie over deze server, genomen acties of iets anders die jou kunnen helpen om deze server in de toekomst te moderen.
title: Moderatie-opmerkingen
private_comment: Privé-opmerking
public_comment: Openbare opmerking
@ -1349,10 +1349,6 @@ nl:
basic_information: Algemene informatie
hint_html: "<strong>Wat mensen op jouw openbare profiel en naast je berichten zien aanpassen.</strong> Andere mensen gaan je waarschijnlijk eerder volgen en hebben vaker interactie met je, wanneer je profiel is ingevuld en je een profielfoto hebt."
other: Overige
emoji_styles:
auto: Auto
native: Systeemeigen
twemoji: Twemoji
errors:
'400': De aanvraag die je hebt ingediend was ongeldig of foutief.
'403': Jij hebt geen toestemming om deze pagina te bekijken.

View File

@ -578,8 +578,6 @@ pt-BR:
all: Todos
limited: Limitados
title: Moderação
moderation_notes:
title: Notas de Moderação
private_comment: Comentário privado
public_comment: Comentário público
purge: Limpar

View File

@ -49,7 +49,6 @@ br:
setting_display_media_default: Dre ziouer
setting_display_media_hide_all: Kuzhat pep tra
setting_display_media_show_all: Diskouez pep tra
setting_emoji_style: Stil an emojioù
setting_theme: Neuz al lec'hienn
setting_use_pending_items: Mod gorrek
title: Titl

View File

@ -61,7 +61,6 @@ cs:
setting_display_media_default: Skrývat média označená jako citlivá
setting_display_media_hide_all: Vždy skrývat média
setting_display_media_show_all: Vždy zobrazovat média
setting_emoji_style: Jak se budou zobrazovat emoji. "Auto" zkusí použít výchozí emoji, ale pro starší prohlížeče použije Twemoji.
setting_system_scrollbars_ui: Platí pouze pro desktopové prohlížeče založené na Safari nebo Chrome
setting_use_blurhash: Gradienty jsou vytvořeny na základě barvev skrytých médií, ale zakrývají veškeré detaily
setting_use_pending_items: Aktualizovat časovou osu až po kliknutí namísto automatického rolování kanálu
@ -244,7 +243,6 @@ cs:
setting_display_media_default: Výchozí
setting_display_media_hide_all: Skrýt vše
setting_display_media_show_all: Zobrazit vše
setting_emoji_style: Styl emoji
setting_expand_spoilers: Vždy rozbalit příspěvky označené varováními o obsahu
setting_hide_network: Skrýt mou síť
setting_missing_alt_text_modal: Zobrazit potvrzovací dialog před odesláním médií bez alt textu

View File

@ -61,7 +61,6 @@ da:
setting_display_media_default: Skjul medier med sensitiv-markering
setting_display_media_hide_all: Skjul altid medier
setting_display_media_show_all: Vis altid medier
setting_emoji_style: Hvordan emojis skal vises. "Auto" vil forsøge at bruge indbyggede emojis, men skifter tilbage til Twemoji i ældre webbrowsere.
setting_system_scrollbars_ui: Gælder kun for computerwebbrowsere baseret på Safari og Chrome
setting_use_blurhash: Gradienter er baseret på de skjulte grafikelementers farver, men slører alle detaljer
setting_use_pending_items: Skjul tidslinjeopdateringer bag et klik i stedet for brug af auto-feedrulning
@ -242,7 +241,6 @@ da:
setting_display_media_default: Standard
setting_display_media_hide_all: Skjul alle
setting_display_media_show_all: Vis alle
setting_emoji_style: Emoji-stil
setting_expand_spoilers: Udvid altid indlæg markeret med indholdsadvarsler
setting_hide_network: Skjul din sociale graf
setting_missing_alt_text_modal: Vis bekræftelsesdialog inden medier uden alt-tekst lægges op

View File

@ -61,7 +61,6 @@ de:
setting_display_media_default: Medien mit Inhaltswarnung ausblenden
setting_display_media_hide_all: Medien immer ausblenden
setting_display_media_show_all: Medien mit Inhaltswarnung immer anzeigen
setting_emoji_style: 'Wie Emojis dargestellt werden: „Automatisch“ verwendet native Emojis, für veraltete Browser wird jedoch Twemoji verwendet.'
setting_system_scrollbars_ui: Betrifft nur Desktop-Browser, die auf Chrome oder Safari basieren
setting_use_blurhash: Der Farbverlauf basiert auf den Farben der ausgeblendeten Medien, verschleiert aber jegliche Details
setting_use_pending_items: Neue Beiträge hinter einem Klick verstecken, anstatt automatisch zu scrollen
@ -242,13 +241,12 @@ de:
setting_display_media_default: Standard
setting_display_media_hide_all: Alle Medien ausblenden
setting_display_media_show_all: Alle Medien anzeigen
setting_emoji_style: Emoji-Stil
setting_expand_spoilers: Beiträge mit Inhaltswarnung immer ausklappen
setting_hide_network: Follower und „Folge ich“ nicht anzeigen
setting_missing_alt_text_modal: Bestätigungsdialog anzeigen, bevor Medien ohne Bildbeschreibung veröffentlicht werden
setting_reduce_motion: Bewegung in Animationen verringern
setting_system_font_ui: Standardschriftart des Browsers verwenden
setting_system_scrollbars_ui: Bildlaufleiste des Betriebssystems verwenden
setting_system_scrollbars_ui: Bildlaufleiste des Systems verwenden
setting_theme: Design
setting_trends: Heutige Trends anzeigen
setting_unfollow_modal: Bestätigungsdialog beim Entfolgen eines Profils anzeigen

View File

@ -56,12 +56,10 @@ en-GB:
scopes: Which APIs the application will be allowed to access. If you select a top-level scope, you don't need to select individual ones.
setting_aggregate_reblogs: Do not show new boosts for posts that have been recently boosted (only affects newly-received boosts)
setting_always_send_emails: Normally e-mail notifications won't be sent when you are actively using Mastodon
setting_default_quote_policy: Mentioned users are always allowed to quote. This setting will only take effect for posts created with the next Mastodon version, but you can select your preference in preparation
setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click
setting_display_media_default: Hide media marked as sensitive
setting_display_media_hide_all: Always hide media
setting_display_media_show_all: Always show media
setting_emoji_style: How to display emojis. "Auto" will try using native emoji, but falls back to Twemoji for legacy browsers.
setting_system_scrollbars_ui: Applies only to desktop browsers based on Safari and Chrome
setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details
setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed
@ -77,7 +75,6 @@ en-GB:
filters:
action: Chose which action to perform when a post matches the filter
actions:
blur: Hide media behind a warning, without hiding the text itself
hide: Completely hide the filtered content, behaving as if it did not exist
warn: Hide the filtered content behind a warning mentioning the filter's title
form_admin_settings:
@ -91,7 +88,6 @@ en-GB:
favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon.
mascot: Overrides the illustration in the advanced web interface.
media_cache_retention_period: Media files from posts made by remote users are cached on your server. When set to a positive value, media will be deleted after the specified number of days. If the media data is requested after it is deleted, it will be re-downloaded, if the source content is still available. Due to restrictions on how often link preview cards poll third-party sites, it is recommended to set this value to at least 14 days, or link preview cards will not be updated on demand before that time.
min_age: Users will be asked to confirm their date of birth during sign-up
peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense.
profile_directory: The profile directory lists all users who have opted-in to be discoverable.
require_invite_text: When sign-ups require manual approval, make the “Why do you want to join?” text input mandatory rather than optional
@ -136,23 +132,14 @@ en-GB:
name: You can only change the casing of the letters, for example, to make it more readable
terms_of_service:
changelog: Can be structured with Markdown syntax.
effective_date: A reasonable timeframe can range anywhere from 10 to 30 days from the date you notify your users.
text: Can be structured with Markdown syntax.
terms_of_service_generator:
admin_email: Legal notices include counternotices, court orders, takedown requests, and law enforcement requests.
arbitration_address: Can be the same as Physical address above, or “N/A” if using email.
arbitration_website: Can be a web form, or “N/A” if using email.
choice_of_law: City, region, territory or state the internal substantive laws of which shall govern any and all claims.
dmca_address: For US operators, use the address registered in the DMCA Designated Agent Directory. A P.O. Box listing is available upon direct request, use the DMCA Designated Agent Post Office Box Waiver Request to email the Copyright Office and describe that you are a home-based content moderator who fears revenge or retribution for your actions and need to use a P.O. Box to remove your home address from public view.
dmca_email: Can be the same email used for “Email address for legal notices” above.
domain: Unique identification of the online service you are providing.
jurisdiction: List the country where whoever pays the bills lives. If its a company or other entity, list the country where its incorporated, and the city, region, territory or state as appropriate.
min_age: Should not be below the minimum age required by the laws of your jurisdiction.
user:
chosen_languages: When checked, only posts in selected languages will be displayed in public timelines
date_of_birth:
one: We have to make sure you're at least %{count} to use Mastodon. We won't store this.
other: We have to make sure you're at least %{count} to use Mastodon. We won't store this.
role: The role controls which permissions the user has.
user_role:
color: Color to be used for the role throughout the UI, as RGB in hex format
@ -233,7 +220,6 @@ en-GB:
setting_boost_modal: Show confirmation dialogue before boosting
setting_default_language: Posting language
setting_default_privacy: Posting privacy
setting_default_quote_policy: Who can quote
setting_default_sensitive: Always mark media as sensitive
setting_delete_modal: Show confirmation dialogue before deleting a post
setting_disable_hover_cards: Disable profile preview on hover
@ -242,7 +228,6 @@ en-GB:
setting_display_media_default: Default
setting_display_media_hide_all: Hide all
setting_display_media_show_all: Show all
setting_emoji_style: Emoji style
setting_expand_spoilers: Always expand posts marked with content warnings
setting_hide_network: Hide your social graph
setting_missing_alt_text_modal: Show confirmation dialogue before posting media without alt text
@ -267,7 +252,6 @@ en-GB:
name: Hashtag
filters:
actions:
blur: Hide media with a warning
hide: Hide completely
warn: Hide with a warning
form_admin_settings:
@ -281,7 +265,6 @@ en-GB:
favicon: Favicon
mascot: Custom mascot (legacy)
media_cache_retention_period: Media cache retention period
min_age: Minimum age requirement
peers_api_enabled: Publish list of discovered servers in the API
profile_directory: Enable profile directory
registrations_mode: Who can sign-up
@ -347,22 +330,16 @@ en-GB:
usable: Allow posts to use this hashtag locally
terms_of_service:
changelog: What's changed?
effective_date: Effective date
text: Terms of Service
terms_of_service_generator:
admin_email: Email address for legal notices
arbitration_address: Physical address for arbitration notices
arbitration_website: Website for submitting arbitration notices
choice_of_law: Choice of Law
dmca_address: Physical address for DMCA/copyright notices
dmca_email: Email address for DMCA/copyright notices
domain: Domain
jurisdiction: Legal jurisdiction
min_age: Minimum age
user:
date_of_birth_1i: Day
date_of_birth_2i: Month
date_of_birth_3i: Year
role: Role
time_zone: Time Zone
user_role:

View File

@ -61,7 +61,6 @@ en:
setting_display_media_default: Hide media marked as sensitive
setting_display_media_hide_all: Always hide media
setting_display_media_show_all: Always show media
setting_emoji_style: How to display emojis. "Auto" will try using native emoji, but falls back to Twemoji for legacy browsers.
setting_system_scrollbars_ui: Applies only to desktop browsers based on Safari and Chrome
setting_use_blurhash: Gradients are based on the colors of the hidden visuals but obfuscate any details
setting_use_pending_items: Hide timeline updates behind a click instead of automatically scrolling the feed
@ -242,7 +241,6 @@ en:
setting_display_media_default: Default
setting_display_media_hide_all: Hide all
setting_display_media_show_all: Show all
setting_emoji_style: Emoji style
setting_expand_spoilers: Always expand posts marked with content warnings
setting_hide_network: Hide your social graph
setting_missing_alt_text_modal: Show confirmation dialog before posting media without alt text

View File

@ -61,7 +61,6 @@ es-AR:
setting_display_media_default: Ocultar medios marcados como sensibles
setting_display_media_hide_all: Siempre ocultar todos los medios
setting_display_media_show_all: Siempre mostrar todos los medios
setting_emoji_style: Cómo se mostrarán los emojis. "Automático" intentará usar emojis nativos, cambiando a Twemoji en navegadores antiguos.
setting_system_scrollbars_ui: Solo aplica para navegadores web de escritorio basados en Safari y Chrome
setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
setting_use_pending_items: Ocultar actualizaciones de la línea temporal detrás de un clic en lugar de desplazar automáticamente el flujo
@ -242,7 +241,6 @@ es-AR:
setting_display_media_default: Predeterminada
setting_display_media_hide_all: Ocultar todo
setting_display_media_show_all: Mostrar todo
setting_emoji_style: Estilo de emoji
setting_expand_spoilers: Siempre expandir los mensajes marcados con advertencias de contenido
setting_hide_network: Ocultá tu gráfica social
setting_missing_alt_text_modal: Mostrar diálogo de confirmación antes de enviar medios sin texto alternativo

View File

@ -61,7 +61,6 @@ es-MX:
setting_display_media_default: Ocultar contenido multimedia marcado como sensible
setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
setting_emoji_style: Cómo se mostrarán los emojis. "Auto" intentará usar emojis nativos, cambiando a Twemoji en navegadores antiguos.
setting_system_scrollbars_ui: Solo se aplica a los navegadores de escritorio basados en Safari y Chrome
setting_use_blurhash: Los degradados se basan en los colores de los elementos visuales ocultos, pero ocultan cualquier detalle
setting_use_pending_items: Ocultar las publicaciones de la línea de tiempo tras un clic en lugar de desplazar automáticamente el feed
@ -242,7 +241,6 @@ es-MX:
setting_display_media_default: Por defecto
setting_display_media_hide_all: Ocultar todo
setting_display_media_show_all: Mostrar todo
setting_emoji_style: Estilo de emoji
setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido
setting_hide_network: Ocultar tu red
setting_missing_alt_text_modal: Mostrar cuadro de diálogo de confirmación antes de publicar contenido multimedia sin texto alternativo

View File

@ -61,7 +61,6 @@ es:
setting_display_media_default: Ocultar contenido multimedia marcado como sensible
setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
setting_emoji_style: Cómo se mostrarán los emojis. "Auto" intentará usar emojis nativos, cambiando a Twemoji en navegadores antiguos.
setting_system_scrollbars_ui: Solo aplica para navegadores de escritorio basados en Safari y Chrome
setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
setting_use_pending_items: Ocultar nuevas publicaciones detrás de un clic en lugar de desplazar automáticamente el feed
@ -242,7 +241,6 @@ es:
setting_display_media_default: Por defecto
setting_display_media_hide_all: Ocultar todo
setting_display_media_show_all: Mostrar todo
setting_emoji_style: Estilo de emoji
setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido
setting_hide_network: Ocultar tu red
setting_missing_alt_text_modal: Mostrar diálogo de confirmación antes de publicar medios sin texto alternativo

View File

@ -56,7 +56,6 @@ eu:
scopes: Zeintzuk API atzitu ditzakeen aplikazioak. Goi mailako arloa aukeratzen baduzu, ez dituzu azpikoak aukeratu behar.
setting_aggregate_reblogs: Ez erakutsi bultzada berriak berriki bultzada jaso duten tootentzat (berriki jasotako bultzadei eragiten die bakarrik)
setting_always_send_emails: Normalean eposta jakinarazpenak ez dira bidaliko Mastodon aktiboki erabiltzen ari zaren bitartean
setting_default_quote_policy: Aipaturiko erabiltzaileek beti dute aipatzeko baimena. Ezarpen honek Mastodon-en hurrengo bertsioarekin sortutako argitalpenetan bakarrik izango du eragina, baina prestatzean lehentasuna hauta dezakezu
setting_default_sensitive: Multimedia hunkigarria lehenetsita ezkutatzen da, eta sakatuz ikusi daiteke
setting_display_media_default: Ezkutatu hunkigarri gisa markatutako multimedia
setting_display_media_hide_all: Ezkutatu multimedia guztia beti
@ -76,7 +75,6 @@ eu:
filters:
action: Aukeratu ze ekintza burutu behar den bidalketa bat iragazkiarekin bat datorrenean
actions:
blur: Ezkutatu edukia ohar baten atzean, testua bera ezkutatu gabe
hide: Ezkutatu erabat iragazitako edukia, existituko ez balitz bezala
warn: Ezkutatu iragazitako edukia iragazkiaren izenburua duen abisu batekin
form_admin_settings:
@ -90,7 +88,6 @@ eu:
favicon: WEBP, PNG, GIF or JPG. Mastodon-en favicon-a gainidazten du ikono pertsonalizatu batekin.
mascot: Web interfaze aurreratuko ilustrazioa gainidazten du.
media_cache_retention_period: Multimedia-fitxategiak dituzten urruneko erabiltzaileen argitalpenak zure zerbitzarian gordetzen dira cachean. Balio positiboa ezartzean, multimedia zehazturiko egunen buruan ezabatuko da. Multimedia-datuak eskatzen badira ezabatu ostean, berriro deskargatuko dira, iturburuko edukia oraindik erabilgarri badago. Estekaren aurrebistako txartelek hirugarrenen guneei zenbatetan dei diezaieketen mugatzen dieten murrizketak direla eta, balio honi, gutxienez, 14 egunen balioa ezartzea gomendatzen da, bestela, esteken aurrebistako txartelak ez dira eguneratuko eskatu ahala denbora horren aurretik.
min_age: Erabiltzaileei jaiotze-data berresteko eskatuko zaie izen-ematean
peers_api_enabled: Zerbitzari honek fedibertsoan ikusi dituen zerbitzarien domeinu-izenen zerrenda. Ez da daturik ematen zerbitzari jakin batekin federatzearen ala ez federatzearen inguruan, zerbitzariak haien berri duela soilik. Federazioari buruzko estatistika orokorrak biltzen dituzten zerbitzuek erabiltzen dute hau.
profile_directory: Profilen direktorioan ikusgai egotea aukeratu duten erabiltzaile guztiak zerrendatzen dira.
require_invite_text: Izen emateak eskuz onartu behar direnean, "Zergatik elkartu nahi duzu?" testu sarrera derrigorrezko bezala ezarri, ez hautazko
@ -135,12 +132,9 @@ eu:
name: Letrak maiuskula/minuskulara aldatu ditzakezu besterik ez, adibidez irakurterrazago egiteko
terms_of_service:
changelog: Markdown-en sintaxiarekin egitura daiteke.
effective_date: Zentzuzko epe bat 10 eta 30 egun bitartekoa izan daiteke, erabiltzaileei jakinarazten diezun egunetik kontatzen hasita.
text: Markdown-en sintaxiarekin egitura daiteke.
terms_of_service_generator:
admin_email: Legezko abisuak, kontraindikazioak, agindu judizialak, erretiratzeko eskaerak eta legea betetzeko eskaerak barne.
arbitration_address: Goiko helbide fisikoa edo "N/A" bera izan daiteke posta elektronikoa erabiliz gero.
arbitration_website: Web formularioa izan daiteke, edo "N/A" posta elektronikoa erabiliz gero.
user:
chosen_languages: Markatzean, hautatutako hizkuntzetan dauden tutak besterik ez dira erakutsiko.
user_role:
@ -333,9 +327,6 @@ eu:
terms_of_service_generator:
domain: Domeinua
user:
date_of_birth_1i: Eguna
date_of_birth_2i: Hilabetea
date_of_birth_3i: Urtea
role: Rola
time_zone: Ordu zona
user_role:

View File

@ -240,7 +240,6 @@ fi:
setting_display_media_default: Oletus
setting_display_media_hide_all: Piilota kaikki
setting_display_media_show_all: Näytä kaikki
setting_emoji_style: Emojityyli
setting_expand_spoilers: Laajenna aina sisältövaroituksilla merkityt julkaisut
setting_hide_network: Piilota verkostotietosi
setting_missing_alt_text_modal: Näytä vahvistusikkuna ennen kuin julkaistaan mediaa ilman vaihtoehtoista tekstiä

View File

@ -61,7 +61,6 @@ fo:
setting_display_media_default: Fjal miðlafílur, sum eru merktar sum viðkvæmar
setting_display_media_hide_all: Fjal altíð miðlafílur
setting_display_media_show_all: Vís altíð miðlafílur
setting_emoji_style: Hvussu kenslutekn vera víst. "Sjálvvirkandi" roynir at brúka upprunalig kenslutekn, men fellir aftur á Twitter kenslutekn í eldri kagum.
setting_system_scrollbars_ui: Er einans viðkomandi fyri skriviborðskagar grundaðir á Safari og Chrome
setting_use_blurhash: Gradientar eru grundaðir á litirnar av fjaldu myndunum, men grugga allar smálutir
setting_use_pending_items: Fjal tíðarlinjudagføringar aftan fyri eitt klikk heldur enn at skrulla tilføringina sjálvvirkandi
@ -242,7 +241,6 @@ fo:
setting_display_media_default: Sjálvvirði
setting_display_media_hide_all: Fjal alt
setting_display_media_show_all: Vís alt
setting_emoji_style: Kensluteknsstílur
setting_expand_spoilers: Víðka altíð postar, sum eru merktir við innihaldsávaringum
setting_hide_network: Fjal sosiala grafin hjá tær
setting_missing_alt_text_modal: Spyr um góðkenning áðrenn miðlar uttan alternativan tekst verða postaðir

View File

@ -61,7 +61,6 @@ fy:
setting_display_media_default: As gefoelich markearre media ferstopje
setting_display_media_hide_all: Media altyd ferstopje
setting_display_media_show_all: Media altyd toane
setting_emoji_style: Wêrmei moatte emojis werjûn wurde. Automatysk probearret de systeemeigen emojis te brûken, mar falt werom op Twemoji foar âldere browsers.
setting_system_scrollbars_ui: Allinnich fan tapassing op desktopbrowsers basearre op Safari en Chromium
setting_use_blurhash: Dizige kleuroergongen binne basearre op de kleuren fan de ferstoppe media, wêrmei elk detail ferdwynt
setting_use_pending_items: De tiidline wurdt bywurke troch op it oantal nije items te klikken, yn stee fan dat dizze automatysk bywurke wurdt
@ -242,7 +241,6 @@ fy:
setting_display_media_default: Standert
setting_display_media_hide_all: Alles ferstopje
setting_display_media_show_all: Alles toane
setting_emoji_style: Emojistyl
setting_expand_spoilers: Berjochten mei ynhâldswarskôgingen altyd útklappe
setting_hide_network: Jo folgers en wat jo folget ferstopje
setting_missing_alt_text_modal: Befêstigingsfinster toane foar it pleatsen fan media sûnder alt-tekst

View File

@ -61,7 +61,6 @@ ga:
setting_display_media_default: Folaigh meáin atá marcáilte mar íogair
setting_display_media_hide_all: Folaigh meáin i gcónaí
setting_display_media_show_all: Taispeáin meáin i gcónaí
setting_emoji_style: Conas emojis a thaispeáint. Déanfaidh "Auto" iarracht emoji dúchasacha a úsáid, ach titeann sé ar ais go Twemoji le haghaidh seanbhrabhsálaithe.
setting_system_scrollbars_ui: Ní bhaineann sé ach le brabhsálaithe deisce bunaithe ar Safari agus Chrome
setting_use_blurhash: Tá grádáin bunaithe ar dhathanna na n-amharcanna ceilte ach cuireann siad salach ar aon mhionsonraí
setting_use_pending_items: Folaigh nuashonruithe amlíne taobh thiar de chlic seachas an fotha a scrollú go huathoibríoch
@ -245,7 +244,6 @@ ga:
setting_display_media_default: Réamhshocrú
setting_display_media_hide_all: Cuir uile i bhfolach
setting_display_media_show_all: Taispeáin uile
setting_emoji_style: Stíl Emoji
setting_expand_spoilers: Méadaigh postálacha atá marcáilte le rabhaidh inneachair i gcónaí
setting_hide_network: Folaigh do ghraf sóisialta
setting_missing_alt_text_modal: Taispeáin dialóg deimhnithe sula bpostálann tú meán gan alt téacs

View File

@ -61,7 +61,6 @@ gl:
setting_display_media_default: Ocultar medios marcados como sensibles
setting_display_media_hide_all: Ocultar sempre os medios
setting_display_media_show_all: Mostrar sempre os medios marcados como sensibles
setting_emoji_style: Forma de mostrar emojis. «Auto» intentará usar os emojis nativos, e se falla recurrirase a Twemoji en navegadores antigos.
setting_system_scrollbars_ui: Aplícase só en navegadores de escritorio baseados en Safari e Chrome
setting_use_blurhash: Os gradientes toman as cores da imaxe oculta pero esvaecendo tódolos detalles
setting_use_pending_items: Agochar actualizacións da cronoloxía tras un click no lugar de desprazar automáticamente os comentarios
@ -242,7 +241,6 @@ gl:
setting_display_media_default: Por defecto
setting_display_media_hide_all: Ocultar todo
setting_display_media_show_all: Mostrar todo
setting_emoji_style: Estilo dos emojis
setting_expand_spoilers: Despregar sempre as publicacións marcadas con avisos de contido
setting_hide_network: Non mostrar contactos
setting_missing_alt_text_modal: Mostrar mensaxe de confirmación antes de publicar multimedia sen texto descritivo

View File

@ -61,7 +61,6 @@ he:
setting_display_media_default: הסתרת מדיה המסומנת כרגישה
setting_display_media_hide_all: הסתר מדיה תמיד
setting_display_media_show_all: גלה מדיה תמיד
setting_emoji_style: כיצד להציג רגישונים. "אוטומטי" ינסה להציג מסט האימוג'י המקומי, אבל נופל לערכת Twemoji כברירת מחדל עבור דפדפנים ישנים.
setting_system_scrollbars_ui: נוגע רק לגבי דפדפני דסקטופ מבוססים ספארי וכרום
setting_use_blurhash: הגראדיינטים מבוססים על תוכן התמונה המוסתרת, אבל מסתירים את כל הפרטים
setting_use_pending_items: הסתר עדכוני פיד מאחורי קליק במקום לגלול את הפיד אוטומטית
@ -244,7 +243,6 @@ he:
setting_display_media_default: ברירת מחדל
setting_display_media_hide_all: להסתיר הכל
setting_display_media_show_all: להציג הכול
setting_emoji_style: סגנון רגישונים (אמוג'י)
setting_expand_spoilers: להרחיב תמיד הודעות מסומנות באזהרת תוכן
setting_hide_network: להחביא את הגרף החברתי שלך
setting_missing_alt_text_modal: הצג כרטיס אישור לפני פרסום קובץ גרפי ללא תיאור מילולי

View File

@ -61,7 +61,6 @@ is:
setting_display_media_default: Fela myndefni sem merkt er viðkvæmt
setting_display_media_hide_all: Alltaf fela allt myndefni
setting_display_media_show_all: Alltaf birta myndefni sem merkt er viðkvæmt
setting_emoji_style: Hvernig birta skal tjáningartákn (emoji). "Sjálfvirkt" mun reyna að nota innbyggð tjáningartákn, en til vara verða notuð Twemoji-tákn fyrir eldri vafra.
setting_system_scrollbars_ui: Á einungis við um vafra fyrir vinnutölvur sem byggjast á Safari og Chrome
setting_use_blurhash: Litstiglarnir byggja á litunum í földu myndunum, en gera öll smáatriði óskýr
setting_use_pending_items: Fela uppfærslur tímalínu þar til smellt er, í stað þess að hún skruni streyminu sjálfvirkt
@ -242,7 +241,6 @@ is:
setting_display_media_default: Sjálfgefið
setting_display_media_hide_all: Fela allt
setting_display_media_show_all: Birta allt
setting_emoji_style: Stíll tjáningartákna
setting_expand_spoilers: Alltaf útfella færslur sem eru með aðvörun vegna efnisins
setting_hide_network: Fela félagsnetið þitt
setting_missing_alt_text_modal: Birta staðfestingarglugga áður en myndefni án ALT-hjálpartexta er birt

View File

@ -61,7 +61,6 @@ it:
setting_display_media_default: Nascondi media segnati come sensibili
setting_display_media_hide_all: Nascondi sempre tutti i media
setting_display_media_show_all: Mostra sempre i media segnati come sensibili
setting_emoji_style: Come visualizzare gli emoji. "Automatico" proverà a usare gli emoji nativi, ma per i browser più vecchi ricorrerà a Twemoji.
setting_system_scrollbars_ui: Si applica solo ai browser desktop basati su Safari e Chrome
setting_use_blurhash: I gradienti sono basati sui colori delle immagini nascoste ma offuscano tutti i dettagli
setting_use_pending_items: Fare clic per mostrare i nuovi messaggi invece di aggiornare la timeline automaticamente
@ -242,7 +241,6 @@ it:
setting_display_media_default: Predefinita
setting_display_media_hide_all: Nascondi tutti
setting_display_media_show_all: Mostra tutti
setting_emoji_style: Stile emoji
setting_expand_spoilers: Espandi sempre post con content warning
setting_hide_network: Nascondi la tua rete
setting_missing_alt_text_modal: Chiedi di confermare prima di pubblicare media senza testo alternativo

View File

@ -61,7 +61,6 @@ ko:
setting_display_media_default: 민감함으로 표시된 미디어 가리기
setting_display_media_hide_all: 모든 미디어를 가리기
setting_display_media_show_all: 모든 미디어를 보이기
setting_emoji_style: 에모지 표현 방식. "자동"은 시스템 기본 에모지를 적용하고 그렇지 못하는 오래된 브라우저의 경우 트웨모지를 사용합니다.
setting_system_scrollbars_ui: 사파리와 크롬 기반의 데스크탑 브라우저만 적용됩니다
setting_use_blurhash: 그라디언트는 숨겨진 내용의 색상을 기반으로 하지만 상세 내용은 보이지 않게 합니다
setting_use_pending_items: 타임라인의 새 게시물을 자동으로 보여 주는 대신, 클릭해서 나타내도록 합니다
@ -241,7 +240,6 @@ ko:
setting_display_media_default: 기본
setting_display_media_hide_all: 모두 가리기
setting_display_media_show_all: 모두 보이기
setting_emoji_style: 에모지 스타일
setting_expand_spoilers: 내용 경고로 표시된 게시물을 항상 펼치기
setting_hide_network: 내 인맥 숨기기
setting_missing_alt_text_modal: 대체 텍스트 없이 미디어를 게시하려고 할 때 확인창을 띄웁니다

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