Compare commits

...
189 changed files with 5526 additions and 2357 deletions
+3
View File
@@ -448,6 +448,9 @@ jobs:
- name: Check formatting and lint
run: pnpm exec biome ci .
- name: Lint JSX for browser-translation safety
run: pnpm exec eslint . --max-warnings 0
i18n:
runs-on: ubuntu-24.04
timeout-minutes: 25
+23 -1
View File
@@ -84,7 +84,18 @@
},
"useConst": "error",
"noNonNullAssertion": "off",
"noParameterAssign": "off"
"noParameterAssign": "off",
"noRestrictedImports": {
"level": "error",
"options": {
"paths": {
"@lingui/react": {
"importNames": ["I18nProvider"],
"message": "Use AppI18nProvider from @app/features/i18n/components/AppI18nProvider so <Trans> output stays safe under page translation."
}
}
}
}
},
"a11y": {
"recommended": true,
@@ -116,10 +127,21 @@
},
"assist": {"actions": {"source": {"organizeImports": "on"}}},
"overrides": [
{
"includes": ["fluxer_app/src/**/*.tsx"],
"plugins": ["./tools/lint/no-adjacent-jsx-text.grit"]
},
{
"includes": ["fluxer_docs/scripts/VerifyDocsCoverage.ts"],
"linter": {"rules": {"suspicious": {"noTemplateCurlyInString": "off"}}}
},
{
"includes": [
"fluxer_app/src/features/i18n/components/AppI18nProvider.tsx",
"fluxer_app/src/features/i18n/components/AppI18nProvider.test.tsx"
],
"linter": {"rules": {"style": {"noRestrictedImports": "off"}}}
},
{
"includes": ["**/*.astro"],
"linter": {"rules": {"correctness": {"noUnusedImports": "off", "noUnusedVariables": "off"}}},
+54
View File
@@ -117,6 +117,60 @@ FLUXER_IMAGE_TAG=v1
POSTGRES_PASSWORD=CHANGE_ME
MEILI_MASTER_KEY=CHANGE_ME
# The stack ships its own Postgres and its own object store, and points at both
# by service name. Set these to run either one outside the stack. Leave them
# unset and the bundled services are used. Taking a service out of the stack
# means an upgrade skips the backup step that reaches into it, and backing that
# store up belongs to whoever runs it.
#FLUXER_POSTGRES_HOST=db.example.com
#FLUXER_POSTGRES_PORT=5432
#FLUXER_POSTGRES_DATABASE=fluxer
#FLUXER_POSTGRES_USERNAME=fluxer
#FLUXER_POSTGRES_SSL=true
#FLUXER_S3_ENDPOINT=https://s3.eu-central-1.amazonaws.com
#FLUXER_S3_PUBLIC_ENDPOINT=https://cdn.example.com
#FLUXER_S3_REGION=eu-central-1
#FLUXER_S3_FORCE_PATH_STYLE=false
# Bucket names. The bundled object store creates whichever names these hold, so
# the two stay in step. An object store outside the stack needs the buckets to
# exist already.
#FLUXER_S3_BUCKET_CDN=fluxer
#FLUXER_S3_BUCKET_UPLOADS=fluxer-uploads
#FLUXER_S3_BUCKET_DOWNLOADS=fluxer-downloads
#FLUXER_S3_BUCKET_REPORTS=fluxer-reports
#FLUXER_S3_BUCKET_HARVESTS=fluxer-harvests
# The rest of the bundled services, pointed somewhere else the same way. Leave a
# line unset and the service in the stack is used. Taking a service out of the
# stack goes in an override file listed in COMPOSE_FILE, because an upgrade
# replaces docker-compose.yml.
#FLUXER_KV_URL=redis://cache.example.com:6379/0
#FLUXER_NATS_URL=nats://mq.example.com:4222
#FLUXER_NATS_JETSTREAM_URL=nats://mq.example.com:4222
#FLUXER_SVC_NATS_URL=nats://mq.example.com:4222
#FLUXER_SEARCH_URL=https://search.example.com
#FLUXER_LIVEKIT_INTERNAL_URL=http://livekit.example.com:7880
# Voice off. The livekit service still runs until an override file takes it out.
#FLUXER_LIVEKIT_ENABLED=false
# Optional systems, each off unless the instance is configured for it.
#FLUXER_SMS_ENABLED=false
#FLUXER_STRIPE_ENABLED=false
#FLUXER_NCMEC_ENABLED=false
#FLUXER_CLAMAV_ENABLED=false
# The client address. Set the header name a proxy in front actually writes, and
# turn the trust off when nothing sits in front, because a trusted header an
# attacker can set is a spoofed client address.
#FLUXER_CLIENT_IP_HEADER_NAME=cf-connecting-ip
#FLUXER_TRUST_CLIENT_IP_HEADER=true
# How much the services write. trace, debug, info, warn, error or fatal. Every
# service names the object storage endpoint and its addressing at info on start,
# so a bucket that answers 404 is visible without raising this.
#LOG_LEVEL=debug
FLUXER_S3_ACCESS_KEY=fluxer
FLUXER_S3_SECRET_KEY=CHANGE_ME
+35 -29
View File
@@ -2,59 +2,60 @@ name: fluxer
x-fluxer-postgres-env: &fluxer-postgres-env
FLUXER_DATABASE_BACKEND: postgres
FLUXER_POSTGRES_HOST: postgres
FLUXER_POSTGRES_PORT: "5432"
FLUXER_POSTGRES_DATABASE: fluxer
FLUXER_POSTGRES_USERNAME: fluxer
FLUXER_POSTGRES_HOST: ${FLUXER_POSTGRES_HOST:-postgres}
FLUXER_POSTGRES_PORT: "${FLUXER_POSTGRES_PORT:-5432}"
FLUXER_POSTGRES_DATABASE: ${FLUXER_POSTGRES_DATABASE:-fluxer}
FLUXER_POSTGRES_USERNAME: ${FLUXER_POSTGRES_USERNAME:-fluxer}
FLUXER_POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}
FLUXER_POSTGRES_SSL: "false"
FLUXER_POSTGRES_SSL: "${FLUXER_POSTGRES_SSL:-false}"
FLUXER_POSTGRES_PREPARED_STATEMENTS: ${FLUXER_POSTGRES_PREPARED_STATEMENTS:-true}
x-fluxer-env: &fluxer-env
<<: *fluxer-postgres-env
FLUXER_ENV: production
NODE_ENV: production
LOG_LEVEL: ${LOG_LEVEL:-info}
FLUXER_SELF_HOSTED: "true"
FLUXER_BASE_DOMAIN: ${FLUXER_DOMAIN:?set FLUXER_DOMAIN in .env}
FLUXER_PUBLIC_SCHEME: ${FLUXER_PUBLIC_SCHEME:-https}
FLUXER_PUBLIC_PORT: ${FLUXER_PUBLIC_PORT:-443}
FLUXER_PUBLIC_ORIGIN: ${FLUXER_PUBLIC_ORIGIN:-}
FLUXER_TRUST_CLIENT_IP_HEADER: "true"
FLUXER_CLIENT_IP_HEADER_NAME: x-forwarded-for
FLUXER_TRUST_CLIENT_IP_HEADER: "${FLUXER_TRUST_CLIENT_IP_HEADER:-true}"
FLUXER_CLIENT_IP_HEADER_NAME: ${FLUXER_CLIENT_IP_HEADER_NAME:-x-forwarded-for}
FLUXER_API_HEADERS_TIMEOUT_MS: ${FLUXER_API_HEADERS_TIMEOUT_MS:-30000}
FLUXER_API_REQUEST_TIMEOUT_MS: ${FLUXER_API_REQUEST_TIMEOUT_MS:-120000}
FLUXER_KV_URL: redis://valkey:6379/0
FLUXER_NATS_URL: nats://nats:4222
FLUXER_NATS_JETSTREAM_URL: nats://nats:4222
FLUXER_KV_URL: ${FLUXER_KV_URL:-redis://valkey:6379/0}
FLUXER_NATS_URL: ${FLUXER_NATS_URL:-nats://nats:4222}
FLUXER_NATS_JETSTREAM_URL: ${FLUXER_NATS_JETSTREAM_URL:-${FLUXER_NATS_URL:-nats://nats:4222}}
FLUXER_NATS_AUTH_TOKEN: ${FLUXER_NATS_AUTH_TOKEN:-}
FLUXER_SVC_NATS_URL: nats://nats:4222
FLUXER_SVC_NATS_URL: ${FLUXER_SVC_NATS_URL:-${FLUXER_NATS_URL:-nats://nats:4222}}
FLUXER_SVC_SHARD_COUNT: "1"
FLUXER_SEARCH_ENGINE: meilisearch
FLUXER_SEARCH_URL: http://meilisearch:7700
FLUXER_SEARCH_URL: ${FLUXER_SEARCH_URL:-http://meilisearch:7700}
FLUXER_SEARCH_API_KEY: ${MEILI_MASTER_KEY:?set MEILI_MASTER_KEY in .env}
FLUXER_S3_ENDPOINT: http://seaweedfs:8333
FLUXER_S3_PUBLIC_ENDPOINT: http://seaweedfs:8333
FLUXER_S3_REGION: us-east-1
FLUXER_S3_ENDPOINT: ${FLUXER_S3_ENDPOINT:-http://seaweedfs:8333}
FLUXER_S3_PUBLIC_ENDPOINT: ${FLUXER_S3_PUBLIC_ENDPOINT:-${FLUXER_S3_ENDPOINT:-http://seaweedfs:8333}}
FLUXER_S3_REGION: ${FLUXER_S3_REGION:-us-east-1}
FLUXER_S3_ACCESS_KEY_ID: ${FLUXER_S3_ACCESS_KEY:?set FLUXER_S3_ACCESS_KEY in .env}
FLUXER_S3_SECRET_ACCESS_KEY: ${FLUXER_S3_SECRET_KEY:?set FLUXER_S3_SECRET_KEY in .env}
FLUXER_S3_FORCE_PATH_STYLE: "true"
FLUXER_S3_BUCKET_CDN: fluxer
FLUXER_S3_BUCKET_UPLOADS: fluxer-uploads
FLUXER_S3_BUCKET_DOWNLOADS: fluxer-downloads
FLUXER_S3_BUCKET_REPORTS: fluxer-reports
FLUXER_S3_BUCKET_HARVESTS: fluxer-harvests
FLUXER_S3_FORCE_PATH_STYLE: "${FLUXER_S3_FORCE_PATH_STYLE:-true}"
FLUXER_S3_BUCKET_CDN: ${FLUXER_S3_BUCKET_CDN:-fluxer}
FLUXER_S3_BUCKET_UPLOADS: ${FLUXER_S3_BUCKET_UPLOADS:-fluxer-uploads}
FLUXER_S3_BUCKET_DOWNLOADS: ${FLUXER_S3_BUCKET_DOWNLOADS:-fluxer-downloads}
FLUXER_S3_BUCKET_REPORTS: ${FLUXER_S3_BUCKET_REPORTS:-fluxer-reports}
FLUXER_S3_BUCKET_HARVESTS: ${FLUXER_S3_BUCKET_HARVESTS:-fluxer-harvests}
AWS_ACCESS_KEY_ID: ${FLUXER_S3_ACCESS_KEY:?set FLUXER_S3_ACCESS_KEY in .env}
AWS_SECRET_ACCESS_KEY: ${FLUXER_S3_SECRET_KEY:?set FLUXER_S3_SECRET_KEY in .env}
AWS_DEFAULT_REGION: us-east-1
AWS_DEFAULT_REGION: ${FLUXER_S3_REGION:-us-east-1}
AWS_EC2_METADATA_DISABLED: "true"
FLUXER_LIVEKIT_ENABLED: "true"
FLUXER_LIVEKIT_ENABLED: "${FLUXER_LIVEKIT_ENABLED:-true}"
FLUXER_LIVEKIT_API_KEY: ${LIVEKIT_API_KEY:?set LIVEKIT_API_KEY in .env}
FLUXER_LIVEKIT_API_SECRET: ${LIVEKIT_API_SECRET:?set LIVEKIT_API_SECRET in .env}
FLUXER_LIVEKIT_INTERNAL_URL: http://livekit:7880
FLUXER_LIVEKIT_INTERNAL_URL: ${FLUXER_LIVEKIT_INTERNAL_URL:-http://livekit:7880}
FLUXER_LIVEKIT_WEBHOOK_URL: http://api:8080/webhooks/livekit
FLUXER_LIVEKIT_DEFAULT_REGION: '{"id":"default","name":"Default","emoji":"🌍","latitude":0,"longitude":0}'
FLUXER_LIVEKIT_URL: ${FLUXER_LIVEKIT_URL:-${FLUXER_PUBLIC_ORIGIN:-${FLUXER_PUBLIC_SCHEME:-https}://${FLUXER_DOMAIN}:${FLUXER_PUBLIC_PORT:-443}}/livekit}
@@ -72,16 +73,16 @@ x-fluxer-env: &fluxer-env
FLUXER_EMAIL_SMTP_PASSWORD: ${FLUXER_EMAIL_SMTP_PASSWORD:-}
FLUXER_EMAIL_SMTP_SECURE: ${FLUXER_EMAIL_SMTP_SECURE:-true}
FLUXER_SMS_ENABLED: "false"
FLUXER_SMS_ENABLED: "${FLUXER_SMS_ENABLED:-false}"
FLUXER_CAPTCHA_ENABLED: ${FLUXER_CAPTCHA_ENABLED:-false}
FLUXER_CAPTCHA_PROVIDER: ${FLUXER_CAPTCHA_PROVIDER:-none}
FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY: ${FLUXER_CAPTCHA_HCAPTCHA_SITE_KEY:-}
FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY: ${FLUXER_CAPTCHA_HCAPTCHA_SECRET_KEY:-}
FLUXER_CAPTCHA_TURNSTILE_SITE_KEY: ${FLUXER_CAPTCHA_TURNSTILE_SITE_KEY:-}
FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY: ${FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY:-}
FLUXER_STRIPE_ENABLED: "false"
FLUXER_NCMEC_ENABLED: "false"
FLUXER_CLAMAV_ENABLED: "false"
FLUXER_STRIPE_ENABLED: "${FLUXER_STRIPE_ENABLED:-false}"
FLUXER_NCMEC_ENABLED: "${FLUXER_NCMEC_ENABLED:-false}"
FLUXER_CLAMAV_ENABLED: "${FLUXER_CLAMAV_ENABLED:-false}"
FLUXER_DISCOVERY_ENABLED: ${FLUXER_DISCOVERY_ENABLED:-true}
FLUXER_SUDO_MODE_SECRET: ${FLUXER_SUDO_MODE_SECRET:?set FLUXER_SUDO_MODE_SECRET in .env}
@@ -288,11 +289,16 @@ services:
environment:
FLUXER_S3_ACCESS_KEY: ${FLUXER_S3_ACCESS_KEY:?set FLUXER_S3_ACCESS_KEY in .env}
FLUXER_S3_SECRET_KEY: ${FLUXER_S3_SECRET_KEY:?set FLUXER_S3_SECRET_KEY in .env}
FLUXER_S3_BUCKET_CDN: ${FLUXER_S3_BUCKET_CDN:-fluxer}
FLUXER_S3_BUCKET_UPLOADS: ${FLUXER_S3_BUCKET_UPLOADS:-fluxer-uploads}
FLUXER_S3_BUCKET_DOWNLOADS: ${FLUXER_S3_BUCKET_DOWNLOADS:-fluxer-downloads}
FLUXER_S3_BUCKET_REPORTS: ${FLUXER_S3_BUCKET_REPORTS:-fluxer-reports}
FLUXER_S3_BUCKET_HARVESTS: ${FLUXER_S3_BUCKET_HARVESTS:-fluxer-harvests}
entrypoint:
- /bin/sh
- -c
- >
buckets="fluxer fluxer-uploads fluxer-downloads fluxer-reports fluxer-harvests";
buckets="$$FLUXER_S3_BUCKET_CDN $$FLUXER_S3_BUCKET_UPLOADS $$FLUXER_S3_BUCKET_DOWNLOADS $$FLUXER_S3_BUCKET_REPORTS $$FLUXER_S3_BUCKET_HARVESTS";
missing="$$buckets";
for attempt in $$(seq 1 60); do
if ! nc -z seaweedfs 9333 2>/dev/null; then
+38
View File
@@ -0,0 +1,38 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import reactGoogleTranslate from 'eslint-plugin-react-google-translate';
import tseslint from 'typescript-eslint';
export default [
{
ignores: [
'**/node_modules/**',
'**/dist/**',
'**/build/**',
'**/coverage/**',
'**/*.generated.*',
'fluxer_app/src/features/i18n/locales/*/messages.mjs',
],
},
{
files: ['fluxer_app/src/**/*.tsx'],
linterOptions: {
reportUnusedDisableDirectives: 'error',
},
languageOptions: {
parser: tseslint.parser,
parserOptions: {
project: './fluxer_app/tsconfig.json',
tsconfigRootDir: import.meta.dirname,
},
},
plugins: {'react-google-translate': reactGoogleTranslate},
rules: {
'react-google-translate/no-conditional-text-nodes-with-siblings': [
'error',
{ignoreParents: ['Trans', 'Plural', 'Select', 'SelectOrdinal']},
],
'react-google-translate/no-return-text-nodes': 'error',
},
},
];
@@ -560,6 +560,8 @@ fn traits_form(
}
}
const DERIVED_TRAITS: [&str; 1] = ["premium"];
fn parse_trait_definitions(limit_config: Option<&LimitConfigResponse>) -> Vec<&str> {
limit_config
.map(|response| {
@@ -569,6 +571,7 @@ fn parse_trait_definitions(limit_config: Option<&LimitConfigResponse>) -> Vec<&s
.iter()
.map(|value| value.trim())
.filter(|value| !value.is_empty())
.filter(|value| !DERIVED_TRAITS.contains(value))
.collect()
})
.unwrap_or_default()
@@ -579,5 +582,6 @@ fn custom_traits<'a>(user: &'a AdminUser, trait_definitions: &[&str]) -> Vec<&'a
.iter()
.map(String::as_str)
.filter(|trait_name| !trait_definitions.contains(trait_name))
.filter(|trait_name| !DERIVED_TRAITS.contains(trait_name))
.collect()
}
@@ -45,6 +45,7 @@ import {Logger} from '../../Logger';
import {getInstanceConfigRepository} from '../../middleware/ServiceSingletons';
import type {IRiskHistoryRepository} from '../../risk/HistoricalOutcomeRepository';
import type {HistoricalOutcomeCode} from '../../risk/RiskHistoryTypes';
import {resolveAssignedTraits} from '../../user/UserTraits';
import {getIpAddressReverse, getLocationLabelFromIp} from '../../utils/IpUtils';
import {resolveSessionClientInfo} from '../../utils/SessionClientIdentity';
import {mapUserToAdminResponse} from '../models/UserTypes';
@@ -383,7 +384,8 @@ export class AdminUserSecurityService {
if (!user) {
throw new UnknownUserError();
}
const traitSet = data.traits.length > 0 ? new Set(data.traits) : null;
const assigned = resolveAssignedTraits(user.traits ?? [], data.traits);
const traitSet = assigned.size > 0 ? assigned : null;
const updatedUser = await userRepository.patchUpsert(
userId,
{
@@ -308,7 +308,7 @@ export async function createMessageSnapshotsForForward(
return [new MessageSnapshotModel(snapshotData)];
}
function collectEmbedReferencedAttachmentCdnKeys(message: Message): Array<string> {
function collectEmbedReferencedAttachmentCdnKeys(message: Message, ownKeys: ReadonlySet<string>): Array<string> {
const mediaPrefix = `${Config.endpoints.media}/`;
const keys = new Set<string>();
const consider = (url: string | null | undefined): void => {
@@ -316,7 +316,7 @@ function collectEmbedReferencedAttachmentCdnKeys(message: Message): Array<string
return;
}
const key = url.slice(mediaPrefix.length);
if (key.startsWith('attachments/')) {
if (ownKeys.has(key)) {
keys.add(key);
}
};
@@ -342,6 +342,11 @@ export async function purgeMessageAttachments(
): Promise<void> {
const cdnKeys = new Set<string>();
const cdnUrls: Array<string> = [];
const ownedCdnKeys = new Set<string>(
collectMessageAttachments(message).map((attachment) =>
makeAttachmentCdnKey(message.channelId, attachment.id, attachment.filename),
),
);
for (const attachment of collectMessageAttachments(message)) {
const cdnKey = makeAttachmentCdnKey(message.channelId, attachment.id, attachment.filename);
if (cdnKeys.has(cdnKey)) {
@@ -352,7 +357,7 @@ export async function purgeMessageAttachments(
cdnUrls.push(makeAttachmentCdnUrl(message.channelId, attachment.id, attachment.filename));
}
}
for (const embedKey of collectEmbedReferencedAttachmentCdnKeys(message)) {
for (const embedKey of collectEmbedReferencedAttachmentCdnKeys(message, ownedCdnKeys)) {
if (cdnKeys.has(embedKey)) {
continue;
}
@@ -143,6 +143,32 @@ describe('StorageService.getPresignedUploadURL', () => {
},
);
});
it('gives both clients the configured addressing rather than pinning one to path style', async () => {
await withS3Config(
{
endpoint: 'https://s3.example.test',
presignedUrlBase: '',
forcePathStyle: false,
region: 'eu-central-1',
accessKeyId: 'fluxer',
secretAccessKey: 'fluxer-secret',
buckets: {uploads: 'fluxer-uploads'},
},
async () => {
const service = new StorageService();
const probe = service as unknown as {
client: {config: {forcePathStyle?: unknown}};
presignClient: {config: {forcePathStyle?: unknown}};
};
const resolve = async (value: unknown): Promise<unknown> =>
typeof value === 'function' ? await (value as () => Promise<unknown>)() : value;
expect(await resolve(probe.client.config.forcePathStyle)).toBe(false);
expect(await resolve(probe.presignClient.config.forcePathStyle)).toBe(false);
},
);
});
});
describe('StorageService.copyObjectWithMetadataStripping', () => {
@@ -127,7 +127,7 @@ export class StorageService implements IStorageService {
region: this.provider.region,
accessKeyId: this.provider.accessKeyId,
secretAccessKey: this.provider.secretAccessKey,
forcePathStyle: true,
forcePathStyle: this.provider.forcePathStyle,
});
this.presignClient = buildPooledS3Client({
endpoint: this.resolvePresignEndpoint(),
@@ -136,6 +136,15 @@ export class StorageService implements IStorageService {
secretAccessKey: this.provider.secretAccessKey,
forcePathStyle: this.provider.forcePathStyle,
});
Logger.info(
{
endpoint: this.provider.endpoint,
presignEndpoint: this.resolvePresignEndpoint(),
region: this.provider.region,
addressing: this.provider.forcePathStyle ? 'path' : 'virtual-host',
},
'Object storage client ready',
);
}
private resolvePresignEndpoint(): string {
@@ -0,0 +1,56 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {describe, expect, it} from 'vitest';
import {isDerivedTrait, isServerManagedTrait, resolveAssignedTraits} from './UserTraits';
describe('UserTraits', () => {
it('treats premium as derived rather than assignable', () => {
expect(isDerivedTrait('premium')).toBe(true);
expect(isDerivedTrait('beta-tester')).toBe(false);
});
it('recognises every trait shape the server manages', () => {
expect(isServerManagedTrait('sso')).toBe(true);
expect(isServerManagedTrait('sso:acme')).toBe(true);
expect(isServerManagedTrait('sso_provider:0123456789abcdef')).toBe(true);
expect(isServerManagedTrait('sso_identity:0123456789abcdef')).toBe(true);
expect(isServerManagedTrait('registration_pending_approval')).toBe(true);
expect(isServerManagedTrait('registration_rejected')).toBe(true);
expect(isServerManagedTrait('beta-tester')).toBe(false);
});
it('keeps the operator traits it was given', () => {
expect([...resolveAssignedTraits([], ['beta-tester', 'experimental'])]).toEqual(['beta-tester', 'experimental']);
});
it('drops premium because nothing reads the stored value', () => {
expect([...resolveAssignedTraits([], ['premium'])]).toEqual([]);
expect([...resolveAssignedTraits([], ['beta-tester', 'premium'])]).toEqual(['beta-tester']);
});
it('keeps a premium user premium when the operator saves other traits', () => {
expect([...resolveAssignedTraits(['premium'], ['beta-tester'])]).toEqual(['beta-tester']);
});
it('preserves server managed traits the operator did not send', () => {
const resolved = resolveAssignedTraits(
['sso', 'sso:acme', 'sso_identity:0123456789abcdef', 'beta-tester'],
['experimental'],
);
expect([...resolved].sort()).toEqual(['experimental', 'sso', 'sso:acme', 'sso_identity:0123456789abcdef']);
});
it('keeps a pending approval user pending when their traits are cleared', () => {
expect([...resolveAssignedTraits(['registration_pending_approval'], [])]).toEqual([
'registration_pending_approval',
]);
});
it('refuses to let an operator forge a server managed trait', () => {
expect([...resolveAssignedTraits([], ['sso', 'sso_identity:forged'])]).toEqual([]);
});
it('ignores empty trait names', () => {
expect([...resolveAssignedTraits([], ['', 'beta-tester'])]).toEqual(['beta-tester']);
});
});
+31
View File
@@ -0,0 +1,31 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
const DERIVED_TRAITS = new Set(['premium']);
const SERVER_MANAGED_TRAITS = new Set(['sso', 'registration_pending_approval', 'registration_rejected']);
const SERVER_MANAGED_TRAIT_PREFIXES = ['sso:', 'sso_provider:', 'sso_identity:'];
export function isDerivedTrait(trait: string): boolean {
return DERIVED_TRAITS.has(trait);
}
export function isServerManagedTrait(trait: string): boolean {
return SERVER_MANAGED_TRAITS.has(trait) || SERVER_MANAGED_TRAIT_PREFIXES.some((prefix) => trait.startsWith(prefix));
}
export function resolveAssignedTraits(current: Iterable<string>, requested: Iterable<string>): Set<string> {
const next = new Set<string>();
for (const trait of requested) {
if (!trait || isDerivedTrait(trait) || isServerManagedTrait(trait)) {
continue;
}
next.add(trait);
}
for (const trait of current) {
if (isServerManagedTrait(trait)) {
next.add(trait);
}
}
return next;
}
@@ -0,0 +1,68 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {describe, expect, it} from 'vitest';
import {type ChannelID, createChannelID, createMessageID, createUserID, type MessageID} from '../../BrandedTypes';
import {harvestMessages} from './HarvestUserData';
const AUTHOR = createUserID(1000000000000000000n);
function makeRepository(refs: Array<{channelId: ChannelID; messageId: MessageID}>, missing = new Set<string>()) {
let pages = 0;
return {
pages: () => pages,
listMessagesByAuthor: async (_userId: typeof AUTHOR, limit: number, lastMessageId?: MessageID) => {
pages++;
const start = lastMessageId ? refs.findIndex((r) => r.messageId === lastMessageId) + 1 : 0;
return refs.slice(start, start + limit);
},
getMessage: async (_channelId: ChannelID, messageId: MessageID) =>
missing.has(messageId.toString()) ? null : {content: `body ${messageId.toString()}`, attachments: undefined},
};
}
function refsAcross(channelCount: number, perChannel: number) {
const out: Array<{channelId: ChannelID; messageId: MessageID}> = [];
let id = 1500000000000000000n;
for (let c = 0; c < channelCount; c++) {
const channelId = createChannelID(2000000000000000000n + BigInt(c));
for (let m = 0; m < perChannel; m++) {
out.push({channelId, messageId: createMessageID(id)});
id += 1n;
}
}
return out;
}
describe('harvestMessages', () => {
it('reads past a single page instead of stopping at one query', async () => {
const refs = refsAcross(1, 2500);
const repo = makeRepository(refs);
const result = await harvestMessages(repo, AUTHOR, Date.now(), null);
expect(result.totalMessages).toBe(2500);
expect(repo.pages()).toBeGreaterThan(1);
});
it('groups every message under its own channel', async () => {
const repo = makeRepository(refsAcross(3, 4));
const result = await harvestMessages(repo, AUTHOR, Date.now(), null);
expect(result.channelMessagesMap.size).toBe(3);
for (const messages of result.channelMessagesMap.values()) {
expect(messages).toHaveLength(4);
}
expect(result.totalMessages).toBe(12);
});
it('leaves out a message the repository cannot return', async () => {
const refs = refsAcross(1, 5);
const repo = makeRepository(refs, new Set([refs[2].messageId.toString()]));
const result = await harvestMessages(repo, AUTHOR, Date.now(), null);
expect(result.totalMessages).toBe(4);
});
it('returns an empty map for an account with no messages', async () => {
const repo = makeRepository([]);
const result = await harvestMessages(repo, AUTHOR, Date.now(), null);
expect(result.totalMessages).toBe(0);
expect(result.channelMessagesMap.size).toBe(0);
});
});
@@ -171,6 +171,10 @@ interface ArchiveResult {
downloadUrl: string;
}
// A harvest is every message the account wrote, so the read pages to the end of
// the account rather than stopping at a count. The page size is what bounds one
// query, not what bounds the archive.
const HARVEST_MESSAGE_CHUNK_SIZE = 1000;
const CONCURRENT_MESSAGE_LIMIT = 10;
const INITIAL_PROGRESS = 5;
const MESSAGES_PROGRESS_MAX = 55;
@@ -226,11 +230,12 @@ interface HarvestMessagesFilterArgs {
findChannel: (channelId: ChannelID) => Promise<Channel | null>;
}
async function harvestMessages(
export async function harvestMessages(
channelRepository: {
listMessagesByAuthor: (
userId: UserID,
limit: number,
lastMessageId?: MessageID,
) => Promise<
Array<{
channelId: ChannelID;
@@ -250,24 +255,78 @@ async function harvestMessages(
filterArgs: HarvestMessagesFilterArgs | null,
): Promise<HarvestMessageResult> {
const channelMessagesMap = new Map<string, Array<HarvestedMessage>>();
const channelEligibility = filterArgs ? new Map<string, boolean>() : null;
Logger.debug('Fetching all user messages');
const startFetchTime = Date.now();
const messageRefs = await channelRepository.listMessagesByAuthor(userId, 100000);
Logger.debug(
{
totalMessages: messageRefs.length,
fetchElapsed: Date.now() - startFetchTime,
totalElapsed: Date.now() - startTime,
},
'All messages retrieved',
);
if (messageRefs.length === 0) {
return {channelMessagesMap, totalMessages: 0};
}
const channelEligibility = filterArgs ? new Map<string, boolean>() : null;
const filteredRefs: Array<{channelId: ChannelID; messageId: MessageID}> = [];
if (filterArgs) {
for (const ref of messageRefs) {
let lastMessageId: MessageID | undefined;
let scannedMessages = 0;
let totalMessages = 0;
const readMessage = async ({
channelId,
messageId,
}: {
channelId: ChannelID;
messageId: MessageID;
}): Promise<ChannelHarvestResult | null> => {
try {
const message = await channelRepository.getMessage(channelId, messageId);
if (!message) {
Logger.warn(
{channelId: channelId.toString(), messageId: messageId.toString()},
'Message not found during harvest',
);
return null;
}
const timestamp = snowflakeToDate(messageId);
const attachments: Array<HarvestedAttachment> = [];
if (message.attachments) {
for (const attachment of message.attachments) {
attachments.push({
attachment_id: attachment.id.toString(),
filename: attachment.filename,
size: attachment.size.toString(),
content_type: attachment.contentType,
content_hash: null,
archive_path: null,
cdn_url: makeAttachmentCdnUrl(channelId, attachment.id, attachment.filename),
width: attachment.width,
height: attachment.height,
});
}
}
return {
channelId: channelId.toString(),
messageData: {
id: messageId.toString(),
timestamp: timestamp.toISOString(),
content: message.content ?? '',
attachments,
},
};
} catch (error) {
Logger.error(
{error, channelId: channelId.toString(), messageId: messageId.toString()},
'Failed to process message during harvest',
);
return null;
}
};
while (true) {
const page = await channelRepository.listMessagesByAuthor(userId, HARVEST_MESSAGE_CHUNK_SIZE, lastMessageId);
if (page.length === 0) {
break;
}
scannedMessages += page.length;
lastMessageId = page[page.length - 1].messageId;
const pageRefs: Array<{channelId: ChannelID; messageId: MessageID}> = [];
for (const ref of page) {
if (!filterArgs) {
pageRefs.push(ref);
continue;
}
const ts = snowflakeToDate(ref.messageId).getTime();
if (!isTimestampInWindow(ts, filterArgs.filter)) {
continue;
@@ -280,76 +339,41 @@ async function harvestMessages(
channelEligibility!.set(channelIdStr, eligible);
}
if (eligible) {
filteredRefs.push(ref);
pageRefs.push(ref);
}
}
} else {
filteredRefs.push(...messageRefs);
}
if (filteredRefs.length === 0) {
return {channelMessagesMap, totalMessages: 0};
}
const messages: Array<ChannelHarvestResult> = [];
for (let i = 0; i < filteredRefs.length; i += CONCURRENT_MESSAGE_LIMIT) {
const batch = filteredRefs.slice(i, i + CONCURRENT_MESSAGE_LIMIT);
const batchPromises = batch.map(async ({channelId, messageId}): Promise<ChannelHarvestResult | null> => {
try {
const message = await channelRepository.getMessage(channelId, messageId);
if (!message) {
Logger.warn(
{channelId: channelId.toString(), messageId: messageId.toString()},
'Message not found during harvest',
);
return null;
for (let i = 0; i < pageRefs.length; i += CONCURRENT_MESSAGE_LIMIT) {
const batchResults = await Promise.all(pageRefs.slice(i, i + CONCURRENT_MESSAGE_LIMIT).map(readMessage));
for (const result of batchResults) {
if (result === null) {
continue;
}
const timestamp = snowflakeToDate(messageId);
const attachments: Array<HarvestedAttachment> = [];
if (message.attachments) {
for (const attachment of message.attachments) {
attachments.push({
attachment_id: attachment.id.toString(),
filename: attachment.filename,
size: attachment.size.toString(),
content_type: attachment.contentType,
content_hash: null,
archive_path: null,
cdn_url: makeAttachmentCdnUrl(channelId, attachment.id, attachment.filename),
width: attachment.width,
height: attachment.height,
});
}
let bucket = channelMessagesMap.get(result.channelId);
if (!bucket) {
bucket = [];
channelMessagesMap.set(result.channelId, bucket);
}
return {
channelId: channelId.toString(),
messageData: {
id: messageId.toString(),
timestamp: timestamp.toISOString(),
content: message.content ?? '',
attachments,
},
};
} catch (error) {
Logger.error(
{error, channelId: channelId.toString(), messageId: messageId.toString()},
'Failed to process message during harvest',
);
return null;
}
});
const batchResults = await Promise.all(batchPromises);
for (const result of batchResults) {
if (result !== null) {
messages.push(result);
bucket.push(result.messageData);
totalMessages++;
}
}
}
for (const {channelId, messageData} of messages) {
if (!channelMessagesMap.has(channelId)) {
channelMessagesMap.set(channelId, []);
if (page.length < HARVEST_MESSAGE_CHUNK_SIZE) {
break;
}
channelMessagesMap.get(channelId)!.push(messageData);
}
return {channelMessagesMap, totalMessages: messages.length};
Logger.debug(
{
scannedMessages,
totalMessages,
fetchElapsed: Date.now() - startFetchTime,
totalElapsed: Date.now() - startTime,
},
'All messages retrieved',
);
return {channelMessagesMap, totalMessages};
}
function buildUserDataJson(params: UserDataJsonParams) {
@@ -11,6 +11,7 @@ const JSX_EXTENSIONS = new Set(['.tsx', '.jsx']);
const SKIP_DIRS = new Set(['node_modules', 'dist', 'coverage', '.cache', '.swc']);
const GENERATED_FILES = new Set([join(SOURCE_DIR, 'features', 'ui', 'components', 'SVGMasks.tsx')]);
const NON_THEMEABLE_IDENTIFIERS = new Set([
'AppI18nProvider',
'Fragment',
'I18nProvider',
'Outlet',
+3 -3
View File
@@ -23,6 +23,7 @@ import {type LayoutVariant, LayoutVariantProvider} from '@app/features/app/state
import RuntimeCrash from '@app/features/app/state/RuntimeCrash';
import {showMyselfTypingHelper} from '@app/features/devtools/utils/ShowMyselfTypingHelper';
import GatewayConnection from '@app/features/gateway/transport/GatewayConnection';
import {AppI18nProvider} from '@app/features/i18n/components/AppI18nProvider';
import MemberSidebar from '@app/features/member/state/MemberSidebar';
import {startDeepLinkHandling} from '@app/features/navigation/utils/DeepLinkUtils';
import {Outlet, RouterProvider} from '@app/features/platform/components/router/RouterReact';
@@ -60,7 +61,6 @@ import {useStopFlashFrameOnFocus} from '@app/features/window/hooks/useStopFlashF
import {useWindowEventListeners} from '@app/features/window/hooks/useWindowEventListeners';
import {i18n} from '@lingui/core';
import {msg} from '@lingui/core/macro';
import {I18nProvider} from '@lingui/react';
import {useLingui} from '@lingui/react/macro';
import {IconContext} from '@phosphor-icons/react';
import {reaction} from 'mobx';
@@ -239,7 +239,7 @@ export const App = observer((): React.ReactElement => {
return () => detach?.();
}, []);
return (
<I18nProvider i18n={i18n}>
<AppI18nProvider i18n={i18n}>
<IconContext.Provider value={{color: 'currentColor', weight: 'fill'}}>
<PremiumCheckoutReturnWatcher data-flx="app.app.premium-checkout-return-watcher" />
<DndContext data-flx="app.app.dnd-context">
@@ -250,6 +250,6 @@ export const App = observer((): React.ReactElement => {
</RouterProvider>
</DndContext>
</IconContext.Provider>
</I18nProvider>
</AppI18nProvider>
);
});
+2
View File
@@ -18,6 +18,8 @@ interface FluxerDebugApi {
getClientInfoObjectSync?: () => unknown;
getVoiceSubscriptionDebug?: () => Promise<unknown>;
getVoiceSubscriptionDebugJson?: () => Promise<string>;
getTranslationDomGuardStats?: () => unknown;
uninstallTranslationDomGuard?: () => boolean;
}
type FluxerDebugGlobal = Record<string, unknown> & FluxerDebugApi;
@@ -12,6 +12,7 @@ import {AuthCardContainer} from '@app/features/auth/flow/AuthCardContainer';
import {useAuthBackground} from '@app/features/auth/hooks/useAuthBackground';
import {type AuthCardVariant, AuthLayoutContext} from '@app/features/auth/state/AuthLayoutContext';
import {AuthRegisterDraftContext, type AuthRegisterFormDraft} from '@app/features/auth/state/AuthRegisterDraftContext';
import {AppI18nProvider} from '@app/features/i18n/components/AppI18nProvider';
import {useLocation} from '@app/features/platform/components/router/RouterReact';
import {FluxerWordmark} from '@app/features/ui/components/icons/FluxerWordmark';
import {Scroller, type ScrollerHandle} from '@app/features/ui/components/Scroller';
@@ -21,7 +22,6 @@ import {useNativeTitleBar} from '@app/features/window/hooks/useNativeTitleBar';
import foodPatternUrl from '@app/media/images/i-like-food.svg';
import type {GuildSplashCardAlignmentValue} from '@fluxer/constants/src/GuildConstants';
import {GuildSplashCardAlignment} from '@fluxer/constants/src/GuildConstants';
import {I18nProvider} from '@lingui/react';
import clsx from 'clsx';
import {observer} from 'mobx-react-lite';
import {type ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react';
@@ -258,8 +258,8 @@ export const AuthLayout = observer(function AuthLayout({children}: {children?: R
return null;
}
return (
<I18nProvider i18n={i18n}>
<AppI18nProvider i18n={i18n}>
<AuthLayoutContent data-flx="app.auth-layout.auth-layout-content">{children}</AuthLayoutContent>
</I18nProvider>
</AppI18nProvider>
);
});
@@ -165,9 +165,11 @@ export const TermsAcceptanceModal = observer(() => {
ref={primaryRef}
data-flx="auth.terms-acceptance-modal.button.accept"
>
{kind === 'terms' && i18n._(I_AGREE_TO_THE_UPDATED_TERMS_DESCRIPTOR)}
{kind === 'privacy' && i18n._(I_AGREE_TO_THE_UPDATED_PRIVACY_POLICY_DESCRIPTOR)}
{kind === 'both' && i18n._(I_AGREE_TO_THE_UPDATED_POLICIES_DESCRIPTOR)}
{kind === 'terms'
? i18n._(I_AGREE_TO_THE_UPDATED_TERMS_DESCRIPTOR)
: kind === 'privacy'
? i18n._(I_AGREE_TO_THE_UPDATED_PRIVACY_POLICY_DESCRIPTOR)
: i18n._(I_AGREE_TO_THE_UPDATED_POLICIES_DESCRIPTOR)}
</Button>
</Modal.Footer>
</Modal.Root>
@@ -20,7 +20,7 @@ export function AuthBottomLink({variant, to}: AuthBottomLinkProps) {
return (
<div className={styles.bottomLink} data-flx="auth.flow.auth-bottom-link.bottom-link">
<span className={styles.bottomLinkText} data-flx="auth.flow.auth-bottom-link.bottom-link-text">
{variant === 'login' ? i18n._(ALREADY_HAVE_ACCOUNT_DESCRIPTOR) : i18n._(NEED_ACCOUNT_DESCRIPTOR)}{' '}
{`${variant === 'login' ? i18n._(ALREADY_HAVE_ACCOUNT_DESCRIPTOR) : i18n._(NEED_ACCOUNT_DESCRIPTOR)} `}
</span>
<AuthRouterLink
to={to}
@@ -142,7 +142,9 @@ const IpAuthorizationScreen = ({challenge, onAuthorized, onBack}: IpAuthorizatio
data-flx="auth.flow.ip-authorization-screen.button.resend"
>
{resendUsed ? <Trans>Resent</Trans> : <Trans>Resend email</Trans>}
{resendIn > 0 ? ` (${resendIn}s)` : ''}
<flx-i18n data-flx="auth.flow.ip-authorization-screen.flx-i18n">
{resendIn > 0 ? ` (${resendIn}s)` : ''}
</flx-i18n>
</Button>
)}
{onBack ? (
@@ -182,7 +182,9 @@ export const ReplyBar = observer(function ReplyBar({
data-flx="channel.reply-bar.switch.toggle-mention"
>
<AtIcon weight="bold" className={styles.mentionIcon} data-flx="channel.reply-bar.mention-icon" />
{shouldMention ? i18n._(ON_DESCRIPTOR) : i18n._(OFF_DESCRIPTOR)}
<flx-i18n data-flx="channel.channel-reply-bar.reply-bar.flx-i18n">
{shouldMention ? i18n._(ON_DESCRIPTOR) : i18n._(OFF_DESCRIPTOR)}
</flx-i18n>
</button>
</FocusRing>
</Tooltip>
@@ -223,8 +223,7 @@ export const ReplyPreview = observer(
data-guild-id={resolvedGuildId}
data-flx="channel.reply-preview.replied-username"
>
{message.mentions.some((mention) => mention.id === referencedMessage.author.id) && '@'}
{NicknameUtils.getNickname(referencedMessage.author, resolvedGuildId)}
{`${message.mentions.some((mention) => mention.id === referencedMessage.author.id) ? '@' : ''}${NicknameUtils.getNickname(referencedMessage.author, resolvedGuildId)}`}
</span>
</PreloadableUserPopout>
<FocusRing offset={-2} data-flx="channel.reply-preview.focus-ring">
@@ -68,6 +68,7 @@ export const DEFAULT_DEVELOPER_OPTIONS = {
mockTitlebarPlatformOverride: 'auto',
mockAttachmentStates: {},
noOpInAppReports: false,
disableTranslationDomGuard: false,
} satisfies DeveloperOptionsState;
const PREMIUM_SCENARIO_OVERRIDE_KEYS = new Set<keyof DeveloperOptionsState>([
'premiumTypeOverride',
@@ -81,10 +81,11 @@ export function CsvAttachmentTablePanel({
data-flx="channel.embeds.attachments.csv-attachment-table-panel.warning-circle-icon"
/>
<span data-flx="channel.embeds.attachments.csv-attachment-table-panel.span">
{previewError?.type === 'size'
? i18n._(FILE_IS_TOO_LARGE_FOR_INLINE_PREVIEW_LIMIT_DESCRIPTOR, {previewLimitKb: PREVIEW_LIMIT_KB})
: i18n._(UNABLE_TO_LOAD_PREVIEW_DESCRIPTOR)}
{previewError?.type === 'network' && previewError.message ? ` ${previewError.message}` : ''}
{`${
previewError?.type === 'size'
? i18n._(FILE_IS_TOO_LARGE_FOR_INLINE_PREVIEW_LIMIT_DESCRIPTOR, {previewLimitKb: PREVIEW_LIMIT_KB})
: i18n._(UNABLE_TO_LOAD_PREVIEW_DESCRIPTOR)
}${previewError?.type === 'network' && previewError.message ? ` ${previewError.message}` : ''}`}
</span>
</div>
</div>
@@ -64,10 +64,11 @@ export function TextualAttachmentCodePanel({
data-flx="channel.embeds.attachments.textual-attachment-code-panel.warning-circle-icon"
/>
<span data-flx="channel.embeds.attachments.textual-attachment-code-panel.span">
{previewError?.type === 'size'
? i18n._(FILE_IS_TOO_LARGE_FOR_INLINE_PREVIEW_LIMIT_DESCRIPTOR, {previewLimitKb: PREVIEW_LIMIT_KB})
: i18n._(UNABLE_TO_LOAD_PREVIEW_DESCRIPTOR)}
{previewError?.type === 'network' && previewError.message ? ` ${previewError.message}` : ''}
{`${
previewError?.type === 'size'
? i18n._(FILE_IS_TOO_LARGE_FOR_INLINE_PREVIEW_LIMIT_DESCRIPTOR, {previewLimitKb: PREVIEW_LIMIT_KB})
: i18n._(UNABLE_TO_LOAD_PREVIEW_DESCRIPTOR)
}${previewError?.type === 'network' && previewError.message ? ` ${previewError.message}` : ''}`}
</span>
</div>
</div>
@@ -116,7 +116,9 @@ export const FiltersSection: React.FC<FiltersSectionProps> = observer(
size={remFromPx(12)}
data-flx="channel.message-search-bar.filter-option.filters-section.funnel-icon"
/>
{title || i18n._(SEARCH_FILTERS_DESCRIPTOR)}
<flx-i18n data-flx="channel.message-search-bar.filter-option.filters-section.flx-i18n">
{title || i18n._(SEARCH_FILTERS_DESCRIPTOR)}
</flx-i18n>
</span>
</div>
{options.map((option: SearchFilterOption, index) => (
@@ -91,7 +91,9 @@ export const PlaintextSection: React.FC<PlaintextSectionProps> = observer(
data-flx="channel.message-search-bar.plaintext-section.magnifying-glass-icon"
/>
)}
{group === 'filter-key' ? i18n._(SEARCH_FILTERS_DESCRIPTOR) : `${group}:`}
<flx-i18n data-flx="channel.message-search-bar.plaintext-section.flx-i18n">
{group === 'filter-key' ? i18n._(SEARCH_FILTERS_DESCRIPTOR) : `${group}:`}
</flx-i18n>
</span>
</div>
{entries.map(({row, index}) => {
@@ -84,7 +84,8 @@ export const UnaddableRecipientsConfirmModal = observer(
<ul data-flx="channel.unaddable-recipients-confirm-modal.ul">
{rows.map((row) => (
<li key={row.userId} data-flx="channel.unaddable-recipients-confirm-modal.li">
<strong data-flx="channel.unaddable-recipients-confirm-modal.strong">{row.name}</strong>: {row.reasonText}
<strong data-flx="channel.unaddable-recipients-confirm-modal.strong">{row.name}</strong>
<span data-flx="channel.unaddable-recipients-confirm-modal.span">{`: ${row.reasonText}`}</span>
</li>
))}
</ul>
@@ -34,6 +34,16 @@ const ALWAYS_DISPLAY_THE_VOICE_CONNECTION_STATUS_BAR_IN_DESCRIPTOR = msg({
comment:
'Developer / debug surface — keep terse and technical. Tooltip / description for forcing the voice connection status bar visible in mocked mode.',
});
const DISABLE_TRANSLATION_DOM_GUARD_DESCRIPTOR = msg({
message: 'Disable translation DOM guard',
comment: 'Developer option label for turning off the page-translator DOM crash guard.',
});
const STOP_PATCHING_NODE_PROTOTYPE_INSERTBEFORE_AND_DESCRIPTOR = msg({
message:
'Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds.',
comment:
'Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.',
});
const APP_STATE_DESCRIPTOR = msg({
message: 'App state',
comment: 'Developer options group for overriding app/account state.',
@@ -255,6 +265,11 @@ export const getToggleGroups = (): Array<ToggleGroup> => [
label: NO_OP_IN_APP_REPORTS_DESCRIPTOR,
description: NO_OP_IN_APP_REPORTS_DESC_DESCRIPTOR,
},
{
key: 'disableTranslationDomGuard',
label: DISABLE_TRANSLATION_DOM_GUARD_DESCRIPTOR,
description: STOP_PATCHING_NODE_PROTOTYPE_INSERTBEFORE_AND_DESCRIPTOR,
},
],
},
];
@@ -96,6 +96,7 @@ export type DeveloperOptionsState = Readonly<{
}
>;
noOpInAppReports: boolean;
disableTranslationDomGuard: boolean;
}>;
type MutableDeveloperOptionsState = {
-readonly [K in keyof DeveloperOptionsState]: DeveloperOptionsState[K];
@@ -179,6 +180,7 @@ class DeveloperOptions implements DeveloperOptionsState {
mockGiftRedeemed: boolean | null = null;
mockTitlebarPlatformOverride: DeveloperOptionsState['mockTitlebarPlatformOverride'] = 'auto';
noOpInAppReports = false;
disableTranslationDomGuard = false;
constructor() {
makeAutoObservable(this, {}, {autoBind: true});
@@ -250,6 +252,7 @@ class DeveloperOptions implements DeveloperOptionsState {
'mockTitlebarPlatformOverride',
'mockAttachmentStates',
'noOpInAppReports',
'disableTranslationDomGuard',
]);
}
@@ -0,0 +1,198 @@
// @vitest-environment happy-dom
// SPDX-License-Identifier: AGPL-3.0-or-later
import {AppI18nProvider} from '@app/features/i18n/components/AppI18nProvider';
import {commitUnderTranslation, isTranslationDomCrash} from '@app/features/i18n/testing/TranslationCommitHarness';
import {
findTranslationUnsafeTextNodes,
TRANSLATION_MARKER,
TRANSLATOR_PIPELINE_NAMES,
TranslatorPipelines,
} from '@app/features/i18n/testing/TranslatorSimulation';
import {i18n} from '@lingui/core';
import {I18nProvider, Trans} from '@lingui/react';
import {createElement, type ReactNode} from 'react';
import {afterEach, beforeAll, describe, expect, it} from 'vitest';
const ENGLISH = {
simple: 'Monthly {price}',
rich: 'Renews on <0>{date}</0>. Enjoy!',
nested: 'Renews on <0>{date} at <1>noon</1></0>. Enjoy!',
};
const GERMAN = {
simple: 'Monatlich {price}',
rich: '<0>{date}</0> ist das Datum. Viel Spass!',
nested: 'Ende <0><1>mittags</1> am {date}</0>. Viel Spass!',
};
const visibleText = (html: string): string => html.replace(/<[^>]+>/g, '').replaceAll(TRANSLATION_MARKER, '');
const message = (id: keyof typeof ENGLISH): ReactNode =>
createElement(Trans, {
id,
values: {date: 'Jan 1', price: '$5'},
components: {0: createElement('strong'), 1: createElement('em')},
});
const provided = (child: ReactNode, safe: boolean): ReactNode =>
createElement(safe ? AppI18nProvider : I18nProvider, {i18n}, createElement('div', null, child));
const withBadge = (id: keyof typeof ENGLISH, on: boolean, safe: boolean): ReactNode =>
provided(
createElement('div', null, on ? createElement('b', null, '!') : null, message(id), createElement('i', null, 'x')),
safe,
);
beforeAll(() => {
i18n.load('en', ENGLISH);
i18n.load('de', GERMAN);
i18n.activate('en');
});
afterEach(() => {
i18n.activate('en');
document.body.replaceChildren();
});
describe('lingui <Trans> without a translation-safe defaultComponent', () => {
for (const pipelineName of TRANSLATOR_PIPELINE_NAMES) {
it(`throws the production DOM error on a simple message under ${pipelineName}`, () => {
const result = commitUnderTranslation({
before: withBadge('simple', false, false),
after: withBadge('simple', true, false),
pipeline: TranslatorPipelines[pipelineName],
});
expect(result.unsafeTextNodesBeforeTranslation).toBeGreaterThan(0);
expect(result.htmlBeforeTranslation).toContain('Monthly $5<i>x</i>');
expect(isTranslationDomCrash(result.error)).toBe(true);
});
it(`throws the production DOM error on a rich message under ${pipelineName}`, () => {
const result = commitUnderTranslation({
before: withBadge('rich', false, false),
after: withBadge('rich', true, false),
pipeline: TranslatorPipelines[pipelineName],
});
expect(result.unsafeTextNodesBeforeTranslation).toBeGreaterThan(0);
expect(isTranslationDomCrash(result.error)).toBe(true);
});
}
});
describe('lingui <Trans> under AppI18nProvider', () => {
for (const pipelineName of TRANSLATOR_PIPELINE_NAMES) {
if (pipelineName === 'chromeCompound') {
for (const id of ['simple', 'rich'] as const) {
it(`leaves the compound pipeline no text-and-element parent to rewrite in a ${id} message`, () => {
const unguarded = commitUnderTranslation({
before: withBadge(id, false, false),
after: withBadge(id, false, false),
pipeline: TranslatorPipelines.chromeCompound,
});
expect(unguarded.unsafeTextNodesBeforeTranslation).toBeGreaterThan(0);
expect(unguarded.htmlAfterTranslation).not.toBe(unguarded.htmlBeforeTranslation);
const guarded = commitUnderTranslation({
before: withBadge(id, false, true),
after: withBadge(id, true, true),
pipeline: TranslatorPipelines.chromeCompound,
});
expect(guarded.unsafeTextNodesBeforeTranslation).toBe(0);
expect(guarded.htmlAfterTranslation).toBe(guarded.htmlBeforeTranslation);
expect(guarded.error).toBeNull();
});
}
continue;
}
it(`renders a simple message safely under ${pipelineName}`, () => {
let unsafeTextNodes = -1;
const result = commitUnderTranslation({
before: withBadge('simple', false, true),
after: withBadge('simple', true, true),
pipeline: TranslatorPipelines[pipelineName],
inspect: (host) => {
unsafeTextNodes = findTranslationUnsafeTextNodes(host).length;
},
});
expect(result.htmlAfterTranslation).not.toBe(result.htmlBeforeTranslation);
expect(result.htmlAfterTranslation).toContain(TRANSLATION_MARKER);
expect(result.error).toBeNull();
expect(result.htmlBeforeTranslation).not.toContain('Monthly $5<i>x</i>');
expect(result.unsafeTextNodesBeforeTranslation).toBe(0);
expect(unsafeTextNodes).toBe(0);
expect(visibleText(result.htmlAfterCommit)).toBe('!Monthly $5x');
});
it(`renders a rich message safely under ${pipelineName}`, () => {
let unsafeTextNodes = -1;
const result = commitUnderTranslation({
before: withBadge('rich', false, true),
after: withBadge('rich', true, true),
pipeline: TranslatorPipelines[pipelineName],
inspect: (host) => {
unsafeTextNodes = findTranslationUnsafeTextNodes(host).length;
},
});
expect(result.htmlAfterTranslation).not.toBe(result.htmlBeforeTranslation);
expect(result.htmlAfterTranslation).toContain(TRANSLATION_MARKER);
expect(result.error).toBeNull();
expect(unsafeTextNodes).toBe(0);
expect(result.htmlAfterCommit).toContain('<strong>');
expect(visibleText(result.htmlAfterCommit)).toBe('!Renews on Jan 1. Enjoy!x');
});
}
});
describe('locale switch while the page is translated', () => {
for (const id of ['rich', 'nested'] as const) {
it(`reorders the ${id} message segments without throwing`, () => {
const result = commitUnderTranslation({
before: provided(message(id), true),
after: provided(message(id), true),
pipeline: TranslatorPipelines.chromeLegacyFont,
betweenCommits: () => {
i18n.activate('de');
},
});
expect(result.htmlAfterTranslation).not.toBe(result.htmlBeforeTranslation);
expect(result.htmlAfterTranslation).toContain(TRANSLATION_MARKER);
expect(result.error).toBeNull();
expect(visibleText(result.htmlAfterCommit)).toContain('Viel Spass!');
});
}
});
describe('translation-safe wrapping internals', () => {
it('recurses into nested rich message elements so no host element mixes text with element children', () => {
const result = commitUnderTranslation({
before: provided(message('nested'), true),
after: provided(message('nested'), true),
pipeline: TranslatorPipelines.chromeLegacyFont,
});
expect(result.unsafeTextNodesBeforeTranslation).toBe(0);
});
it('leaves nested rich message text unwrapped when it is not recursed into', () => {
const result = commitUnderTranslation({
before: provided(message('nested'), false),
after: provided(message('nested'), false),
pipeline: TranslatorPipelines.chromeLegacyFont,
});
expect(result.unsafeTextNodesBeforeTranslation).toBeGreaterThan(0);
});
it('remounts on a locale change so no stale translated segment survives', () => {
const result = commitUnderTranslation({
before: provided(message('rich'), true),
after: provided(message('rich'), true),
pipeline: TranslatorPipelines.chromeLegacyFont,
betweenCommits: () => {
i18n.activate('de');
},
});
expect(result.error).toBeNull();
expect(visibleText(result.htmlAfterCommit)).toContain('Viel Spass!');
expect(result.htmlAfterCommit.split(TRANSLATION_MARKER).length - 1).toBe(0);
});
});
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {TranslationSafeMessage} from '@app/features/i18n/components/TranslationSafeMessage';
import type {I18n} from '@lingui/core';
import {I18nProvider} from '@lingui/react';
import type {ReactNode} from 'react';
export function AppI18nProvider({i18n, children}: {i18n: I18n; children?: ReactNode}): ReactNode {
return (
<I18nProvider i18n={i18n} defaultComponent={TranslationSafeMessage}>
{children}
</I18nProvider>
);
}
@@ -0,0 +1,33 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {useLingui} from '@lingui/react';
import {cloneElement, Fragment, isValidElement, type ReactNode} from 'react';
function wrapTextSegments(node: ReactNode, key?: string): ReactNode {
if (typeof node === 'string' || typeof node === 'number') {
return (
<flx-i18n key={key} data-flx="i18n.translation-safe-message.wrap-text-segments.flx-i18n">
{node}
</flx-i18n>
);
}
if (Array.isArray(node)) {
return node.map((child, index) => wrapTextSegments(child as ReactNode, `flx-i18n-${index}`));
}
if (isValidElement<{children?: ReactNode}>(node)) {
if (typeof node.type !== 'string' && node.type !== Fragment) {
return node;
}
const {children} = node.props;
if (children == null) {
return node;
}
return cloneElement(node, undefined, wrapTextSegments(children));
}
return node;
}
export function TranslationSafeMessage({children}: {children?: ReactNode}): ReactNode {
const {i18n} = useLingui();
return <Fragment key={i18n.locale}>{wrapTextSegments(children)}</Fragment>;
}
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "إعدادات التطبيق"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "حالة التطبيق"
@@ -4580,7 +4580,7 @@ msgstr "بالخارج حاليًا"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "باستخدامك لـ {productName}، فإنك توافق على ال
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "تجاوز هيكل التحميل"
@@ -9539,7 +9539,7 @@ msgstr "إنشاء دور"
msgid "Create the administrator account"
msgstr "إنشاء حساب المسؤول"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "إنشاء محادثة جماعية مع المستلمين المتبقين ({addableCount}) وتخطي الآخرين؟"
@@ -11271,6 +11271,11 @@ msgstr "تعطيل الاختصار"
msgid "Disable sounds"
msgstr "تعطيل الأصوات"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "تعطيل حماية DOM للمترجم"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "تصدير السمات"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "عرض قسم المنطقة الزمنية المخصص للموظفين في إعدادات الملف الشخصي."
@@ -14182,7 +14187,7 @@ msgstr "الميزة معطلة مؤقتًا"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "الميزات"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "مفعل قسريًا"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "فرض فشل تحميل الرسائل"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "فرض فشل إرسال الرسائل"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "فرض تحميل منتقي صور GIF"
@@ -14641,7 +14646,7 @@ msgstr "إخفاء إجباري"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "فرض تحميل الهيكل العظمي"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "فرض عدم وجود إذن {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "فرض تحذير بيانات الملف الشخصي"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "فرض الهياكل العظمية للملف الشخصي"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "فرض الإظهار"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "فرض إظهار إخلاء مسؤولية عنوان URL المخصص"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "فرض إظهار حالة الاتصال الصوتي"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "تفعيل وضع التباطؤ الإجباري"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "فرض نوع رسالة غير معروف"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "فرض توفر تحديث"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "خطأ في الشبكة"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "الشبكة والأداء"
@@ -21565,7 +21570,7 @@ msgstr "لم يتم تقديم سبب."
msgid "No recent mentions"
msgstr "لا توجد إشارات حديثة"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "لا يوجد مستلمون متبقون لإنشاء محادثة جماعية معهم."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "لا توجد Webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "تقارير داخل التطبيق لا تعمل"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "وضع الاستضافة الذاتية"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "تجاوز وضع الاستضافة الذاتية"
@@ -29020,7 +29025,7 @@ msgstr "عرض مشاركة شاشتي"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "إظهار نفسي ككاتب"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "إظهار عناصر تحكم مستوى صوت المشاركين لكل جهاز في قوائم الصوت"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "عرض إعدادات المنطقة الزمنية للملف الشخصي (للموظفين فقط)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "تجاوز تحذير الرابط الخارجي لجميع النطاقات"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "تجاوز استدعاء الشبكة عند إرسال تقرير داخل التطبيق. يستمر التدفق إلى شاشة النجاح حتى تتمكن من ممارسة واجهة المستخدم، ولكن لا يتم إرسال أي شيء فعليًا إلى فريق السلامة."
@@ -29499,7 +29504,7 @@ msgstr "سلوفينيا"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "تحميل بطيء للمرفقات"
@@ -29516,28 +29521,28 @@ msgstr "تمهل — انتظر لحظة قبل المحاولة مرة أخرى
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "تعديل رسالة بطيء"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "تحميل الرسائل ببطء"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "إرسال الرسائل ببطء"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "تحميل بطيء للملف الشخصي"
@@ -30330,7 +30335,7 @@ msgstr "البدء من جديد"
msgid "Start recording"
msgstr "بدء التسجيل"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "ابدأ عمليات البحث بـ <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> لتضييق نطاق النتائج."
@@ -30591,6 +30596,11 @@ msgstr "إيقاف الرسائل وطلبات الصداقة."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "إيقاف Neko عن مطاردة مؤشر الفأرة مع الحفاظ على إمكانية سحبه والتفاعل معه."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "إيقاف تعديل Node.prototype insertBefore و removeChild. سيتعطل التطبيق مرة أخرى عندما يقوم مترجم صفحة بإعادة إدخال عقد نصية لا يزال React يحتفظ بها."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "حالة الكتابة"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "مكونات واجهة المستخدم"
@@ -1491,6 +1491,9 @@
{
"msgid": "Disable direct messages and friend requests"
},
{
"msgid": "Disable translation DOM guard"
},
{
"msgid": "Drag members between voice channels they can access, and disconnect them from voice."
},
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Настройки на приложението"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Състояние на приложението"
@@ -4580,7 +4580,7 @@ msgstr "В момента ме няма"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Използвайки {productName}, вие се съгласявате
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Заобикаляне на скелет за зареждане"
@@ -9539,7 +9539,7 @@ msgstr "Създаване на роля"
msgid "Create the administrator account"
msgstr "Създайте администраторския акаунт"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Да се създаде групов чат с останалите {addableCount} получател(и), а другите да се пропуснат?"
@@ -11271,6 +11271,11 @@ msgstr "Деактивиране на бърз клавиш"
msgid "Disable sounds"
msgstr "Изключване на звуците"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Деактивиране на защитата на DOM за превод"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Експортиране на теми"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Показване на секцията с часовите зони, достъпна само за служителите, в настройките на профила."
@@ -14182,7 +14187,7 @@ msgstr "Функцията е временно деактивирана"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Функции"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Принудително активирано"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Принудително неуспешно зареждане на съобщения"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Принудително неуспешно изпращане на съобщения"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Принудително зареждане на GIF инструмент за избор"
@@ -14641,7 +14646,7 @@ msgstr "Принудително скриване"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Принудително зареждане на скелет"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Принудително без разрешение за {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Принудително показване на предупреждение за данни от профила"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Принудително показване на скелети на профили"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Принудително показване"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Принудително показване на отказа от отговорност за персонализиран URL адрес"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Принудително показване на гласова връзка"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Принудително активиране на забавен режим"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Принудително неизвестен тип съобщение"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Принудително готова актуализация"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Мрежова грешка"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Мрежа и производителност"
@@ -21565,7 +21570,7 @@ msgstr "Не е посочена причина."
msgid "No recent mentions"
msgstr "Няма скорошни споменавания"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Няма останали получатели, с които да създадете групов чат."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Няма уебкуки"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Бездействие при доклади в приложението"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Самостоятелен режим"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Принудителен режим на самостоятелно хостване"
@@ -29020,7 +29025,7 @@ msgstr "Покажи моя екран"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Покажи ме като пишещ"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Показване на плъзгачи за силата на звука на участниците за всяко устройство в гласовите менюта"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Показване на настройките за часова зона в профила (само за администратори)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Пропускане на предупреждението за външни връзки за всички домейни"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Пропускане на мрежовото повикване при изпращане на доклад в приложението. Потокът все още преминава към екрана за успех, така че можете да упражните потребителския интерфейс, но нищо не се изпраща до екипа по безопасност."
@@ -29499,7 +29504,7 @@ msgstr "Словения"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Бавно качване на прикачен файл"
@@ -29516,28 +29521,28 @@ msgstr "По-бавно — изчакайте малко, преди да оп
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Бавно редактиране на съобщение"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Бавно зареждане на съобщения"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Бавно изпращане на съобщения"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Бавно зареждане на профил"
@@ -30330,7 +30335,7 @@ msgstr "Започване отначало"
msgid "Start recording"
msgstr "Записване"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Започнете търсенето с <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3>, за да стесните резултатите."
@@ -30591,6 +30596,11 @@ msgstr "Спиране на съобщенията и поканите за пр
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Спрете Неко да преследва курсора ви, като същевременно го запазите плъзгащ се и интерактивен."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Спри да пачваш Node.prototype insertBefore и removeChild. Приложението отново ще се срине, когато преводач на страници премести текстови възли, които React все още държи."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Пише съобщение"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Потребителски интерфейс"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Nastavení aplikace"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Stav aplikace"
@@ -4580,7 +4580,7 @@ msgstr "Momentálně pryč"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Používáním služby {productName} souhlasíte s aktualizovanými zás
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Přeskočit načítání skeletu"
@@ -9539,7 +9539,7 @@ msgstr "Vytvořit roli"
msgid "Create the administrator account"
msgstr "Vytvořte účet správce"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Vytvořit skupinovou zprávu se zbývajícím(i) {addableCount} příjemcem(i) a ostatní přeskočit?"
@@ -11271,6 +11271,11 @@ msgstr "Zakázat zkratku"
msgid "Disable sounds"
msgstr "Vypnout zvuky"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Zakázat ochranu DOM překladače"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Exportovat motivy"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Zobrazit sekci časových pásem určenou pouze pro zaměstnance v nastavení profilu."
@@ -14182,7 +14187,7 @@ msgstr "Funkce dočasně vypnuta"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funkce"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Vynuceně zapnuto"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Vynutit selhání načítání zpráv"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Vynutit selhání odesílání zpráv"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Vynutit načítání výběru GIFů"
@@ -14641,7 +14646,7 @@ msgstr "Vynutit skrytí"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Vynutit načtení kostry"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Vynutit oprávnění „{permissionName}\""
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Vynutit upozornění na data profilu"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Vynutit kostry profilu"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Vynutit zobrazení"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Vynutit zobrazení upozornění na vlastní URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Vždy zobrazit stav hlasového připojení"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Vynucený pomalý režim aktivní"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Vynutit neznámý typ zprávy"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Vynutit připravenost aktualizace"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Chyba sítě"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Síť a výkon"
@@ -21565,7 +21570,7 @@ msgstr "Důvod nebyl uveden."
msgid "No recent mentions"
msgstr "Žádné nedávné zmínky"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Nezůstali žádní příjemci, se kterými by bylo možné vytvořit skupinovou DM."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Žádné webhooky"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Zprávy v aplikaci bez operace"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Režim self-hostingu"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Přepsání režimu s vlastním hostováním"
@@ -29020,7 +29025,7 @@ msgstr "Zobrazit sdílení mé obrazovky"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Zobrazit, že píšu"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Zobrazit posuvníky hlasitosti účastníků pro každé zařízení v nabídkách hlasu"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Zobrazit nastavení časové zóny v profilu"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Přeskočit upozornění na externí odkaz pro všechny domény"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Přeskočit síťové volání při odeslání hlášení v aplikaci. Tok se stále posouvá na obrazovku úspěchu, takže můžete procvičit UI, ale nic se ve skutečnosti neodesílá bezpečnostnímu týmu."
@@ -29499,7 +29504,7 @@ msgstr "Slovinsko"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Pomalé nahrávání příloh"
@@ -29516,28 +29521,28 @@ msgstr "Zpomalte – zkuste to znovu za chvíli."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Pomalá úprava zprávy"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Pomalé načítání zpráv"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Pomalé odesílání zpráv"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Pomalé načítání profilu"
@@ -30330,7 +30335,7 @@ msgstr "Začít znovu"
msgid "Start recording"
msgstr "Spustit nahrávání"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Začněte vyhledáváním pomocí <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3>, abyste zúžili výsledky."
@@ -30591,6 +30596,11 @@ msgstr "Zastavit zprávy a žádosti o přátelství."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Zastavte Neko, aby nehonilo vaše kurzor, ale zároveň ho nechte přetahovat a interaktivní."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Přestat upravovat Node.prototype insertBefore a removeChild. Aplikace znovu spadne, když překladač stránek přemístí textové uzly, které React stále drží."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Stav psaní"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Komponenty UI"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Appindstillinger"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "App-tilstand"
@@ -4580,7 +4580,7 @@ msgstr "Ikke til stede lige nu"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Ved at bruge {productName} accepterer du de opdaterede politikker."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Spring over indlæsningsskelet"
@@ -9539,7 +9539,7 @@ msgstr "Opret rolle"
msgid "Create the administrator account"
msgstr "Opret administratorkontoen"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Opret gruppedialogen med de resterende {addableCount} modtagere og spring de andre over?"
@@ -11271,6 +11271,11 @@ msgstr "Deaktiver genvej"
msgid "Disable sounds"
msgstr "Slå lyde fra"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Deaktiver oversættelses-DOM-beskyttelse"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Eksporter temaer"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Vis tidszoneindstillingerne, som kun er tilgængelige for administratorer."
@@ -14182,7 +14187,7 @@ msgstr "Funktionen er midlertidigt deaktiveret"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funktioner"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Tvangsaktiveret"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Gennemtving mislykkede indlæsninger af beskeder"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Fremtving mislykkede beskeder"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Gennemtving indlæsning af GIF-vælger"
@@ -14641,7 +14646,7 @@ msgstr "Gennemtving skjul"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Tving indlæsning af skelet"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Gennemtving ingen {permissionName}-tilladelse"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Gennemtving advarsel om profildata"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Gennemtving profilskeletter"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Gennemtving visning"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Gennemtving visning af ansvarsfraskrivelse for tilpasset URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Gennemtving visning af stemmeforbindelse"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Tving slowmode aktiv"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Gennemtving ukendt meddelelsestype"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Tving opdatering klar"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Netværksfejl"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Netværk og ydeevne"
@@ -21565,7 +21570,7 @@ msgstr "Ingen årsag angivet."
msgid "No recent mentions"
msgstr "Ingen nylige omtaler"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Ingen tilbageværende modtagere at oprette en gruppe-DM med."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Ingen webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Deaktiver rapportering i appen"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Selvhostet tilstand"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Tilsidesæt selvhostet tilstand"
@@ -29020,7 +29025,7 @@ msgstr "Vis min skærmdeling"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Vis mig selv som skriver"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Vis lydstyrkeskyderen for deltagere pr. enhed i stemmemenuer"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Vis indstillinger for profilens tidszone"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Spring advarsel om eksternt link over for alle domæner"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Spring netværkskaldet over, når en rapport i appen indsendes. Flowet fortsætter stadig til succes-skærmen, så du kan afprøve brugerfladen, men intet sendes faktisk til sikkerhedsteamet."
@@ -29499,7 +29504,7 @@ msgstr "Slovenien"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Langsom vedhæftningsupload"
@@ -29516,28 +29521,28 @@ msgstr "Sæt farten ned – vent et øjeblik, før du prøver igen."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Langsom redigering af besked"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Langsom indlæsning af beskeder"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Langsom afsendelse af beskeder"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Langsom indlæsning af profil"
@@ -30330,7 +30335,7 @@ msgstr "Start forfra"
msgid "Start recording"
msgstr "Start optagelse"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Start søgninger med <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> for at indsnævre resultaterne."
@@ -30591,6 +30596,11 @@ msgstr "Stop beskeder og venneanmodninger."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Stop Neko fra at jage din markør, mens den forbliver trækbar og interaktiv."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Stop med at patche Node.prototype insertBefore og removeChild. Appen vil crashe igen, når en sideoversætter genforælder tekstnoder, som React stadig holder fast i."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Skrivestatus"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI-komponenter"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "App-Einstellungen"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "App-Status"
@@ -4580,7 +4580,7 @@ msgstr "Gerade abwesend"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Durch die Nutzung von {productName} stimmst du den aktualisierten Richtl
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Lade-Skelett umgehen"
@@ -9539,7 +9539,7 @@ msgstr "Rolle erstellen"
msgid "Create the administrator account"
msgstr "Administrator-Account erstellen"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Gruppen-DM mit den verbleibenden {addableCount} Empfänger(n) erstellen und die anderen überspringen?"
@@ -11271,6 +11271,11 @@ msgstr "Tastenkombination deaktivieren"
msgid "Disable sounds"
msgstr "Töne deaktivieren"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Übersetzungs-DOM-Schutz deaktivieren"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Designs exportieren"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Zeige den Abschnitt für Zeitzoneneinstellungen, der nur für Mitarbeiter sichtbar ist, in den Profiloptionen an."
@@ -14182,7 +14187,7 @@ msgstr "Funktion vorübergehend deaktiviert"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funktionen"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Erzwungen aktiviert"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Fehlerhaftes Laden von Nachrichten erzwingen"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Fehlgeschlagene Nachrichtenübermittlungen erzwingen"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "GIF-Auswahl zum Laden zwingen"
@@ -14641,7 +14646,7 @@ msgstr "Ausblenden erzwingen"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Lade-Skelett erzwingen"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Keine {permissionName}-Berechtigung erzwingen"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Profil-Datenwarnung erzwingen"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Profil-Skelette erzwingen"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Einblenden erzwingen"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Haftungsausschluss für Vanity-URL immer anzeigen erzwingen"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Sprachverbindung immer anzeigen erzwingen"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Slowmode erzwingen (aktiv)"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Unbekannten Nachrichtentyp erzwingen"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Update erzwingen (bereit)"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Netzwerkfehler"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Netzwerk und Leistung"
@@ -21565,7 +21570,7 @@ msgstr "Kein Grund angegeben."
msgid "No recent mentions"
msgstr "Keine Erwähnungen"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Keine verbleibenden Empfänger, um eine Gruppen-DM zu erstellen."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Keine Webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "In-App-Meldungen ohne Funktion"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Self-Hosted-Modus"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Self-hosted-Modus überschreiben"
@@ -29020,7 +29025,7 @@ msgstr "Eigene Bildschirmfreigabe anzeigen"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Mich als \"tippt …\" anzeigen"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Lautstärkeregler für einzelne Teilnehmer in Sprachmenüs anzeigen"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Einstellungen für die Zeitzone im Profil anzeigen (nur für Administratoren)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Warnung für externe Links für alle Domains überspringen"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Überspringt den Netzwerkaufruf, wenn ein In-App-Bericht gesendet wird. Der Ablauf geht trotzdem zum Erfolgsbildschirm über, damit die Benutzeroberfläche getestet werden kann, aber es wird nichts an das Sicherheitsteam gesendet."
@@ -29499,7 +29504,7 @@ msgstr "Slowenien"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Langsamer Anhang-Upload"
@@ -29516,28 +29521,28 @@ msgstr "Langsamer – warte einen Moment, bevor du es erneut versuchst."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Langsames Bearbeiten von Nachrichten"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Langsames Laden von Nachrichten"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Langsamer Nachrichtenversand"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Langsames Laden des Profils"
@@ -30330,7 +30335,7 @@ msgstr "Neu beginnen"
msgid "Start recording"
msgstr "Aufnahme starten"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Beginnen Sie Suchvorgänge mit <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3>, um die Ergebnisse einzugrenzen."
@@ -30591,6 +30596,11 @@ msgstr "Nachrichten und Freundschaftsanfragen stoppen."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Verhindere, dass Neko deinem Mauszeiger folgt, während er weiterhin ziehbar und interaktiv bleibt."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Stoppe das Patchen von Node.prototype insertBefore und removeChild. Die App wird wieder abstürzen, wenn ein Seitenübersetzer Textknoten neu einhängt, die React noch hält."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Tippstatus"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI-Komponenten"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Ρυθμίσεις εφαρμογής"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Κατάσταση εφαρμογής"
@@ -4580,7 +4580,7 @@ msgstr "Εκτός τώρα"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Χρησιμοποιώντας το {productName}, συμφωνείτε
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Παράκαμψη σκελετού φόρτωσης"
@@ -9539,7 +9539,7 @@ msgstr "Δημιουργία ρόλου"
msgid "Create the administrator account"
msgstr "Δημιουργήστε τον λογαριασμό διαχειριστή"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Να δημιουργηθεί η ομαδική συνομιλία με τους {addableCount} παραλήπτες που απομένουν και να παραλειφθούν οι υπόλοιποι;"
@@ -11271,6 +11271,11 @@ msgstr "Απενεργοποίηση συντόμευσης"
msgid "Disable sounds"
msgstr "Απενεργοποίηση ήχων"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Απενεργοποίηση προστασίας DOM μεταφραστή"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Εξαγωγή θεμάτων"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Εμφάνιση της ενότητας των ρυθμίσεων ζώνης ώρας που είναι διαθέσιμη μόνο για το προσωπικό."
@@ -14182,7 +14187,7 @@ msgstr "Η λειτουργία έχει απενεργοποιηθεί προσ
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Λειτουργίες"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Ενεργοποίηση με εξαναγκασμό"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Εξαναγκασμός αποτυχημένων φορτώσεων μηνυμάτων"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Εξαναγκασμός αποτυχημένων αποστολών μηνυμάτων"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Εξαναγκασμός φόρτωσης επιλογέα GIF"
@@ -14641,7 +14646,7 @@ msgstr "Αναγκαστική απόκρυψη"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Εξαναγκαστική φόρτωση σκελετού"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Εξαναγκασμός χωρίς άδεια {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Να εμφανίζεται πάντα η προειδοποίηση δεδομένων προφίλ"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Εξαναγκασμός σκελετών προφίλ"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Να εμφανίζεται πάντα"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Να εμφανίζεται πάντα η αποποίηση ευθύνης για προσαρμοσμένη διεύθυνση URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Να εμφανίζεται πάντα η κατάσταση σύνδεσης φωνής"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Ενεργοποίηση αργής λειτουργίας"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Εξαναγκασμός άγνωστου τύπου μηνύματος"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Εξαναγκασμός ετοιμότητας ενημέρωσης"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Σφάλμα δικτύου"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Δικτύωση και επιδόσεις"
@@ -21565,7 +21570,7 @@ msgstr "Δεν δόθηκε λόγος."
msgid "No recent mentions"
msgstr "Καμία πρόσφατη αναφορά"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Δεν υπάρχουν άλλοι παραλήπτες για να δημιουργήσετε ομαδική συνομιλία."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Δεν υπάρχουν webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Αναφορές εντός εφαρμογής χωρίς λειτουργία"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Λειτουργία αυτο-φιλοξενίας"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Παράκαμψη λειτουργίας αυτο-φιλοξενίας"
@@ -29020,7 +29025,7 @@ msgstr "Εμφάνιση της κοινής χρήσης οθόνης μου"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Εμφάνιση ότι πληκτρολογώ"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Εμφάνιση ρυθμιστικών έντασης ήχου συμμετεχόντων ανά συσκευή στα μενού φωνής"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Εμφάνιση ρυθμίσεων ζώνης ώρας προφίλ"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Παράλειψη προειδοποίησης εξωτερικού συνδέσμου για όλους τους τομείς"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Παράλειψη της κλήσης δικτύου κατά την υποβολή αναφοράς εντός εφαρμογής. Η ροή προχωρά στην οθόνη επιτυχίας, ώστε να μπορείτε να εξασκήσετε το UI, αλλά τίποτα δεν αποστέλλεται στην ομάδα ασφαλείας."
@@ -29499,7 +29504,7 @@ msgstr "Σλοβενία"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Αργή αποστολή συνημμένου"
@@ -29516,28 +29521,28 @@ msgstr "Σιγά — περίμενε λίγο πριν προσπαθήσεις
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Αργή επεξεργασία μηνύματος"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Αργή φόρτωση μηνυμάτων"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Αργή αποστολή μηνυμάτων"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Αργή φόρτωση προφίλ"
@@ -30330,7 +30335,7 @@ msgstr "Από την αρχή"
msgid "Start recording"
msgstr "Έναρξη εγγραφής"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Ξεκινήστε τις αναζητήσεις με <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> για να περιορίσετε τα αποτελέσματα."
@@ -30591,6 +30596,11 @@ msgstr "Διακοπή μηνυμάτων και αιτημάτων φιλίας
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Σταμάτα τη γάτα Νέκο να κυνηγάει τον κέρσορά σου, διατηρώντας τον σύρσιμο και την αλληλεπίδραση."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Διακοπή τροποποίησης των Node.prototype insertBefore και removeChild. Η εφαρμογή θα καταρρεύσει ξανά όταν ένας μεταφραστής σελίδας επανατοποθετήσει κόμβους κειμένου που το React εξακολουθεί να κατέχει."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Κατάσταση πληκτρολόγησης"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Στοιχεία διεπαφής χρήστη"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "App settings"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "App state"
@@ -4580,7 +4580,7 @@ msgstr "Away right now"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "By using {productName}, you agree to the updated policies."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Bypass loading skeleton"
@@ -9539,7 +9539,7 @@ msgstr "Create role"
msgid "Create the administrator account"
msgstr "Create the administrator account"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
@@ -11271,6 +11271,12 @@ msgstr "Disable shortcut"
msgid "Disable sounds"
msgstr "Disable sounds"
# auto-i18n: reviewed unchanged
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Disable translation DOM guard"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13686,7 @@ msgid "Export themes"
msgstr "Export themes"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Expose the staff-only timezone section in profile settings."
@@ -14182,7 +14188,7 @@ msgstr "Feature temporarily disabled"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Features"
@@ -14619,17 +14625,17 @@ msgid "Force enabled"
msgstr "Force enabled"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Force failed message loads"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Force failed message sends"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Force GIF picker loading"
@@ -14641,7 +14647,7 @@ msgstr "Force hide"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Force loading skeleton"
@@ -14661,12 +14667,12 @@ msgid "Force no {permissionName} permission"
msgstr "Force no {permissionName} permission"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Force profile data warning"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Force profile skeletons"
@@ -14676,12 +14682,12 @@ msgid "Force show"
msgstr "Force show"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Force show vanity URL disclaimer"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Force show voice connection"
@@ -14690,12 +14696,12 @@ msgid "Force slowmode active"
msgstr "Force slowmode active"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Force unknown message type"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Force update ready"
@@ -20952,7 +20958,7 @@ msgid "Network error"
msgstr "Network error"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Networking and performance"
@@ -21565,7 +21571,7 @@ msgstr "No reason was provided."
msgid "No recent mentions"
msgstr "No recent mentions"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "No remaining recipients to create a group DM with."
@@ -21754,7 +21760,7 @@ msgid "No webhooks"
msgstr "No webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "No-op in-app reports"
@@ -27876,7 +27882,7 @@ msgid "Self-hosted mode"
msgstr "Self-hosted mode"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Self-hosted mode override"
@@ -29020,7 +29026,7 @@ msgstr "Show my screen share"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Show myself typing"
@@ -29074,7 +29080,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Show per-device participant volume sliders in voice menus"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Show profile timezone settings"
@@ -29441,7 +29447,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Skip the external link warning for all domains"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
@@ -29499,7 +29505,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Slow attachment upload"
@@ -29516,28 +29522,28 @@ msgstr "Slow down – wait a moment before trying again."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Slow message edit"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Slow message load"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Slow message send"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Slow profile load"
@@ -30330,7 +30336,7 @@ msgstr "Start again"
msgid "Start recording"
msgstr "Start recording"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
@@ -30591,6 +30597,11 @@ msgstr "Stop messages and friend requests."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Stop Neko from chasing your cursor while keeping it draggable and interactive."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator reparents text nodes React still holds."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33644,7 @@ msgid "Typing state"
msgstr "Typing status"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI components"
@@ -3655,7 +3655,7 @@ msgid "App settings"
msgstr "App settings"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "App state"
@@ -4581,7 +4581,7 @@ msgstr "Away right now"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5465,7 +5465,7 @@ msgstr "By using {productName}, you agree to the updated policies."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Bypass loading skeleton"
@@ -9540,7 +9540,7 @@ msgstr "Create role"
msgid "Create the administrator account"
msgstr "Create the administrator account"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
@@ -11272,6 +11272,11 @@ msgstr "Disable shortcut"
msgid "Disable sounds"
msgstr "Disable sounds"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Disable translation DOM guard"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13681,7 +13686,7 @@ msgid "Export themes"
msgstr "Export themes"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Expose the staff-only timezone section in profile settings."
@@ -14183,7 +14188,7 @@ msgstr "Feature temporarily disabled"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Features"
@@ -14620,17 +14625,17 @@ msgid "Force enabled"
msgstr "Force enabled"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Force failed message loads"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Force failed message sends"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Force GIF picker loading"
@@ -14642,7 +14647,7 @@ msgstr "Force hide"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Force loading skeleton"
@@ -14662,12 +14667,12 @@ msgid "Force no {permissionName} permission"
msgstr "Force no {permissionName} permission"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Force profile data warning"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Force profile skeletons"
@@ -14677,12 +14682,12 @@ msgid "Force show"
msgstr "Force show"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Force show vanity URL disclaimer"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Force show voice connection"
@@ -14691,12 +14696,12 @@ msgid "Force slowmode active"
msgstr "Force slowmode active"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Force unknown message type"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Force update ready"
@@ -20953,7 +20958,7 @@ msgid "Network error"
msgstr "Network error"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Networking and performance"
@@ -21566,7 +21571,7 @@ msgstr "No reason was provided."
msgid "No recent mentions"
msgstr "No recent mentions"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "No remaining recipients to create a group DM with."
@@ -21755,7 +21760,7 @@ msgid "No webhooks"
msgstr "No webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "No-op in-app reports"
@@ -27877,7 +27882,7 @@ msgid "Self-hosted mode"
msgstr "Self-hosted mode"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Self-hosted mode override"
@@ -29021,7 +29026,7 @@ msgstr "Show my screen share"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Show myself typing"
@@ -29075,7 +29080,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Show per-device participant volume sliders in voice menus"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Show profile timezone settings"
@@ -29442,7 +29447,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Skip the external link warning for all domains"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
@@ -29500,7 +29505,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Slow attachment upload"
@@ -29517,28 +29522,28 @@ msgstr "Slow down — wait a moment before trying again."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Slow message edit"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Slow message load"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Slow message send"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Slow profile load"
@@ -30331,7 +30336,7 @@ msgstr "Start over"
msgid "Start recording"
msgstr "Start recording"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
@@ -30592,6 +30597,11 @@ msgstr "Stop messages and friend requests."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Stop Neko from chasing your cursor while keeping it draggable and interactive."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33634,7 +33644,7 @@ msgid "Typing state"
msgstr "Typing state"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI components"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Configuración de la aplicación"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Estado de la aplicación"
@@ -4580,7 +4580,7 @@ msgstr "Ausente en este momento"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Al usar {productName}, aceptas las políticas actualizadas."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Omitir esqueleto de carga"
@@ -9539,7 +9539,7 @@ msgstr "Crear rol"
msgid "Create the administrator account"
msgstr "Crear la cuenta de administrador"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "¿Crear el grupo de MD con los {addableCount} destinatarios restantes y omitir a los demás?"
@@ -11271,6 +11271,11 @@ msgstr "Desactivar atajo"
msgid "Disable sounds"
msgstr "Desactivar sonidos"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Desactivar protección contra fallos del DOM del traductor"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Exportar temas"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Mostrar la sección de zona horaria reservada para el personal en la configuración del perfil."
@@ -14182,7 +14187,7 @@ msgstr "Función deshabilitada temporalmente"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funciones"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Activado forzosamente"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Forzar cargas de mensajes fallidas"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Forzar el envío de mensajes fallidos"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Forzar carga del selector de GIF"
@@ -14641,7 +14646,7 @@ msgstr "Forzar ocultar"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Forzar carga de esqueleto"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Forzar sin el permiso {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Forzar advertencia de datos de perfil"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Forzar esqueletos de perfil"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Forzar mostrar"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Forzar la visualización del aviso de URL personalizada"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Forzar la visualización de la conexión de voz"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Forzar modo lento activo"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Forzar tipo de mensaje desconocido"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Forzar actualización lista"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Error de red"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Red y rendimiento"
@@ -21565,7 +21570,7 @@ msgstr "No se proporcionó ningún motivo."
msgid "No recent mentions"
msgstr "No hay menciones recientes"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "No quedan destinatarios para crear un grupo de MD."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "No hay webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Informes en la aplicación sin operación"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Modo autohospedado"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Anulación del modo autohospedado"
@@ -29020,7 +29025,7 @@ msgstr "Mostrar mi pantalla compartida"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Mostrarme escribiendo"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Mostrar controles deslizantes de volumen por participante en los menús de voz"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Mostrar la configuración de zona horaria del perfil"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Omitir la advertencia de enlace externo para todos los dominios"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Omite la llamada de red cuando se envía un informe en la aplicación. El flujo avanza a la pantalla de éxito para que puedas probar la interfaz de usuario, pero en realidad no se envía nada al equipo de seguridad."
@@ -29499,7 +29504,7 @@ msgstr "Eslovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Carga lenta de archivos adjuntos"
@@ -29516,28 +29521,28 @@ msgstr "Ve más despacio, espera un momento antes de volver a intentarlo."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Edición lenta de mensajes"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Carga lenta de mensajes"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Envío lento de mensajes"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Carga lenta de perfil"
@@ -30330,7 +30335,7 @@ msgstr "Volver a empezar"
msgid "Start recording"
msgstr "Iniciar grabación"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Comienza las búsquedas con <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> para reducir los resultados."
@@ -30591,6 +30596,11 @@ msgstr "Detener mensajes y solicitudes de amistad."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Evita que Neko persiga tu cursor, pero mantenlo arrastrable e interactivo."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Dejar de parchear Node.prototype insertBefore y removeChild. La app volverá a fallar cuando un traductor de páginas reasigne nodos de texto que React aún mantiene."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Estado de escritura"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Componentes de la interfaz de usuario"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Configuración de la aplicación"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Estado de la aplicación"
@@ -4580,7 +4580,7 @@ msgstr "Ausente ahora mismo"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Al usar {productName}, aceptas las políticas actualizadas."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Omitir esqueleto de carga"
@@ -9539,7 +9539,7 @@ msgstr "Crear rol"
msgid "Create the administrator account"
msgstr "Crear la cuenta de administrador"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "¿Crear el grupo de MD con los {addableCount} destinatarios restantes y omitir a los demás?"
@@ -11271,6 +11271,11 @@ msgstr "Desactivar atajo"
msgid "Disable sounds"
msgstr "Desactivar sonidos"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Desactivar protección contra fallos del DOM del traductor"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Exportar temas"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Mostrar la sección de zona horaria reservada para el personal en la configuración del perfil."
@@ -14182,7 +14187,7 @@ msgstr "Función temporalmente desactivada"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funciones"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Forzado a activarse"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Forzar error al cargar mensajes"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Forzar el envío de mensajes fallidos"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Forzar la carga del selector de GIF"
@@ -14641,7 +14646,7 @@ msgstr "Forzar ocultación"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Forzar carga de esqueleto"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Forzar la ausencia del permiso {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Forzar advertencia de datos de perfil"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Forzar esqueletos de perfil"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Forzar mostrar"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Forzar la visualización del aviso de URL personalizada"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Forzar la visualización de la conexión de voz"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Forzar modo lento activo"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Forzar tipo de mensaje desconocido"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Forzar actualización lista"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Error de red"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Red y rendimiento"
@@ -21565,7 +21570,7 @@ msgstr "No se proporcionó ningún motivo."
msgid "No recent mentions"
msgstr "No hay menciones recientes"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "No quedan destinatarios para crear un grupo de MD."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Ningún webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Informes en la aplicación sin operación"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Modo autoalojado"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Anular modo autohospedado"
@@ -29020,7 +29025,7 @@ msgstr "Mostrar mi pantalla compartida"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Mostrarme escribiendo"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Mostrar controles deslizantes de volumen por participante y dispositivo en los menús de voz"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Mostrar la configuración de zona horaria del perfil"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Omitir la advertencia de enlace externo para todos los dominios"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Omite la llamada de red cuando se envía un informe en la aplicación. El flujo avanza a la pantalla de éxito para que puedas probar la interfaz de usuario, pero no se envía nada al equipo de seguridad."
@@ -29499,7 +29504,7 @@ msgstr "Eslovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Subida lenta de archivos adjuntos"
@@ -29516,28 +29521,28 @@ msgstr "Ve más despacio: espera un momento antes de volver a intentarlo."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Edición lenta de mensajes"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Carga lenta de mensajes"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Envío lento de mensajes"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Carga lenta del perfil"
@@ -30330,7 +30335,7 @@ msgstr "Empezar de nuevo"
msgid "Start recording"
msgstr "Iniciar grabación"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Comienza las búsquedas con <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> para reducir los resultados."
@@ -30591,6 +30596,11 @@ msgstr "Detener mensajes y solicitudes de amistad."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Evita que Neko persiga tu cursor, pero mantenlo arrastrable e interactivo."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Dejar de parchear Node.prototype insertBefore y removeChild. La aplicación volverá a fallar cuando un traductor de páginas reasigne nodos de texto que React todavía mantiene."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Estado de escritura"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Componentes de la interfaz de usuario"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Sovelluksen asetukset"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Sovelluksen tila"
@@ -4580,7 +4580,7 @@ msgstr "Poissa juuri nyt"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Käyttämällä palvelua {productName} hyväksyt päivitetyt käytännö
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Ohita latausluuranko"
@@ -9539,7 +9539,7 @@ msgstr "Luo rooli"
msgid "Create the administrator account"
msgstr "Luo pääkäyttäjätili"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Luodaanko ryhmäkeskustelu jäljelle jääneiden {addableCount} vastaanottajan kanssa ja ohitetaan muut?"
@@ -11271,6 +11271,11 @@ msgstr "Poista pikanäppäin käytöstä"
msgid "Disable sounds"
msgstr "Poista äänet käytöstä"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Poista käännöksen DOM-suojaus käytöstä"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Vie teemat"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Näytä henkilökunnalle tarkoitettu aikavyöhykeosio profiiliasetuksissa."
@@ -14182,7 +14187,7 @@ msgstr "Ominaisuus poissa käytöstä"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Ominaisuudet"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Pakotettu käyttöön"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Pakota viestien lataus epäonnistumaan"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Pakota viestien lähetyksen epäonnistuminen"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Pakota GIF-valitsimen lataus"
@@ -14641,7 +14646,7 @@ msgstr "Pakota piilottaminen"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Pakota luurangon lataus"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Pakota ei {permissionName}-oikeutta"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Pakota profiilitietovaroitus"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Pakota profiilirungot"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Pakota näyttämään"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Näytä aina vanity-URL-vastuuvapauslauseke"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Näytä puheyhteys pakotetusti"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Pakota hidastettu tila käyttöön"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Pakota tuntematon viestityyppi"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Pakota päivitys valmiiksi"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Verkkovirhe"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Verkko ja suorituskyky"
@@ -21565,7 +21570,7 @@ msgstr "Syytä ei annettu."
msgid "No recent mentions"
msgstr "Ei viimeaikaisia mainintoja"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Ei jäljellä olevia vastaanottajia ryhmäkeskustelun luomiseen."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Ei webhookeja"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Ei-toimivat sovelluksen sisäiset ilmoitukset"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Itsehostattu tila"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Itseisännöidyn tilan ohitus"
@@ -29020,7 +29025,7 @@ msgstr "Näytä oma näyttöni"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Näytä itseni kirjoittamassa"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Näytä laitekohtaiset osallistujien äänenvoimakkuuden liukusäätimet äänivalikoissa"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Näytä profiilin aikavyöhykeasetukset (vain henkilökunnalle)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Ohita ulkoisen linkin varoitus kaikille verkkotunnuksille"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Ohita verkkokutsu, kun sovelluksen sisäinen ilmoitus lähetetään. Työnkulku etenee silti onnistumisnäyttöön, jotta voit harjoitella käyttöliittymää, mutta mitään ei todellisuudessa lähetetä turvallisuustiimille."
@@ -29499,7 +29504,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Hidas liitteen lähetys"
@@ -29516,28 +29521,28 @@ msgstr "Hidasta – odota hetki ennen kuin yrität uudelleen."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Hidas viestin muokkaus"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Hidas viestien lataus"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Hidas viestin lähetys"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Hidas profiilin lataus"
@@ -30330,7 +30335,7 @@ msgstr "Aloita alusta"
msgid "Start recording"
msgstr "Aloita nauhoitus"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Aloita haut käyttämällä <0>{peoplePrefix}</0>, <1>{textChannelPrefix}</1>, <2>{voiceChannelPrefix}</2> ja <3>{communityPrefix}</3>, jotta voit rajata hakutuloksia."
@@ -30591,6 +30596,11 @@ msgstr "Estä viestit ja kaveripyynnöt."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Estä Nekoa jahtaamasta osoitintasi, mutta pidä se silti vedettävänä ja interaktiivisena."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Lopeta Node.prototype insertBefore- ja removeChild-metodien paikkaaminen. Sovellus kaatuu uudelleen, kun sivun kääntäjä siirtää Reactin edelleen pitämiä tekstisolmuja."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Kirjoitustila"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Käyttöliittymäkomponentit"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Paramètres de l’application"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "État de l'app"
@@ -4580,7 +4580,7 @@ msgstr "Absent(e) pour le moment"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "En utilisant {productName}, vous acceptez les politiques mises à jour."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Ignorer le squelette de chargement"
@@ -9539,7 +9539,7 @@ msgstr "Créer un rôle"
msgid "Create the administrator account"
msgstr "Créer le compte administrateur"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Créer le groupe de discussion avec les {addableCount} destinataire(s) restant(s) et ignorer les autres ?"
@@ -11271,6 +11271,11 @@ msgstr "Désactiver le raccourci"
msgid "Disable sounds"
msgstr "Désactiver les sons"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Désactiver la protection DOM du traducteur"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Exporter les thèmes"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Afficher la section des paramètres de fuseau horaire réservés aux membres du personnel."
@@ -14182,7 +14187,7 @@ msgstr "Fonctionnalité temporairement désactivée"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Fonctionnalités"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Activé de force"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Forcer l'échec du chargement des messages"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Forcer l'échec de l'envoi des messages"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Forcer le chargement du sélecteur de GIF"
@@ -14641,7 +14646,7 @@ msgstr "Forcer le masquage"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Forcer le chargement du squelette"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Forcer l'absence d'autorisation {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Forcer l'avertissement sur les données de profil"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Forcer les squelettes de profil"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Forcer l'affichage"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Forcer l'affichage de l'avertissement sur l'URL personnalisée"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Forcer l'affichage de la connexion vocale"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Forcer le mode lent"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Forcer le type de message inconnu"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Forcer la mise à jour prête"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Erreur réseau"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Réseau et performances"
@@ -21565,7 +21570,7 @@ msgstr "Aucune raison n'a été fournie."
msgid "No recent mentions"
msgstr "Aucune mention récente"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Il ne reste plus de destinataires pour créer un groupe de discussion."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Aucun webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Rapports intégrés sans opération"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Mode auto-hébergé"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Forcer le mode auto-hébergé"
@@ -29020,7 +29025,7 @@ msgstr "Afficher mon partage d'écran"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "M'afficher en train d'écrire"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Afficher les curseurs de volume des participants par appareil dans les menus vocaux"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Afficher les paramètres de fuseau horaire du profil"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Ignorer l'avertissement de lien externe pour tous les domaines"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Ignore l'appel réseau lorsqu'un signalement est envoyé depuis l'application. Le flux avance toujours vers l'écran de succès pour que vous puissiez tester l'interface utilisateur, mais rien n'est réellement envoyé à l'équipe de sécurité."
@@ -29499,7 +29504,7 @@ msgstr "Slovénie"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Chargement lent des pièces jointes"
@@ -29516,28 +29521,28 @@ msgstr "Du calme, attendez un instant avant de réessayer."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Modification lente des messages"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Chargement lent des messages"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Envoi lent des messages"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Chargement lent du profil"
@@ -30330,7 +30335,7 @@ msgstr "Recommencer"
msgid "Start recording"
msgstr "Démarrer l’enregistrement"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Commencez vos recherches avec <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> pour affiner les résultats."
@@ -30591,6 +30596,11 @@ msgstr "Arrêter les messages et les demandes d'amis."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Empêchez Neko de suivre votre curseur tout en le gardant déplaçable et interactif."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Arrêter de patcher Node.prototype insertBefore et removeChild. L’application plantera à nouveau lorsqu’un traducteur de page déplacera des nœuds de texte que React détient toujours."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "État de saisie"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Composants de l'interface utilisateur"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "הגדרות אפליקציה"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "מצב האפליקציה"
@@ -4580,7 +4580,7 @@ msgstr "מחוץ למשרד כרגע"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "בשימוש ב- {productName}, אתה מסכים למדיניות המ
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "עקיפת שלד טעינה"
@@ -9539,7 +9539,7 @@ msgstr "יצירת תפקיד"
msgid "Create the administrator account"
msgstr "צור את חשבון המנהל"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "ליצור את הצ'אט הקבוצתי עם {addableCount} הנמענים הנותרים ולדלג על האחרים?"
@@ -11271,6 +11271,11 @@ msgstr "השבת קיצור דרך"
msgid "Disable sounds"
msgstr "השבתת צלילים"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "בטל הגנת DOM של מתרגם הדפים"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "ייצוא ערכות נושא"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "הצג את סעיף אזור הזמן המיועד רק למנהלים בהגדרות הפרופיל."
@@ -14182,7 +14187,7 @@ msgstr "התכונה מושבתת זמנית"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "תכונות"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "מופעל בכפייה"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "כפה טעינת הודעות שנכשלה"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "כפה שליחת הודעות שנכשלה"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "כפה טעינת בורר GIF"
@@ -14641,7 +14646,7 @@ msgstr "הסתר בכוח"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "טעינת שלד בכוח"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "אל תאכוף הרשאת {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "הצג תמיד אזהרת נתוני פרופיל"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "הצג שלדי פרופיל בכפייה"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "הצגה בכפייה"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "הצג תמיד את אזהרת כתובת ה-URL המותאמת אישית"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "הצג תמיד את מצב החיבור הקולי"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "הפעלת מצב איטי בכפייה"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "הצג סוג הודעה לא ידוע"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "כפה עדכון זמין"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "שגיאת רשת"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "רשת וביצועים"
@@ -21565,7 +21570,7 @@ msgstr "לא ניתנה סיבה."
msgid "No recent mentions"
msgstr "אין אזכורים אחרונים"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "אין נמענים שנותרו כדי ליצור איתם קבוצת צ'אט."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "אין Webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "דיווחים פנימיים לא פעילים"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "מצב באירוח עצמי"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "עקיפת מצב אירוח עצמי"
@@ -29020,7 +29025,7 @@ msgstr "הצג את שיתוף המסך שלי"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "הצג אותי כמקליד/ה"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "הצג פקדי עוצמת קול למשתתפים לפי מכשיר בתפריטי קול"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "הצג הגדרות אזור זמן בפרופיל (אפשרות למפתחים, מיועדת לצוות בלבד)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "דלג על אזהרת הקישור החיצוני עבור כל הדומיינים"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "דלג על קריאת הרשת בעת שליחת דיווח מתוך האפליקציה. התהליך עדיין יתקדם למסך ההצלחה כדי שתוכלו לבדוק את ממשק המשתמש, אך שום דבר לא יישלח בפועל לצוות הבטיחות."
@@ -29499,7 +29504,7 @@ msgstr "סלובניה"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "העלאת קבצים איטית"
@@ -29516,28 +29521,28 @@ msgstr "האט קצת — המתן רגע לפני שתנסה שוב."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "עריכת הודעה איטית"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "טעינת הודעות איטית"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "שליחת הודעות איטית"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "טעינת פרופיל איטית"
@@ -30330,7 +30335,7 @@ msgstr "התחל מחדש"
msgid "Start recording"
msgstr "התחל להקליט"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "התחל חיפושים עם <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> כדי לצמצם את התוצאות."
@@ -30591,6 +30596,11 @@ msgstr "הפסקת הודעות ובקשות חברות."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "מנע מ\"נֶקוֹ\" לרדוף אחרי הסמן שלך, תוך שמירה על יכולת הגרירה והאינטראקטיביות שלו."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "הפסק לתקן את Node.prototype insertBefore ו-removeChild. האפליקציה תקרוס שוב כאשר מתרגם דפים ימקם מחדש צמתי טקסט ש-React עדיין מחזיק."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "סטטוס הקלדה"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "רכיבי ממשק משתמש"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "ऐप सेटिंग्स"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "ऐप की स्थिति"
@@ -4580,7 +4580,7 @@ msgstr "अभी दूर हैं"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "{productName} का उपयोग करके, आप अपडे
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "लोडिंग स्केलेटन को बायपास करें"
@@ -9539,7 +9539,7 @@ msgstr "भूमिका बनाएँ"
msgid "Create the administrator account"
msgstr "व्यवस्थापक खाता बनाएँ"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "बाकी बचे {addableCount} सदस्य के साथ ग्रुप DM बनाएँ और दूसरों को छोड़ दें?"
@@ -11271,6 +11271,11 @@ msgstr "शॉर्टकट बंद करें"
msgid "Disable sounds"
msgstr "ध्वनि बंद करें"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "ट्रांसलेशन DOM गार्ड अक्षम करें"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "थीम एक्सपोर्ट करें"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "प्रोफ़ाइल सेटिंग्स में केवल कर्मचारियों के लिए समय क्षेत्र अनुभाग दिखाएँ।"
@@ -14182,7 +14187,7 @@ msgstr "सुविधा अस्थायी रूप से बंद ह
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "सुविधाएँ"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "ज़बरदस्ती चालू किया गया"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "मैसेज लोड होने में ज़बरदस्ती गड़बड़ी करें"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "मैसेज भेजने में विफलता को फ़ोर्स करें"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "GIF पिकर लोडिंग को फ़ोर्स करें"
@@ -14641,7 +14646,7 @@ msgstr "ज़बरदस्ती छिपाएं"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "फोर्स लोडिंग स्केलेटन"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "{permissionName} अनुमति नहीं है लागू करें"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "प्रोफ़ाइल डेटा चेतावनी को ज़बरदस्ती दिखाएँ"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "प्रोफ़ाइल स्केलेटन को फ़ोर्स करें"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "ज़बरदस्ती दिखाएँ"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "वैनिटी यूआरएल अस्वीकरण दिखाने के लिए बाध्य करें"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "वॉइस कनेक्शन को हमेशा दिखाएँ"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "स्लोमोड सक्रिय करें"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "मैसेज के प्रकार को अज्ञात करने के लिए फ़ोर्स करें"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "अपडेट तैयार करने के लिए बाध्य करें"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "नेटवर्क त्रुटि"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "नेटवर्किंग और परफ़ॉर्मेंस"
@@ -21565,7 +21570,7 @@ msgstr "कोई वजह नहीं बताई गई।"
msgid "No recent mentions"
msgstr "कोई हालिया ज़िक्र नहीं"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "ग्रुप DM बनाने के लिए कोई और प्राप्तकर्ता नहीं बचा है।"
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "कोई वेबहुक नहीं"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "इन-ऐप रिपोर्ट को नो-ऑप करें"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "सेल्फ़-होस्टेड मोड"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "सेल्फ़-होस्टेड मोड ओवरराइड"
@@ -29020,7 +29025,7 @@ msgstr "मेरी स्क्रीन शेयर दिखाएं"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "खुद को टाइप करते हुए दिखाएं"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "वॉयस मेन्यू में प्रति-डिवाइस पार्टिसिपेंट वॉल्यूम स्लाइडर दिखाएं"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "प्रोफ़ाइल सेटिंग्स में केवल-कर्मचारी प्रोफ़ाइल टाइमज़ोन अनुभाग को प्रदर्शित करें"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "सभी डोमेन के लिए बाहरी लिंक चेतावनी को छोड़ें"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "जब कोई इन-ऐप रिपोर्ट सबमिट की जाती है, तो नेटवर्क कॉल को छोड़ दें। फ़्लो अभी भी सफलता स्क्रीन पर आगे बढ़ता है ताकि आप UI का अभ्यास कर सकें, लेकिन सुरक्षा टीम को वास्तव में कुछ भी नहीं भेजा जाता है।"
@@ -29499,7 +29504,7 @@ msgstr "स्लोवेनिया"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "अटैचमेंट अपलोड धीमा करें"
@@ -29516,28 +29521,28 @@ msgstr "धीमे चलें — दोबारा कोशिश कर
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "मैसेज एडिट धीमा करें"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "मैसेज धीरे लोड करें"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "मैसेज धीरे भेजें"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "प्रोफ़ाइल धीमी गति से लोड करें"
@@ -30330,7 +30335,7 @@ msgstr "फिर से शुरू करें"
msgid "Start recording"
msgstr "रिकॉर्डिंग शुरू करें"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "खोजों को <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> से शुरू करें ताकि परिणामों को सीमित किया जा सके।"
@@ -30591,6 +30596,11 @@ msgstr "मैसेज और फ्रेंड रिक्वेस्ट
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "अपने कर्सर का पीछा करने से नेको को रोकें, जबकि उसे ड्रैग करने योग्य और इंटरैक्टिव बनाए रखें।"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Node.prototype insertBefore और removeChild को पैच करना बंद करें। जब कोई पेज ट्रांसलेटर उन टेक्स्ट नोड्स को फिर से पैरेंट करेगा जिन्हें React अभी भी होल्ड करता है, तो ऐप फिर से क्रैश हो जाएगा।"
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "टाइपिंग स्थिति"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "यूआई कॉम्पोनेंट"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Postavke aplikacije"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Stanje aplikacije"
@@ -4580,7 +4580,7 @@ msgstr "Trenutno odsutan"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Korištenjem aplikacije {productName} prihvaćate ažurirana pravila."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Zaobiđi učitavanje kostura"
@@ -9539,7 +9539,7 @@ msgstr "Stvori ulogu"
msgid "Create the administrator account"
msgstr "Stvori administratorski račun"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Želite li stvoriti grupnu izravnu poruku s preostalih {addableCount} primatelja, a ostale preskočiti?"
@@ -11271,6 +11271,11 @@ msgstr "Onemogući prečac"
msgid "Disable sounds"
msgstr "Isključi zvukove"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Onemogući zaštitu DOM-a za prijevod"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Izvezi teme"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Prikaži odjeljak s vremenskom zonom rezerviran za osoblje u postavkama profila."
@@ -14182,7 +14187,7 @@ msgstr "Značajka je privremeno onemogućena"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Značajke"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Prisilno omogućeno"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Prisilno učitavanje neuspjelih poruka"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Prisili neuspješno slanje poruka"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Prisilno učitavanje GIF birača"
@@ -14641,7 +14646,7 @@ msgstr "Prisilno sakrij"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Prisilno učitavanje skela"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Prisilno bez dopuštenja {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Uvijek prikaži upozorenje o podacima profila"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Prisilno učitavanje okvira profila"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Prisilno prikaži"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Prisilno prikaži odricanje odgovornosti za prilagođeni URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Uvijek prikaži status glasovne veze"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Prisilno aktiviraj spori način rada"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Prisilno postavi nepoznatu vrstu poruke"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Prisilno ažuriranje spremno"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Mrežna pogreška"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Mreža i performanse"
@@ -21565,7 +21570,7 @@ msgstr "Razlog nije naveden."
msgid "No recent mentions"
msgstr "Nema nedavnih spominjanja"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Nema preostalih primatelja za stvaranje grupne izravne poruke."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Nema web-dojavnika"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Izvješća u aplikaciji bez operacije"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Samostalni način rada"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Nadjačavanje načina samostalnog hostinga"
@@ -29020,7 +29025,7 @@ msgstr "Prikaži moj prikaz zaslona"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Prikaži da tipkam"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Prikaži klizače glasnoće sudionika za svaki uređaj u izbornicima za glasnoću"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Prikaži postavke vremenske zone profila"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Preskoči upozorenje za vanjske poveznice za sve domene"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Preskoči mrežni poziv kada se pošalje izvješće unutar aplikacije. Tok i dalje napreduje do zaslona uspjeha tako da možete vježbati korisničko sučelje, ali ništa se zapravo ne šalje sigurnosnom timu."
@@ -29499,7 +29504,7 @@ msgstr "Slovenija"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Spora privitak datoteke"
@@ -29516,28 +29521,28 @@ msgstr "Usporite — pričekajte trenutak prije nego što pokušate ponovno."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Usporena izmjena poruke"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Sporo učitavanje poruka"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Sporo slanje poruka"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Sporo učitavanje profila"
@@ -30330,7 +30335,7 @@ msgstr "Počni ispočetka"
msgid "Start recording"
msgstr "Započni snimanje"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Započnite pretraživanje s <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> kako biste suzili rezultate."
@@ -30591,6 +30596,11 @@ msgstr "Zaustavi poruke i zahtjeve za prijateljstvo."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Zaustavite Neko da ne prati vaš pokazivač, a da pritom ostane povlačiv i interaktivan."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Zaustavi \"patchiranje\" metoda Node.prototype insertBefore i removeChild. Aplikacija će ponovno pasti kada prevoditelj stranice premjesti čvorove teksta koje React još uvijek drži."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Status tipkanja"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Komponente korisničkog sučelja"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Alkalmazásbeállítások"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Alkalmazás állapota"
@@ -4580,7 +4580,7 @@ msgstr "Jelenleg távol"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "A {productName} használatával elfogadja a frissített szabályzatokat.
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Betöltési vázlat mellőzése"
@@ -9539,7 +9539,7 @@ msgstr "Szerepkör létrehozása"
msgid "Create the administrator account"
msgstr "Hozd létre az adminisztrátori fiókot"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Létrehozod a csoportos DM-et a megmaradt {addableCount} résztvevővel, a többieket pedig kihagyod?"
@@ -11271,6 +11271,11 @@ msgstr "Gyorsbillentyű letiltása"
msgid "Disable sounds"
msgstr "Hangok kikapcsolása"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Fordítás DOM védő kikapcsolása"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Témák exportálása"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Mutassa a profilbeállításokban a csak a munkatársak számára elérhető időzóna-szekciót."
@@ -14182,7 +14187,7 @@ msgstr "Funkció átmenetileg letiltva"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funkciók"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Kényszerített engedélyezés"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Üzenetbetöltések hibájának kényszerítése"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Üzenetküldések sikertelenségének kényszerítése"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "GIF-választó betöltésének kényszerítése"
@@ -14641,7 +14646,7 @@ msgstr "Kényszerített elrejtés"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Kényszerített betöltési vázlat"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Nincs kényszerített {permissionName} engedély"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Profiladat-figyelmeztetés kényszerítése"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Profilvázak kényszerítése"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Kényszerített megjelenítés"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Vanity URL-figyelmeztetés kényszerített megjelenítése"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Hangkapcsolat kényszerített megjelenítése"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Kényszerített lassú mód aktív"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Ismeretlen üzenettípus kényszerítése"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Frissítés kényszerítése (kész)"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Hálózati hiba"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Hálózat és teljesítmény"
@@ -21565,7 +21570,7 @@ msgstr "Nincs megadva ok."
msgid "No recent mentions"
msgstr "Nincsenek legutóbbi említések"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Nincs több címzett, akivel csoportos közvetlen üzenetet hozhatnál létre."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Nincsenek webhookok"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Jelentések kihagyása"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Saját üzemeltetésű mód"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Saját üzemeltetésű mód felülbírálása"
@@ -29020,7 +29025,7 @@ msgstr "Saját képernyőmegosztásom megjelenítése"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Mutassam magam gépelés közben"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Mutasd az eszközspecifikus hangerőszabályzókat a hangmenükben"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Mutassa a profil időzóna beállításait (csak a rendszergazdák számára)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Külső linkre figyelmeztetés kihagyása minden domainhez"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Kihagyja a hálózati hívást, amikor egy alkalmazáson belüli jelentés be van küldve. A folyamat továbbra is a sikeres képernyőre lép, így gyakorolhatja a felhasználói felületet, de valójában semmi sem kerül elküldésre a biztonsági csapatnak."
@@ -29499,7 +29504,7 @@ msgstr "Szlovénia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Lassú mellékletfeltöltés"
@@ -29516,28 +29521,28 @@ msgstr "Lassíts – várj egy pillanatot, mielőtt újra megpróbálnád."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Lassú üzenetszerkesztés"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Lassú üzenetbetöltés"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Lassú üzenetküldés"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Lassú profilbetöltés"
@@ -30330,7 +30335,7 @@ msgstr "Újrakezdés"
msgid "Start recording"
msgstr "Felvétel indítása"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Kezdd a kereséseket az alábbiak szerint: <0>{peoplePrefix}</0>, <1>{textChannelPrefix}</1>, <2>{voiceChannelPrefix}</2>, <3>{communityPrefix}</3>, hogy szűkítsd az eredményeket."
@@ -30591,6 +30596,11 @@ msgstr "Üzenetek és ismerősjelölések leállítása."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Állítsd le a Neko-t, hogy ne kövesse az egeret, miközben az továbbra is húzható és interaktív marad."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Állítsd le a Node.prototype insertBefore és removeChild metódusok patchelését. Az alkalmazás újra összeomlik, ha egy oldalfordító átcsoportosítja a React által még mindig birtokolt szöveges csomópontokat."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Gépelés állapota"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Felhasználói felület összetevői"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Pengaturan aplikasi"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Status aplikasi"
@@ -4580,7 +4580,7 @@ msgstr "Sedang tidak di tempat"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Dengan menggunakan {productName}, Anda menyetujui kebijakan yang diperba
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Lewati kerangka pemuatan"
@@ -9539,7 +9539,7 @@ msgstr "Buat peran"
msgid "Create the administrator account"
msgstr "Buat akun administrator"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Buat DM grup dengan {addableCount} penerima yang tersisa dan lewati yang lain?"
@@ -11271,6 +11271,11 @@ msgstr "Nonaktifkan pintasan"
msgid "Disable sounds"
msgstr "Nonaktifkan suara"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Nonaktifkan pelindung DOM terjemahan"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Ekspor tema"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Tampilkan bagian zona waktu khusus staf di pengaturan profil."
@@ -14182,7 +14187,7 @@ msgstr "Fitur dinonaktifkan sementara"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Fitur"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Paksa diaktifkan"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Paksa pesan gagal dimuat"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Paksa pengiriman pesan gagal"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Paksa pemuatan pemilih GIF"
@@ -14641,7 +14646,7 @@ msgstr "Paksa sembunyikan"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Paksa memuat kerangka"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Paksa tidak ada izin {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Paksa peringatan data profil"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Paksa kerangka profil"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Paksa tampilkan"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Paksa tampilkan penafian URL kustom"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Paksa tampilkan koneksi suara"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Paksa mode lambat aktif"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Paksa jenis pesan tidak dikenal"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Paksa pembaruan siap"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Kesalahan jaringan"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Jaringan dan performa"
@@ -21565,7 +21570,7 @@ msgstr "Tidak ada alasan yang diberikan."
msgid "No recent mentions"
msgstr "Tidak ada sebutan terbaru"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Tidak ada penerima tersisa untuk membuat DM grup."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Tidak ada webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Laporan dalam aplikasi no-op"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Mode di-hosting sendiri"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Timpa mode di-hosting sendiri"
@@ -29020,7 +29025,7 @@ msgstr "Tampilkan berbagi layar saya"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Tampilkan saya mengetik"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Tampilkan penggeser volume peserta per perangkat di menu suara"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Tampilkan pengaturan zona waktu profil"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Lewati peringatan tautan eksternal untuk semua domain"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Lewati panggilan jaringan saat laporan dalam aplikasi dikirim. Alur tetap berlanjut ke layar sukses sehingga Anda dapat melatih UI, tetapi tidak ada yang benar-benar dikirim ke tim keamanan."
@@ -29499,7 +29504,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Unggah lampiran lambat"
@@ -29516,28 +29521,28 @@ msgstr "Pelan-pelan — tunggu sebentar sebelum mencoba lagi."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Edit pesan lambat"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Muat pesan lambat"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Kirim pesan lambat"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Muat profil lambat"
@@ -30330,7 +30335,7 @@ msgstr "Mulai lagi"
msgid "Start recording"
msgstr "Mulai merekam"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Mulai pencarian dengan <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> untuk mempersempit hasil."
@@ -30591,6 +30596,11 @@ msgstr "Hentikan pesan dan permintaan pertemanan."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Hentikan Neko mengejar kursor Anda sambil tetap membuatnya dapat diseret dan interaktif."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Berhenti menambal Node.prototype insertBefore dan removeChild. Aplikasi akan kembali macet saat penerjemah halaman memindahkan ulang node teks yang masih dipegang React."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Status mengetik"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Komponen UI"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Impostazioni app"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Stato dell'app"
@@ -4580,7 +4580,7 @@ msgstr "Assente in questo momento"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Usando {productName}, accetti le norme aggiornate."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Ignora scheletro di caricamento"
@@ -9539,7 +9539,7 @@ msgstr "Crea ruolo"
msgid "Create the administrator account"
msgstr "Crea l'account amministratore"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Creare la chat di gruppo con i {addableCount} destinatari rimanenti e saltare gli altri?"
@@ -11271,6 +11271,11 @@ msgstr "Disabilita scorciatoia"
msgid "Disable sounds"
msgstr "Disattiva suoni"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Disabilita la protezione DOM del traduttore"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Esporta temi"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Mostra la sezione delle impostazioni del fuso orario riservata agli amministratori nel profilo."
@@ -14182,7 +14187,7 @@ msgstr "Funzione temporaneamente disabilitata"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funzionalità"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Forzato"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Forza caricamento messaggi non riuscito"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Forza l'invio di messaggi non riuscito"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Forza caricamento selettore GIF"
@@ -14641,7 +14646,7 @@ msgstr "Forza la chiusura"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Forza caricamento scheletro"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Forza nessun permesso {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Forza avviso dati profilo"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Forza scheletri profilo"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Forza visualizzazione"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Forza la visualizzazione dell'avviso sull'URL personalizzato"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Forza visualizzazione connessione vocale"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Modalità lenta forzata attiva"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Forza tipo di messaggio sconosciuto"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Forza aggiornamento pronto"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Errore di rete"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Rete e prestazioni"
@@ -21565,7 +21570,7 @@ msgstr "Nessun motivo fornito."
msgid "No recent mentions"
msgstr "Nessuna menzione recente"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Nessun altro destinatario con cui creare una chat di gruppo."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Nessun webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Segnalazioni in-app no-op"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Modalità self-hosted"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Forza modalità self-hosted"
@@ -29020,7 +29025,7 @@ msgstr "Mostra la mia condivisione schermo"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Mostrami come se stessi digitando"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Mostra i controlli del volume dei partecipanti per dispositivo nei menu vocali"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Mostra le impostazioni del fuso orario del profilo (solo per il personale)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Salta l'avviso per i link esterni per tutti i domini"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Salta la chiamata di rete quando viene inviata una segnalazione in-app. Il flusso avanza comunque alla schermata di successo, così puoi testare l'interfaccia utente, ma nulla viene effettivamente inviato al team di sicurezza."
@@ -29499,7 +29504,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Caricamento lento allegati"
@@ -29516,28 +29521,28 @@ msgstr "Rallenta: attendi un momento prima di riprovare."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Modifica messaggio lenta"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Caricamento lento dei messaggi"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Invio lento dei messaggi"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Caricamento lento del profilo"
@@ -30330,7 +30335,7 @@ msgstr "Ricominciamo"
msgid "Start recording"
msgstr "Avvia registrazione"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Inizia le ricerche con <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> per restringere i risultati."
@@ -30591,6 +30596,11 @@ msgstr "Interrompi messaggi e richieste di amicizia."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Impedisci a Neko di inseguire il cursore, mantenendolo trascinabile e interattivo."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Smetti di applicare patch a Node.prototype insertBefore e removeChild. L'app si bloccherà di nuovo quando un traduttore di pagine riposizionerà i nodi di testo che React detiene ancora."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Stato digitazione"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Componenti dell'interfaccia utente"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "アプリ設定"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "アプリの状態"
@@ -4580,7 +4580,7 @@ msgstr "現在離席中"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "{productName}のご利用により、更新されたポリシーに同
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "ローディングスケルトンをバイパス"
@@ -9539,7 +9539,7 @@ msgstr "ロールを作成"
msgid "Create the administrator account"
msgstr "管理者アカウントを作成"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "追加可能な{addableCount}人のメンバーでグループDMを作成し、他のメンバーはスキップしますか?"
@@ -11271,6 +11271,11 @@ msgstr "ショートカットを無効にする"
msgid "Disable sounds"
msgstr "サウンドをオフにする"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "翻訳DOMガードを無効にする"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "テーマをエクスポート"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "プロフィール設定で、スタッフ専用のタイムゾーンセクションを表示します。"
@@ -14182,7 +14187,7 @@ msgstr "この機能は一時的に利用できません"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "機能"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "強制的に有効"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "メッセージの読み込み失敗を強制する"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "メッセージ送信の失敗を強制する"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "GIFピッカーの読み込みを強制する"
@@ -14641,7 +14646,7 @@ msgstr "強制的に非表示"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "スケルトンの強制読み込み"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "{permissionName}の権限がない状態を強制する"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "プロフィールデータの警告を強制表示"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "プロフィールスケルトンを強制"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "強制的に表示"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "カスタムURLの免責事項を常に表示"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "音声接続を強制的に表示"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "スローモードを強制的に有効にする"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "不明なメッセージタイプを強制する"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "アップデートの準備完了を強制"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "ネットワークエラー"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "ネットワークとパフォーマンス"
@@ -21565,7 +21570,7 @@ msgstr "理由が入力されていません。"
msgid "No recent mentions"
msgstr "最近のメンションはありません"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "グループDMを作成できる相手がいません。"
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "ウェブフックなし"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "アプリ内レポートを無効化"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "セルフホストモード"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "セルフホストモードを強制"
@@ -29020,7 +29025,7 @@ msgstr "自分の画面共有を表示"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "自分を「入力中」と表示"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "デバイスごとの参加者の音量スライダーを音声メニューに表示"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "プロファイル設定で、スタッフ専用のプロファイルタイムゾーンセクションを表示します"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "すべてのドメインで外部リンクの警告をスキップ"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "アプリ内レポートが送信されてもネットワーク呼び出しをスキップします。フローは成功画面に進むためUIを試すことはできますが、実際には安全チームには何も送信されません。"
@@ -29499,7 +29504,7 @@ msgstr "スロベニア"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "添付ファイルのアップロードを低速化"
@@ -29516,28 +29521,28 @@ msgstr "落ち着いてください。しばらく待ってからもう一度お
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "メッセージ編集を低速化"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "メッセージの読み込みを遅くする"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "メッセージ送信を遅くする"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "プロフィールの読み込みを遅くする"
@@ -30330,7 +30335,7 @@ msgstr "最初からやり直す"
msgid "Start recording"
msgstr "録音を開始"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "検索を始めるには、<0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> を使用して、結果を絞り込みます。"
@@ -30591,6 +30596,11 @@ msgstr "メッセージと友達リクエストを停止."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "カーソルをドラッグ可能かつインタラクティブなまま、ネコがカーソルを追いかけるのを止めます。"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Node.prototype の insertBefore と removeChild のパッチを停止します。ページ翻訳者が React がまだ保持しているテキストノードを再親子化すると、アプリは再びクラッシュします。"
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "入力中"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UIコンポーネント"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "앱 설정"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "앱 상태"
@@ -4580,7 +4580,7 @@ msgstr "지금은 부재중"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "{productName}을(를) 이용하면 업데이트된 정책에 동의하
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "로딩 스켈레톤 건너뛰기"
@@ -9539,7 +9539,7 @@ msgstr "역할 만들기"
msgid "Create the administrator account"
msgstr "관리자 계정 만들기"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "추가 가능한 친구 {addableCount}명으로 그룹 DM을 만들고, 나머지는 건너뛸까요?"
@@ -11271,6 +11271,11 @@ msgstr "단축키 비활성화"
msgid "Disable sounds"
msgstr "소리 끄기"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "번역 DOM 가드 비활성화"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "테마 내보내기"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "프로필 설정에서 직원 전용 시간대 섹션을 표시합니다."
@@ -14182,7 +14187,7 @@ msgstr "일시적으로 비활성화된 기능"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "기능"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "강제 활성화됨"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "메시지 로드 실패 강제 실행"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "메시지 전송 실패 강제 실행"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "GIF 선택기 로딩 강제 실행"
@@ -14641,7 +14646,7 @@ msgstr "강제 숨기기"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "스켈레톤 강제 로드"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "{permissionName} 권한 없음 강제 적용"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "프로필 데이터 경고 강제 표시"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "프로필 스켈레톤 강제 적용"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "강제로 표시"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "꾸밈 URL 고지 사항 강제 표시"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "음성 연결 강제 표시"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "슬로우 모드 강제 활성화"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "알 수 없는 메시지 유형 강제 적용"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "업데이트 준비 강제 실행"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "네트워크 오류"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "네트워킹 및 성능"
@@ -21565,7 +21570,7 @@ msgstr "사유가 제공되지 않았습니다."
msgid "No recent mentions"
msgstr "최근 멘션 없음"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "그룹 DM을 만들 수 있는 수신자가 없습니다."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "웹훅 없음"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "앱 내 신고 무효화"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "자체 호스팅 모드"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "자체 호스팅 모드 재정의"
@@ -29020,7 +29025,7 @@ msgstr "내 화면 공유 표시"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "내가 입력 중으로 표시"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "음성 메뉴에서 기기별 참가자 볼륨 슬라이더 표시"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "프로필 설정에서 직원 전용 프로필 시간대 섹션을 표시합니다"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "모든 도메인에서 외부 링크 경고 건너뛰기"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "앱 내 신고 제출 시 네트워크 호출을 건너뜁니다. UI를 테스트할 수 있도록 성공 화면으로 계속 진행되지만, 안전팀에는 아무것도 전송되지 않습니다."
@@ -29499,7 +29504,7 @@ msgstr "슬로베니아"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "첨부 파일 업로드 속도 저하"
@@ -29516,28 +29521,28 @@ msgstr "속도를 늦춰주세요. 잠시 후 다시 시도해 주세요."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "메시지 편집 속도 저하"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "메시지 로드 속도 저하"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "메시지 전송 속도 저하"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "느린 프로필 로드"
@@ -30330,7 +30335,7 @@ msgstr "다시 시작"
msgid "Start recording"
msgstr "녹음 시작"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "검색을 시작할 때 <0>{peoplePrefix}</0>, <1>{textChannelPrefix}</1>, <2>{voiceChannelPrefix}</2>, <3>{communityPrefix}</3>을 사용하여 검색 범위를 좁힐 수 있습니다."
@@ -30591,6 +30596,11 @@ msgstr "메시지 및 친구 요청 중단."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Neko가 커서를 따라다니지 않도록 하면서도 드래그 및 상호작용은 유지합니다."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Node.prototype insertBefore 및 removeChild 패치를 중지합니다. React가 여전히 보유하고 있는 텍스트 노드를 페이지 번역기가 다시 부모로 지정하면 앱이 다시 충돌합니다."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "입력 상태"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI 구성 요소"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Programos nustatymai"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Programos būsena"
@@ -4580,7 +4580,7 @@ msgstr "Šiuo metu nesu prie kompiuterio"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Naudodami „{productName}\", sutinkate su atnaujintomis taisyklėmis."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Praleisti pakrovimo skeletą"
@@ -9539,7 +9539,7 @@ msgstr "Kurti vaidmenį"
msgid "Create the administrator account"
msgstr "Sukurti administratoriaus paskyrą"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Sukurti grupės tiesioginį pranešimą su likusiu (-iais) {addableCount} gavėju (-ais) ir praleisti kitus?"
@@ -11271,6 +11271,11 @@ msgstr "Išjungti nuorodą"
msgid "Disable sounds"
msgstr "Išjungti garsus"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Apsaugos nuo DOM vertimo išjungimas"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Eksportuoti temas"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Rodyti personalo skirtą laiko juostos skyrių profilio nustatymuose."
@@ -14182,7 +14187,7 @@ msgstr "Funkcija laikinai išjungta"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funkcijos"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Priverstinai įjungta"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Priverstinai įkelti nepavykusius pranešimus"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Priverstinai siųsti nepavykusius pranešimus"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Priverstinai įkelti GIF parinkiklį"
@@ -14641,7 +14646,7 @@ msgstr "Priverstinai slėpti"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Priverstinis skeletų įkėlimas"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Priverstinai netaikyti {permissionName} leidimo"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Visada rodyti profilio duomenų įspėjimą"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Priverstiniai profilio griaučiai"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Priverstinai rodyti"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Visada rodyti pasirinktinio URL atsisakymą"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Visada rodyti balso ryšį"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Priverstinai įjungti lėtąjį režimą"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Priverstinai nustatyti nežinomą pranešimo tipą"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Priverstinai paruošti naujinimą"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Tinklo klaida"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Tinklas ir našumas"
@@ -21565,7 +21570,7 @@ msgstr "Nenurodyta priežastis."
msgid "No recent mentions"
msgstr "Nėra naujų paminėjimų"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Nebėra gavėjų, su kuriais būtų galima sukurti grupės tiesioginį pranešimą."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Nėra \"webhook\" nuorodų"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Ataskaitos programoje be operacijos"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Savarankiškai priglobtas režimas"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Savęs talpinimo režimo nepaisymas"
@@ -29020,7 +29025,7 @@ msgstr "Rodyti mano ekrano bendrinimą"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Rodyti, kad rašau"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Rodyti dalyvių garsumo slankiklius balsiniuose meniu kiekvienam įrenginiui"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Rodyti profilio laiko zonos nustatymus"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Praleisti išorinių nuorodų įspėjimą visiems domenams"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Praleisti tinklo iškvietimą, kai pateikiama ataskaita programoje. Srautas vis tiek pereina prie sėkmės ekrano, kad galėtumėte išbandyti vartotojo sąsają, bet nieko iš tikrųjų nesiunčiama saugos komandai."
@@ -29499,7 +29504,7 @@ msgstr "Slovėnija"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Lėtas priedų įkėlimas"
@@ -29516,28 +29521,28 @@ msgstr "Sulėtinkite tempą – prieš bandydami dar kartą palaukite."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Lėtas pranešimo redagavimas"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Lėtas pranešimų įkėlimas"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Lėtas žinučių siuntimas"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Lėtas profilio įkėlimas"
@@ -30330,7 +30335,7 @@ msgstr "Pradėti iš naujo"
msgid "Start recording"
msgstr "Pradėti įrašymą"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Pradėkite paieškas nuo <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3>, kad susiaurintumėte paieškos rezultatus."
@@ -30591,6 +30596,11 @@ msgstr "Stabdyti žinutes ir draugų užklausas."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Sustabdykite Neko nuo jūsų žymeklio vaikymosi, bet palikite jį vilkamą ir interaktyvų."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Nustoti taisyti Node.prototype insertBefore ir removeChild. Programa vėl suges, kai puslapio vertėjas perkels teksto mazgus, kuriuos React vis dar laiko."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Rašymo būsena"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI komponentai"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "App-instellingen"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Appstatus"
@@ -4580,7 +4580,7 @@ msgstr "Nu afwezig"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Door {productName} te gebruiken, ga je akkoord met het bijgewerkte belei
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Laad-skelet omzeilen"
@@ -9539,7 +9539,7 @@ msgstr "Rol aanmaken"
msgid "Create the administrator account"
msgstr "Maak het beheerdersaccount aan"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Groeps-DM aanmaken met de overige {addableCount} ontvanger(s) en de anderen overslaan?"
@@ -11271,6 +11271,11 @@ msgstr "Sneltoets uitschakelen"
msgid "Disable sounds"
msgstr "Geluiden uitschakelen"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "DOM-vertalingsbeveiliging uitschakelen"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Thema's exporteren"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Toon de tijdzone-instellingen voor beheerders in het profiel."
@@ -14182,7 +14187,7 @@ msgstr "Functie tijdelijk uitgeschakeld"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Functies"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Geforceerd ingeschakeld"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Berichtladen forceren mislukken"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Mislukte berichtverzendingen forceren"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Laden van GIF-kiezer forceren"
@@ -14641,7 +14646,7 @@ msgstr "Verbergen forceren"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Geforceerd laden skelet"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Forceer geen {permissionName}-toestemming"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Profielgegevenswaarschuwing forceren"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Profielskeletons forceren"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Tonen forceren"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Disclaimer voor vanity-URL altijd tonen"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Spraakverbinding altijd weergeven forceren"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Slowmode forceren"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Onbekend berichttype forceren"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Update forceren (gereed)"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Netwerkfout"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Netwerk en prestaties"
@@ -21565,7 +21570,7 @@ msgstr "Geen reden opgegeven."
msgid "No recent mentions"
msgstr "Geen recente vermeldingen"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Geen ontvangers meer om een groeps-DM mee te starten."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Geen webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "In-app-rapporten overslaan"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Zelf-gehoste modus"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Overschrijving zelf-gehoste modus"
@@ -29020,7 +29025,7 @@ msgstr "Mijn scherm delen tonen"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Toon mezelf als typend"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Laat volumeregelaars per apparaat zien in stemmenu's"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Toon instellingen voor tijdzone in profiel (alleen voor beheerders)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Externe linkwaarschuwing overslaan voor alle domeinen"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Sla de netwerkoproep over wanneer een in-app rapport wordt ingediend. De flow gaat nog steeds door naar het succes scherm, zodat je de UI kunt testen, maar er wordt niets naar het veiligheidsteam gestuurd."
@@ -29499,7 +29504,7 @@ msgstr "Slovenië"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Trage bijlage-upload"
@@ -29516,28 +29521,28 @@ msgstr "Rustig aan — wacht even voordat je het opnieuw probeert."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Trage bewerking van bericht"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Trage berichtlading"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Berichten langzaam verzenden"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Langzaam profiel laden"
@@ -30330,7 +30335,7 @@ msgstr "Opnieuw beginnen"
msgid "Start recording"
msgstr "Opname starten"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Begin zoekopdrachten met <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> om de resultaten te verfijnen."
@@ -30591,6 +30596,11 @@ msgstr "Berichten en vriendschapsverzoeken stoppen."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Stop Neko met het najagen van je cursor, terwijl deze wel verplaatsbaar en interactief blijft."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Stop met het patchen van Node.prototype insertBefore en removeChild. De app crasht opnieuw wanneer een paginavertaal de tekstnodes opnieuw ouder maakt waar React nog steeds naar verwijst."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Typstatus"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI-componenten"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Appinnstillinger"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Apptilstand"
@@ -4580,7 +4580,7 @@ msgstr "Borte akkurat nå"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Ved å bruke {productName} godtar du de oppdaterte retningslinjene."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Omgå lasteskjelett"
@@ -9539,7 +9539,7 @@ msgstr "Opprett rolle"
msgid "Create the administrator account"
msgstr "Opprett administratorkontoen"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Opprette gruppe-DM med de {addableCount} gjenværende mottakerne og hoppe over de andre?"
@@ -11271,6 +11271,11 @@ msgstr "Deaktiver snarvei"
msgid "Disable sounds"
msgstr "Slå av lyder"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Deaktiver oversetter-DOM-vakt"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Eksporter temaer"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Vis tidszoneseksjonen som kun er tilgjengelig for ansatte i profilinnstillingene."
@@ -14182,7 +14187,7 @@ msgstr "Funksjonen er midlertidig deaktivert"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funksjoner"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Tvangsaktivert"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Fremtving mislykkede meldingsinnlastinger"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Fremtving mislykkede meldingssendinger"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Tving lasting av GIF-velger"
@@ -14641,7 +14646,7 @@ msgstr "Tving frem skjul"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Tving lasting av skjelett"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Tving ingen {permissionName}-tillatelse"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Tving advarsel om profildata"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Tving profilskjeletter"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Tving frem visning"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Tving frem visning av ansvarsfraskrivelse for tilpasset URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Vis alltid taletilkobling"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Tving sakte modus aktiv"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Tving ukjent meldingstype"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Tving frem klar oppdatering"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Nettverksfeil"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Nettverk og ytelse"
@@ -21565,7 +21570,7 @@ msgstr "Ingen grunn ble oppgitt."
msgid "No recent mentions"
msgstr "Ingen nylige omtaler"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Ingen gjenværende mottakere å opprette en gruppe-DM med."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Ingen webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Ikke-operativ rapportering i appen"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Selvhostet modus"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Tving selvbetjent modus"
@@ -29020,7 +29025,7 @@ msgstr "Vis skjermdelingen min"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Vis meg selv som skriver"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Vis volumkontroller for deltakere per enhet i stemmemenyer"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Vis innstillinger for tidssone i profil"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Hopp over advarsel om ekstern lenke for alle domener"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Hopper over nettverkskallet når en rapport i appen sendes inn. Flyten går fortsatt videre til suksess-skjermen slik at du kan teste brukergrensesnittet, men ingenting sendes faktisk til sikkerhetsteamet."
@@ -29499,7 +29504,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Treg opplasting av vedlegg"
@@ -29516,28 +29521,28 @@ msgstr "Sakte ned – vent et øyeblikk før du prøver igjen."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Treg meldingsredigering"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Treg meldingsinnlasting"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Send meldinger sakte"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Treg profilinnlasting"
@@ -30330,7 +30335,7 @@ msgstr "Start på nytt"
msgid "Start recording"
msgstr "Start opptak"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Start søk med <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> for å begrense resultatene."
@@ -30591,6 +30596,11 @@ msgstr "Stopp meldinger og venneforespørsler."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Stopp Neko fra å jage musepekeren din, samtidig som den forblir dra- og klikkbar."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Slutt å patche Node.prototype insertBefore og removeChild. Appen vil krasje igjen når en sidestøtte overordner tekstnoder som React fortsatt holder."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Skrivestatus"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI-komponenter"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Ustawienia aplikacji"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Stan aplikacji"
@@ -4580,7 +4580,7 @@ msgstr "Teraz jestem niedostępny(-a)"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Korzystając z {productName}, akceptujesz zaktualizowane zasady."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Pomiń szkielet ładowania"
@@ -9539,7 +9539,7 @@ msgstr "Utwórz rolę"
msgid "Create the administrator account"
msgstr "Utwórz konto administratora"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Utworzyć czat grupowy z pozostałymi {addableCount} osobami, a pominąć resztę?"
@@ -11271,6 +11271,11 @@ msgstr "Wyłącz skrót"
msgid "Disable sounds"
msgstr "Wyłącz dźwięki"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Wyłącz ochronę DOM tłumacza"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Eksportuj motywy"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Udostępnij sekcję ustawień strefy czasowej tylko dla pracowników."
@@ -14182,7 +14187,7 @@ msgstr "Funkcja tymczasowo wyłączona"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funkcje"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Wymuszone włączenie"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Wymuś nieudane ładowanie wiadomości"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Wymuś nieudane wysyłanie wiadomości"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Wymuś ładowanie selektora GIF-ów"
@@ -14641,7 +14646,7 @@ msgstr "Wymuś ukrycie"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Wymuś ładowanie szkieletu"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Wymuś brak uprawnienia {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Wymuś ostrzeżenie o danych profilu"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Wymuś szkielety profilu"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Wymuś pokazanie"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Wymuś wyświetlanie zastrzeżenia dotyczącego niestandardowego adresu URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Wymuś wyświetlanie połączenia głosowego"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Wymuś aktywny tryb slowmode"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Wymuś nieznany typ wiadomości"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Wymuś gotowość aktualizacji"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Błąd sieci"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Sieć i wydajność"
@@ -21565,7 +21570,7 @@ msgstr "Nie podano powodu."
msgid "No recent mentions"
msgstr "Brak ostatnich wzmianek"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Brak pozostałych odbiorców, z którymi można utworzyć grupową wiadomość."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Brak webhooków"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Wyłącz zgłoszenia w aplikacji"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Tryb samodzielnego hostowania"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Wymuś tryb samodzielnego hostowania"
@@ -29020,7 +29025,7 @@ msgstr "Pokaż mój udostępniony ekran"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Pokaż, że piszę"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Pokaż suwaki głośności uczestników dla poszczególnych urządzeń w menu głosowych"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Pokaż sekcję strefy czasowej w ustawieniach profilu (opcja dla administratorów)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Pomiń ostrzeżenie o linkach zewnętrznych dla wszystkich domen"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Pomiń wywołanie sieciowe po przesłaniu zgłoszenia w aplikacji. Przepływ nadal przechodzi do ekranu sukcesu, dzięki czemu możesz ćwiczyć interfejs użytkownika, ale nic nie jest faktycznie wysyłane do zespołu bezpieczeństwa."
@@ -29499,7 +29504,7 @@ msgstr "Słowenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Wolne wysyłanie załączników"
@@ -29516,28 +29521,28 @@ msgstr "Zwolnij — poczekaj chwilę, zanim spróbujesz ponownie."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Wolna edycja wiadomości"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Wolne ładowanie wiadomości"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Wolne wysyłanie wiadomości"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Wolne ładowanie profilu"
@@ -30330,7 +30335,7 @@ msgstr "Zacznij od nowa"
msgid "Start recording"
msgstr "Rozpocznij nagrywanie"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Zacznij wyszukiwanie od <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3>, aby zawęzić wyniki."
@@ -30591,6 +30596,11 @@ msgstr "Zatrzymaj wiadomości i zaproszenia do znajomych."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Zatrzymaj Neko przed gonieniem kursora, jednocześnie pozwalając na jego przeciąganie i interakcję."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Przestań łatać Node.prototype insertBefore i removeChild. Aplikacja ponownie się zawiesi, gdy tłumacz stron zmieni kolejność węzłów tekstowych, które React nadal przechowuje."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Status pisania"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Komponenty interfejsu"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Configurações do aplicativo"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Estado do aplicativo"
@@ -4580,7 +4580,7 @@ msgstr "Ausente no momento"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Ao usar o {productName}, você concorda com as políticas atualizadas."
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Ignorar esqueleto de carregamento"
@@ -9539,7 +9539,7 @@ msgstr "Criar função"
msgid "Create the administrator account"
msgstr "Criar a conta de administrador"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Criar o grupo de DM com {addableCount} destinatário(s) restante(s) e pular os outros?"
@@ -11271,6 +11271,11 @@ msgstr "Desativar atalho"
msgid "Disable sounds"
msgstr "Desativar sons"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Desativar proteção contra travamento do DOM do tradutor"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Exportar temas"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Mostrar a seção de fuso horário acessível apenas para funcionários nas configurações do perfil."
@@ -14182,7 +14187,7 @@ msgstr "Recurso temporariamente desativado"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Recursos"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Ativado à força"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Forçar falha no carregamento de mensagens"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Forçar falha no envio de mensagens"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Forçar carregamento do seletor de GIFs"
@@ -14641,7 +14646,7 @@ msgstr "Forçar ocultar"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Forçar carregamento do esqueleto"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Forçar sem a permissão {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Forçar aviso de dados do perfil"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Forçar esqueletos de perfil"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Forçar exibição"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Forçar exibição do aviso de URL personalizada"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Forçar exibição da conexão de voz"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Forçar modo lento ativo"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Forçar tipo de mensagem desconhecido"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Forçar atualização pronta"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Erro de rede"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Rede e desempenho"
@@ -21565,7 +21570,7 @@ msgstr "Nenhum motivo foi informado."
msgid "No recent mentions"
msgstr "Nenhuma menção recente"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Não há mais destinatários para criar um grupo de DM."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Nenhum webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Relatórios no app sem operação"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Modo auto-hospedado"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Substituir modo auto-hospedado"
@@ -29020,7 +29025,7 @@ msgstr "Mostrar minha tela"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Mostrar que estou digitando"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Mostrar controles deslizantes de volume por participante por dispositivo nos menus de voz"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Mostrar configurações de fuso horário do perfil"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Pular o aviso de link externo para todos os domínios"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Pula a chamada de rede quando um relatório no aplicativo é enviado. O fluxo ainda avança para a tela de sucesso para que você possa testar a interface, mas nada é realmente enviado para a equipe de segurança."
@@ -29499,7 +29504,7 @@ msgstr "Eslovênia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Upload lento de anexo"
@@ -29516,28 +29521,28 @@ msgstr "Vá com calma — espere um momento antes de tentar novamente."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Edição lenta de mensagem"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Carregamento lento de mensagens"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Envio lento de mensagens"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Carregamento lento de perfil"
@@ -30330,7 +30335,7 @@ msgstr "Começar de novo"
msgid "Start recording"
msgstr "Iniciar gravação"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Comece as pesquisas com <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> para refinar os resultados."
@@ -30591,6 +30596,11 @@ msgstr "Parar mensagens e pedidos de amizade."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Impede que o Neko persiga seu cursor, mantendo-o arrastável e interativo."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Parar de aplicar patches em Node.prototype insertBefore e removeChild. O app vai travar novamente quando um tradutor de página reparentar nós de texto que o React ainda mantém."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Digitando"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Componentes da interface"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Setări aplicație"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Stare aplicație"
@@ -4580,7 +4580,7 @@ msgstr "Plecat(ă) acum"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Prin utilizarea {productName}, ești de acord cu politicile actualizate.
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Ignorare schelet de încărcare"
@@ -9539,7 +9539,7 @@ msgstr "Creează rol"
msgid "Create the administrator account"
msgstr "Creează contul de administrator"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Creezi grupul de chat cu ceilalți {addableCount} destinatari și îi omiți pe ceilalți?"
@@ -11271,6 +11271,11 @@ msgstr "Dezactivează scurtătura"
msgid "Disable sounds"
msgstr "Dezactivează sunetele"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Dezactivează protecția DOM pentru traducere"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Exportă teme"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Afișează secțiunea cu setările de fus orar disponibile doar pentru personal."
@@ -14182,7 +14187,7 @@ msgstr "Funcție dezactivată temporar"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funcționalități"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Forțat activat"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Forțează eșecul încărcării mesajelor"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Forțează eșecul trimiterii mesajelor"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Forțează încărcarea selectorului GIF"
@@ -14641,7 +14646,7 @@ msgstr "Forțează ascunderea"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Forțare încărcare schelet"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Forțează fără permisiunea {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Forțează avertismentul privind datele de profil"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Forțează scheletele de profil"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Afișare forțată"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Forțează afișarea avertismentului privind URL-ul personalizat"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Forțează afișarea conexiunii vocale"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Forțează modul lent activ"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Forțează tipul de mesaj necunoscut"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Forțează actualizarea disponibilă"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Eroare de rețea"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Rețea și performanță"
@@ -21565,7 +21570,7 @@ msgstr "Nu a fost furnizat niciun motiv."
msgid "No recent mentions"
msgstr "Fără mențiuni recente"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Nu mai sunt destinatari pentru a crea un grup de mesaje directe."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Niciun webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Rapoarte în aplicație fără operație"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Mod auto-găzduit"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Suprascriere mod auto-găzduit"
@@ -29020,7 +29025,7 @@ msgstr "Afișează ecranul meu"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Arată-mă că tastez"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Afișează glisoare de volum pentru participanți pe dispozitiv în meniurile vocale"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Afișează setările pentru fusul orar al profilului (disponibil doar pentru personal)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Omitere avertisment link extern pentru toate domeniile"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Omiterea apelului de rețea la trimiterea unui raport în aplicație. Fluxul avansează în continuare la ecranul de succes, astfel încât să poți exersa interfața de utilizare, dar nimic nu este trimis echipei de siguranță."
@@ -29499,7 +29504,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Încărcare lentă atașament"
@@ -29516,28 +29521,28 @@ msgstr "Mai încet — așteaptă un moment înainte de a încerca din nou."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Editare lentă mesaj"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Încărcare lentă mesaje"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Trimitere lentă mesaje"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Încărcare lentă profil"
@@ -30330,7 +30335,7 @@ msgstr "Ia-o de la capăt"
msgid "Start recording"
msgstr "Începe înregistrarea"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Începeți căutările cu <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> pentru a restrânge rezultatele."
@@ -30591,6 +30596,11 @@ msgstr "Oprește mesajele și cererile de prietenie."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Oprește-l pe Neko să-ți urmărească cursorul, păstrându-l în același timp trasabil și interactiv."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Oprește patch-urile pentru Node.prototype insertBefore și removeChild. Aplicația se va bloca din nou când un traducător de pagină va re-părinți noduri de text pe care React încă le deține."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Stare tastare"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Componente UI"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Настройки приложения"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Состояние приложения"
@@ -4580,7 +4580,7 @@ msgstr "Сейчас нет на месте"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Используя {productName}, вы соглашаетесь с об
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Пропустить скелет загрузки"
@@ -9539,7 +9539,7 @@ msgstr "Создать роль"
msgid "Create the administrator account"
msgstr "Создайте учетную запись администратора"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Создать групповой чат с оставшимися {addableCount} участниками, пропустив остальных?"
@@ -11271,6 +11271,11 @@ msgstr "Отключить сочетание клавиш"
msgid "Disable sounds"
msgstr "Отключить звуки"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Отключить защиту DOM от переводчика"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Экспорт тем"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Показывать раздел с настройками часового пояса, доступный только сотрудникам."
@@ -14182,7 +14187,7 @@ msgstr "Функция временно отключена"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Функции"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Принудительно включено"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Принудительная загрузка неудачных сообщений"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Принудительно сбойные отправки сообщений"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Принудительная загрузка GIF-стикеров"
@@ -14641,7 +14646,7 @@ msgstr "Принудительно скрыть"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Принудительная загрузка скелета"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Принудительно отключить разрешение «{permissionName}»"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Всегда показывать предупреждение о данных профиля"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Принудительно показывать скелеты профилей"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Принудительно показать"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Всегда показывать отказ от ответственности для пользовательских URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Принудительно показывать голосовое подключение"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Принудительно включить медленный режим"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Принудительно неизвестный тип сообщения"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Принудительное обновление готово"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Ошибка сети"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Сеть и производительность"
@@ -21565,7 +21570,7 @@ msgstr "Причина не указана."
msgid "No recent mentions"
msgstr "Нет недавних упоминаний"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Не осталось получателей для создания группового чата."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Вебхуков нет"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Отчеты в приложении без операций"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Режим самостоятельного хостинга"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Принудительный режим самостоятельного размещения"
@@ -29020,7 +29025,7 @@ msgstr "Показывать мой экран"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Показывать, что я печатаю"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Показывать ползунки громкости участников для каждого устройства в голосовых меню"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Показать настройки часового пояса в профиле"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Пропускать предупреждение о внешних ссылках для всех доменов"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Пропускать сетевой вызов при отправке отчёта в приложении. Процесс всё равно переходит на экран успешной отправки, чтобы вы могли протестировать интерфейс, но ничего не отправляется команде безопасности."
@@ -29499,7 +29504,7 @@ msgstr "Словения"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Медленная загрузка вложений"
@@ -29516,28 +29521,28 @@ msgstr "Притормозите — подождите немного, преж
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Медленное редактирование сообщений"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Медленная загрузка сообщений"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Медленная отправка сообщений"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Медленная загрузка профиля"
@@ -30330,7 +30335,7 @@ msgstr "Начать сначала"
msgid "Start recording"
msgstr "Начать запись"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Начните поиск с <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3>, чтобы сузить область поиска."
@@ -30591,6 +30596,11 @@ msgstr "Остановить сообщения и запросы на доба
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Запретить Неко преследовать курсор, но оставить его перетаскиваемым и интерактивным."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Прекратить патчить Node.prototype insertBefore и removeChild. Приложение снова упадет, когда переводчик страниц перепривяжет текстовые узлы, которые React все еще удерживает."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Статус набора сообщения"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Компоненты интерфейса"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Appinställningar"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Appstatus"
@@ -4580,7 +4580,7 @@ msgstr "Borta just nu"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Genom att använda {productName} godkänner du de uppdaterade policyerna
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Hoppa över laddningsskelett"
@@ -9539,7 +9539,7 @@ msgstr "Skapa roll"
msgid "Create the administrator account"
msgstr "Skapa administratörskontot"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Skapa gruppmeddelandet med de återstående {addableCount} mottagarna och hoppa över de andra?"
@@ -11271,6 +11271,11 @@ msgstr "Inaktivera genväg"
msgid "Disable sounds"
msgstr "Stäng av ljud"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Inaktivera DOM-skydd för översättning"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Exportera teman"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Visa tidszonsinställningarna för personal i profilinställningarna."
@@ -14182,7 +14187,7 @@ msgstr "Funktionen är tillfälligt inaktiverad"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Funktioner"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Tvinga aktivering"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Tvinga misslyckade meddelandeladdningar"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Tvinga misslyckade meddelanden"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Tvinga laddning av GIF-väljare"
@@ -14641,7 +14646,7 @@ msgstr "Tvinga dölj"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Tvinga laddning av skelett"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Tvinga ingen behörighet för {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Tvinga fram varning för profildata"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Tvinga profilskelett"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Visa alltid"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Tvinga fram visning av friskrivning för anpassad URL"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Visa röstanslutning alltid"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Tvinga långsamt läge aktivt"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Tvinga okänd meddelandetyp"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Tvinga fram uppdatering redo"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Nätverksfel"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Nätverk och prestanda"
@@ -21565,7 +21570,7 @@ msgstr "Ingen anledning angavs."
msgid "No recent mentions"
msgstr "Inga omnämnanden nyligen"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Inga återstående mottagare att skapa en gruppchatt med."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Inga webhooks"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Inaktivera rapporter i appen"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Självhostat läge"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Åsidosätt egenvärdsläge"
@@ -29020,7 +29025,7 @@ msgstr "Visa min skärmdelning"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Visa mig själv som skriver"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Visa volymreglage för deltagare per enhet i röstmenyer"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Visa inställningar för profilens tidszon"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Hoppa över varningen för externa länkar för alla domäner"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Hoppa över nätverksanropet när en rapport i appen skickas. Flödet går fortfarande vidare till skärmen för lyckad åtgärd så att du kan öva på gränssnittet, men inget skickas faktiskt till säkerhetsteamet."
@@ -29499,7 +29504,7 @@ msgstr "Slovenien"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Långsam bilageuppladdning"
@@ -29516,28 +29521,28 @@ msgstr "Sakta ner – vänta ett ögonblick innan du försöker igen."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Långsam meddelanderedigering"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Långsam inläsning av meddelanden"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Långsam meddelandesändning"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Långsam profilinläsning"
@@ -30330,7 +30335,7 @@ msgstr "Börja om"
msgid "Start recording"
msgstr "Starta inspelning"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Börja sökningar med <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> för att begränsa resultaten."
@@ -30591,6 +30596,11 @@ msgstr "Stoppa meddelanden och vänförfrågningar."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Sluta låta Neko jaga muspekaren, men behåll den dra- och interaktiv."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Sluta patcha Node.prototype insertBefore och removeChild. Appen kraschar igen när en sidöversättare flyttar om textnoder som React fortfarande håller i."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Skrivstatus"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Gränssnittskomponenter"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "การตั้งค่าแอป"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "สถานะแอป"
@@ -4580,7 +4580,7 @@ msgstr "ไม่อยู่ตอนนี้"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "การใช้ {productName} ถือว่าคุณยอมร
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "ข้ามโครงร่างการโหลด"
@@ -9539,7 +9539,7 @@ msgstr "สร้างบทบาท"
msgid "Create the administrator account"
msgstr "สร้างบัญชีผู้ดูแลระบบ"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "สร้างกลุ่ม DM กับผู้รับที่เหลืออีก {addableCount} คนและข้ามคนอื่นใช่หรือไม่"
@@ -11271,6 +11271,11 @@ msgstr "ปิดใช้งานปุ่มลัด"
msgid "Disable sounds"
msgstr "ปิดเสียงแจ้งเตือน"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "ปิดการป้องกัน DOM ของตัวแปล"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "ส่งออกธีม"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "แสดงส่วนการตั้งค่าเขตเวลาสำหรับผู้ดูแลระบบในโปรไฟล์"
@@ -14182,7 +14187,7 @@ msgstr "ปิดใช้งานฟีเจอร์ชั่วคราว
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "คุณสมบัติ"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "บังคับเปิดใช้งาน"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "บังคับโหลดข้อความไม่สำเร็จ"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "บังคับส่งข้อความไม่สำเร็จ"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "บังคับโหลดตัวเลือก GIF"
@@ -14641,7 +14646,7 @@ msgstr "ซ่อน"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "บังคับโหลดโครงร่าง"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "บังคับไม่มีสิทธิ์ {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "บังคับแสดงคำเตือนข้อมูลโปรไฟล์"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "บังคับโครงร่างโปรไฟล์"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "บังคับแสดง"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "บังคับแสดงข้อจำกัดความรับผิดชอบ URL ที่กำหนดเอง"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "บังคับแสดงการเชื่อมต่อเสียง"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "บังคับเปิดโหมดหน่วงเวลา"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "บังคับให้เป็นประเภทข้อความที่ไม่รู้จัก"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "บังคับอัปเดตพร้อมใช้งาน"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "ข้อผิดพลาดเครือข่าย"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "เครือข่ายและประสิทธิภาพ"
@@ -21565,7 +21570,7 @@ msgstr "ไม่ได้ระบุเหตุผล"
msgid "No recent mentions"
msgstr "ไม่มีการกล่าวถึงล่าสุด"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "ไม่มีผู้รับที่เหลือให้สร้างกลุ่ม DM ด้วย"
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "ไม่มี Webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "รายงานในแอปแบบไม่ดำเนินการ"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "โหมดโฮสต์เอง"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "โหมดโฮสต์เอง"
@@ -29020,7 +29025,7 @@ msgstr "แสดงการแชร์หน้าจอของฉัน"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "แสดงว่าฉันกำลังพิมพ์"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "แสดงแถบเลื่อนระดับเสียงของผู้เข้าร่วมตามอุปกรณ์ในเมนูเสียง"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "แสดงการตั้งค่าเขตเวลาในโปรไฟล์"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "ข้ามคำเตือนลิงก์ภายนอกสำหรับทุกโดเมน"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "ข้ามการเรียกเครือข่ายเมื่อส่งรายงานในแอป โฟลว์จะยังคงดำเนินการต่อไปยังหน้าจอสำเร็จเพื่อให้คุณสามารถทดสอบ UI ได้ แต่จะไม่มีการส่งสิ่งใดไปยังทีมความปลอดภัยจริง"
@@ -29499,7 +29504,7 @@ msgstr "สโลวีเนีย"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "อัปโหลดไฟล์แนบช้า"
@@ -29516,28 +29521,28 @@ msgstr "ช้าลงหน่อย — โปรดรอสักครู
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "แก้ไขข้อความช้า"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "โหลดข้อความช้า"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "ส่งข้อความช้า"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "โหลดโปรไฟล์ช้า"
@@ -30330,7 +30335,7 @@ msgstr "เริ่มใหม่"
msgid "Start recording"
msgstr "เริ่มบันทึก"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "เริ่มค้นหาด้วย <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> เพื่อจำกัดผลลัพธ์ให้แคบลง"
@@ -30591,6 +30596,11 @@ msgstr "หยุดรับข้อความและคำขอเป็
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "หยุดไม่ให้ Neko ไล่ตามเคอร์เซอร์ของคุณ แต่ยังคงลากและโต้ตอบได้"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "หยุดแก้ไข Node.prototype insertBefore และ removeChild แอปจะล่มอีกครั้งเมื่อตัวแปลหน้าเว็บจัดเรียงโหนดข้อความใหม่ที่ React ยังคงอ้างถึง"
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "สถานะกำลังพิมพ์"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "ส่วนประกอบ UI"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Uygulama ayarları"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Uygulama durumu"
@@ -4580,7 +4580,7 @@ msgstr "Şu an çevrimdışı"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "{productName} uygulamasını kullanarak güncellenmiş politikaları kab
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Yükleme iskeletini atla"
@@ -9539,7 +9539,7 @@ msgstr "Rol oluştur"
msgid "Create the administrator account"
msgstr "Yönetici hesabını oluştur"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Kalan {addableCount} kişiyle grup DM'i oluşturup diğerlerini atlamak ister misiniz?"
@@ -11271,6 +11271,11 @@ msgstr "Kısayolu devre dışı bırak"
msgid "Disable sounds"
msgstr "Sesleri kapat"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Çeviri DOM koruyucusunu devre dışı bırak"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Temaları dışa aktar"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Profil ayarlarında yalnızca çalışanlara özel zaman dilimi bölümünü göster."
@@ -14182,7 +14187,7 @@ msgstr "Özellik geçici olarak devre dışı bırakıldı"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Özellikler"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Zorla etkinleştirildi"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Mesaj yüklemelerinin başarısız olmasını zorla"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Mesaj göndermeyi başarısız olarak zorla"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "GIF seçici yüklemesini zorla"
@@ -14641,7 +14646,7 @@ msgstr "Gizlemeye zorla"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "İskeleti zorla yükle"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "{permissionName} iznini zorla"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Profil verileri uyarısını zorla"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Profil iskeletlerini zorla"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Gösterimi zorla"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Özel URL sorumluluk reddini her zaman göster"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Ses bağlantısını her zaman göster"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Yavaş modu etkinleştirmeye zorla"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Bilinmeyen mesaj türünü zorla"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Güncellemeyi hazır olarak zorla"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Ağ hatası"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Ağ ve performans"
@@ -21565,7 +21570,7 @@ msgstr "Neden belirtilmedi."
msgid "No recent mentions"
msgstr "Yakın zamanda bahsedilmediniz"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Grup DM oluşturmak için başka alıcı kalmadı."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Web Kancası yok"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Uygulama içi raporları atla"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Kendi kendine barındırılan mod"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Kendi kendine barındırılan mod geçersiz kılma"
@@ -29020,7 +29025,7 @@ msgstr "Ekran paylaşımımı göster"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Yazıyor olarak göster"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Ses menülerinde cihaza özel katılımcı ses seviyesi kaydırıcılarını göster"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Profil ayarlarında yalnızca personel için olan profil zaman dilimi bölümünü göster"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Tüm alan adları için harici bağlantı uyarısını atla"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Uygulama içi bir rapor gönderildiğinde ağ çağrısını atla. Akış yine de başarı ekranına ilerler, böylece kullanıcı arayüzünü kullanabilirsin, ancak güvenlik ekibine hiçbir şey gönderilmez."
@@ -29499,7 +29504,7 @@ msgstr "Slovenya"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Yavaş ek yükleme"
@@ -29516,28 +29521,28 @@ msgstr "Yavaşla — tekrar denemeden önce bir süre bekle."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Yavaş mesaj düzenleme"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Yavaş mesaj yüklemesi"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Yavaş mesaj gönderme"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Yavaş profil yüklemesi"
@@ -30330,7 +30335,7 @@ msgstr "Baştan başla"
msgid "Start recording"
msgstr "Kaydı başlat"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Aramalara <0>{peoplePrefix}</0>, <1>{textChannelPrefix}</1>, <2>{voiceChannelPrefix}</2> ve <3>{communityPrefix}</3> ile başlayarak sonuçları daraltın."
@@ -30591,6 +30596,11 @@ msgstr "Mesajları ve arkadaşlık isteklerini durdur."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "İmleci sürükleyip etkileşimli tutarken Neko'nun imleci takip etmesini durdurun."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Node.prototype insertBefore ve removeChild'ı yamalamayı durdur. Bir sayfa çevirmeni, React'ın hala tuttuğu metin düğümlerini yeniden ebeveynleştirdiğinde uygulama tekrar çökecektir."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Yazma durumu"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Kullanıcı arayüzü bileşenleri"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Налаштування програми"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Стан застосунку"
@@ -4580,7 +4580,7 @@ msgstr "Зараз відсутній"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Користуючись {productName}, ви погоджуєтеся з
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Пропустити завантаження скелета"
@@ -9539,7 +9539,7 @@ msgstr "Створити роль"
msgid "Create the administrator account"
msgstr "Створити обліковий запис адміністратора"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Створити груповий чат з {addableCount} учасником(-ами), а інших пропустити?"
@@ -11271,6 +11271,11 @@ msgstr "Вимкнути комбінацію клавіш"
msgid "Disable sounds"
msgstr "Вимкнути звуки"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Вимкнути захист DOM від перекладу"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Експортувати теми"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Показувати розділ із налаштуваннями часового поясу, доступний лише для співробітників."
@@ -14182,7 +14187,7 @@ msgstr "Функцію тимчасово вимкнено"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Функції"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Примусово ввімкнено"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Примусово завантажувати невдалі повідомлення"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Примусово надсилати невдалі повідомлення"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Примусово завантажити вибір GIF"
@@ -14641,7 +14646,7 @@ msgstr "Примусово приховати"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Примусове завантаження скелета"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Примусово вимкнути дозвіл «{permissionName}»"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Примусове попередження про дані профілю"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Примусово показувати скелети профілів"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Примусово показати"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Завжди показувати попередження про власну URL-адресу"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Завжди показувати голосове з'єднання"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Примусово ввімкнути повільний режим"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Примусово невідомий тип повідомлення"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Примусове оновлення готове"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Помилка мережі"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Мережа та продуктивність"
@@ -21565,7 +21570,7 @@ msgstr "Причину не вказано."
msgid "No recent mentions"
msgstr "Немає недавніх згадок"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Не залишилося одержувачів, щоб створити груповий чат."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Вебхуків немає"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Звіти в застосунку без операцій"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Самостійний режим"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Примусовий режим самостійного розміщення"
@@ -29020,7 +29025,7 @@ msgstr "Показувати мій екран"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Показувати, що я друкую"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Показувати повзунки гучності учасників для кожного пристрою в меню голосу"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Показувати налаштування часового поясу профілю в налаштуваннях профілю (лише для адміністраторів)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Пропускати попередження про зовнішні посилання для всіх доменів"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Пропускати мережевий виклик під час надсилання звіту в застосунку. Процес все одно переходить до екрана успішного виконання, щоб ви могли перевірити інтерфейс, але насправді нічого не надсилається команді безпеки."
@@ -29499,7 +29504,7 @@ msgstr "Словенія"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Повільне завантаження вкладень"
@@ -29516,28 +29521,28 @@ msgstr "Зачекайте трохи, перш ніж повторити спр
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Повільне редагування повідомлень"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Повільне завантаження повідомлень"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Повільна відправка повідомлень"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Повільне завантаження профілю"
@@ -30330,7 +30335,7 @@ msgstr "Почати спочатку"
msgid "Start recording"
msgstr "Почати запис"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Почніть пошук з <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3>, щоб звузити результати."
@@ -30591,6 +30596,11 @@ msgstr "Зупинити повідомлення та запити на дод
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Зупиніть Неко від переслідування вашого курсора, зберігаючи його перетягуваним та інтерактивним."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Припинити патчити Node.prototype insertBefore та removeChild. Додаток знову впаде, коли перекладач сторінки перепризначить текстові вузли, які React все ще тримає."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Стан набору"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Компоненти інтерфейсу"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "Cài đặt ứng dụng"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "Trạng thái ứng dụng"
@@ -4580,7 +4580,7 @@ msgstr "Đang vắng mặt"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "Bằng cách sử dụng {productName}, bạn đồng ý với các chí
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "Bỏ qua khung tải"
@@ -9539,7 +9539,7 @@ msgstr "Tạo vai trò"
msgid "Create the administrator account"
msgstr "Tạo tài khoản quản trị viên"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "Tạo nhóm chat với {addableCount} người còn lại và bỏ qua những người khác?"
@@ -11271,6 +11271,11 @@ msgstr "Tắt phím tắt"
msgid "Disable sounds"
msgstr "Tắt âm thanh"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "Tắt trình bảo vệ DOM dịch"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "Xuất chủ đề"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "Hiển thị phần cài đặt múi giờ dành riêng cho nhân viên trong cài đặt hồ sơ."
@@ -14182,7 +14187,7 @@ msgstr "Tính năng tạm thời bị tắt"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "Tính năng"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "Buộc bật"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "Buộc tải tin nhắn không thành công"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "Buộc gửi tin nhắn thất bại"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "Buộc tải trình chọn GIF"
@@ -14641,7 +14646,7 @@ msgstr "Buộc ẩn"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "Buộc tải khung xương"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "Buộc không có quyền {permissionName}"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "Buộc hiển thị cảnh báo dữ liệu hồ sơ"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "Buộc hiển thị khung hồ sơ"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "Buộc hiển thị"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "Luôn hiển thị cảnh báo URL tùy chỉnh"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "Luôn hiển thị trạng thái kết nối thoại"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "Buộc bật chế độ chậm"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "Buộc loại tin nhắn không xác định"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "Buộc cập nhật sẵn sàng"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "Lỗi mạng"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "Mạng và hiệu suất"
@@ -21565,7 +21570,7 @@ msgstr "Không có lý do nào được cung cấp."
msgid "No recent mentions"
msgstr "Không có lượt nhắc gần đây"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "Không còn người nhận nào để tạo tin nhắn nhóm."
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "Không có webhook nào"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "Báo cáo trong ứng dụng không hoạt động"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "Chế độ tự host"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "Ghi đè chế độ tự lưu trữ"
@@ -29020,7 +29025,7 @@ msgstr "Hiển thị chia sẻ màn hình của tôi"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "Hiển thị tôi đang nhập"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "Hiển thị thanh trượt âm lượng người tham gia theo từng thiết bị trong menu thoại"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "Hiển thị cài đặt múi giờ trong hồ sơ (chỉ dành cho nhân viên)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "Bỏ qua cảnh báo liên kết ngoài cho tất cả các miền"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "Bỏ qua lệnh gọi mạng khi báo cáo trong ứng dụng được gửi. Luồng vẫn chuyển sang màn hình thành công để bạn có thể thực hành giao diện người dùng, nhưng không có gì thực sự được gửi đến nhóm an toàn."
@@ -29499,7 +29504,7 @@ msgstr "Slovenia"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "Tải tệp đính kèm chậm"
@@ -29516,28 +29521,28 @@ msgstr "Chậm lại — đợi một lát trước khi thử lại."
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "Chỉnh sửa tin nhắn chậm"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "Tải tin nhắn chậm"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "Gửi tin nhắn chậm"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "Tải hồ sơ chậm"
@@ -30330,7 +30335,7 @@ msgstr "Bắt đầu lại"
msgid "Start recording"
msgstr "Bắt đầu ghi âm"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "Bắt đầu tìm kiếm bằng <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> để thu hẹp kết quả."
@@ -30591,6 +30596,11 @@ msgstr "Dừng tin nhắn và lời mời kết bạn."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "Ngăn Neko đuổi theo con trỏ chuột của bạn trong khi vẫn giữ cho nó có thể kéo và tương tác."
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "Ngừng vá Node.prototype insertBefore và removeChild. Ứng dụng sẽ lại gặp sự cố khi trình dịch trang di chuyển lại các nút văn bản mà React vẫn đang giữ."
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "Trạng thái đang nhập"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "Thành phần giao diện người dùng"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "应用设置"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "应用状态"
@@ -4580,7 +4580,7 @@ msgstr "当前离开"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "使用 {productName} 即表示您同意更新后的政策。"
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "跳过加载骨架"
@@ -9539,7 +9539,7 @@ msgstr "创建身份组"
msgid "Create the administrator account"
msgstr "创建管理员账户"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "创建包含其余 {addableCount} 位成员的群聊,并跳过其他成员?"
@@ -11271,6 +11271,11 @@ msgstr "禁用快捷方式"
msgid "Disable sounds"
msgstr "关闭声音"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "禁用翻译 DOM 保护程序"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "导出主题"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "在个人资料设置中显示仅供员工访问的时区部分。"
@@ -14182,7 +14187,7 @@ msgstr "功能暂时停用"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "功能"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "强制启用"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "强制消息加载失败"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "强制消息发送失败"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "强制加载 GIF 选择器"
@@ -14641,7 +14646,7 @@ msgstr "强制隐藏"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "强制加载骨架"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "强制无 {permissionName} 权限"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "强制显示个人资料数据警告"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "强制显示资料骨架屏"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "强制显示"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "强制显示自定义网址免责声明"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "强制显示语音连接"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "强制慢速模式开启"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "强制显示未知消息类型"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "强制更新就绪"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "网络错误"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "网络和性能"
@@ -21565,7 +21570,7 @@ msgstr "未提供理由。"
msgid "No recent mentions"
msgstr "暂无提及"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "没有其他收件人可以创建群聊。"
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "无 Webhook"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "空操作应用内举报"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "自托管模式"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "自托管模式覆盖"
@@ -29020,7 +29025,7 @@ msgstr "显示我的屏幕共享"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "显示我正在输入"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "在语音菜单中显示每个设备的参与者音量滑块"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "显示个人资料时区设置(仅限管理员)"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "跳过所有域名的外部链接警告"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "提交应用内报告时跳过网络调用。流程仍会跳转到成功界面,以便您测试 UI,但实际上不会向安全团队发送任何内容。"
@@ -29499,7 +29504,7 @@ msgstr "斯洛文尼亚"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "慢速附件上传"
@@ -29516,28 +29521,28 @@ msgstr "慢一点 — 请稍后再试。"
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "慢速消息编辑"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "慢速加载消息"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "慢速发送消息"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "慢速加载个人资料"
@@ -30330,7 +30335,7 @@ msgstr "重新开始"
msgid "Start recording"
msgstr "开始录音"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "从 <0>{peoplePrefix}</0>、<1>{textChannelPrefix}</1>、<2>{voiceChannelPrefix}</2> 和 <3>{communityPrefix}</3> 开始搜索,以缩小结果范围。"
@@ -30591,6 +30596,11 @@ msgstr "停止接收消息和好友请求."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "停止Neko追逐你的光标,同时保持其可拖动和交互性。"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "停止修补 Node.prototype 的 insertBefore 和 removeChild。当页面翻译器重新挂载 React 仍持有的文本节点时,应用将再次崩溃。"
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "正在输入"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "界面组件"
@@ -3654,7 +3654,7 @@ msgid "App settings"
msgstr "應用程式設定"
#. Developer options group for overriding app/account state.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:47
msgid "App state"
msgstr "應用程式狀態"
@@ -4580,7 +4580,7 @@ msgstr "目前不在線上"
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:77
#: src/features/auth/components/pages/oauth_authorize_page/OAuthAuthorizeActions.tsx:14
#: src/features/auth/flow/IpAuthorizationScreen.tsx:150
#: src/features/auth/flow/IpAuthorizationScreen.tsx:152
#: src/features/channel/components/channel_header/shared.ts:27
#: src/features/connection/components/modals/AddConnectionModal.tsx:397
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:164
@@ -5464,7 +5464,7 @@ msgstr "使用 {productName} 即表示您同意更新後的政策。"
#. Developer option label.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:51
msgid "Bypass loading skeleton"
msgstr "略過載入骨架"
@@ -9539,7 +9539,7 @@ msgstr "建立角色"
msgid "Create the administrator account"
msgstr "建立管理員帳號"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:93
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:94
msgid "Create the group DM with the remaining {addableCount} recipient(s) and skip the others?"
msgstr "要建立包含其餘 {addableCount} 位收件者的群組訊息,並略過其他人嗎?"
@@ -11271,6 +11271,11 @@ msgstr "停用捷徑"
msgid "Disable sounds"
msgstr "關閉音效"
#. Developer option label for turning off the page-translator DOM crash guard.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:37
msgid "Disable translation DOM guard"
msgstr "停用翻譯 DOM 防護罩"
#. Button or menu action label in the links tab. Keep it concise.
#: src/features/user/components/modals/tabs/chat_settings_tab/ChatSettingsTabLinksTab.tsx:35
msgid "Disable trust all"
@@ -13680,7 +13685,7 @@ msgid "Export themes"
msgstr "匯出主題"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the profile timezone settings toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:129
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
msgid "Expose the staff-only timezone section in profile settings."
msgstr "在個人資料設定中顯示僅限管理員使用的時區部分。"
@@ -14182,7 +14187,7 @@ msgstr "功能暫時停用"
#. Developer options group for feature behavior overrides.
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:113
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:123
#: src/features/user/components/settings_utils/search_index/PlutoniumIndex.ts:137
msgid "Features"
msgstr "功能"
@@ -14619,17 +14624,17 @@ msgid "Force enabled"
msgstr "強制啟用"
#. Developer option label for simulating failed message loads.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:119
msgid "Force failed message loads"
msgstr "強制訊息載入失敗"
#. Developer option label for simulating failed message sends.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:115
msgid "Force failed message sends"
msgstr "強制訊息傳送失敗"
#. Developer option label for simulating a loading GIF picker.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:65
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:75
msgid "Force GIF picker loading"
msgstr "強制載入 GIF 選擇器"
@@ -14641,7 +14646,7 @@ msgstr "強制隱藏"
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:45
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:55
msgid "Force loading skeleton"
msgstr "強制載入骨架"
@@ -14661,12 +14666,12 @@ msgid "Force no {permissionName} permission"
msgstr "強制不授予「{permissionName}」權限"
#. Developer option label for always showing profile data warnings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:111
msgid "Force profile data warning"
msgstr "強制顯示個人資料警告"
#. Developer option label for forcing user profile loading skeletons.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:107
msgid "Force profile skeletons"
msgstr "強制顯示個人檔案骨架"
@@ -14676,12 +14681,12 @@ msgid "Force show"
msgstr "強制顯示"
#. Developer option label for always showing a community settings warning.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:69
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:79
msgid "Force show vanity URL disclaimer"
msgstr "強制顯示自訂網址免責聲明"
#. Developer option label for always showing the voice connection status bar.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:121
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:131
msgid "Force show voice connection"
msgstr "強制顯示語音連線"
@@ -14690,12 +14695,12 @@ msgid "Force slowmode active"
msgstr "強制慢速模式已啟用"
#. Developer option label for rendering messages as unknown message types.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:117
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:127
msgid "Force unknown message type"
msgstr "強制顯示為未知訊息類型"
#. Developer option label for simulating an available update.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:49
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:59
msgid "Force update ready"
msgstr "強制更新就緒"
@@ -20952,7 +20957,7 @@ msgid "Network error"
msgstr "網路錯誤"
#. Developer options group for simulated slow or failed operations.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:73
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:83
msgid "Networking and performance"
msgstr "網路與效能"
@@ -21565,7 +21570,7 @@ msgstr "未提供原因。"
msgid "No recent mentions"
msgstr "沒有提及你的訊息"
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:97
#: src/features/channel/components/modals/UnaddableRecipientsConfirmModal.tsx:98
msgid "No remaining recipients to create a group DM with."
msgstr "沒有可建立群組私訊的剩餘收件人。"
@@ -21754,7 +21759,7 @@ msgid "No webhooks"
msgstr "沒有網路掛鉤"
#. Developer option label for short-circuiting the in-app reporting (IAR) flow. When enabled, submitting a report skips the network call.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:134
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:144
msgid "No-op in-app reports"
msgstr "停用應用程式內檢舉"
@@ -27876,7 +27881,7 @@ msgid "Self-hosted mode"
msgstr "自管模式"
#. Developer option label for forcing self-hosted client mode.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:57
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:67
msgid "Self-hosted mode override"
msgstr "自託管模式覆寫"
@@ -29020,7 +29025,7 @@ msgstr "顯示我的螢幕分享"
#. Developer option label for showing the current user as typing.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:53
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:63
msgid "Show myself typing"
msgstr "顯示我正在輸入"
@@ -29074,7 +29079,7 @@ msgid "Show per-device participant volume sliders in voice menus"
msgstr "在語音選單中顯示個別裝置的參與者音量滑桿"
#. Developer option label for exposing the staff-only profile timezone section in profile settings.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:125
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:135
msgid "Show profile timezone settings"
msgstr "顯示個人檔案時區設定"
@@ -29441,7 +29446,7 @@ msgid "Skip the external link warning for all domains"
msgstr "略過所有網域的外部連結警告"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the no-op in-app reports toggle.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:139
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:149
msgid "Skip the network call when an in-app report is submitted. The flow still advances to the success screen so you can exercise the UI, but nothing is actually sent to the safety team."
msgstr "提交應用程式內報告時,跳過網路呼叫。流程仍會進展到成功畫面,讓您可以操作使用者介面,但實際上不會傳送任何內容給安全團隊。"
@@ -29499,7 +29504,7 @@ msgstr "斯洛維尼亞"
#. Developer option label for simulating slow file uploads.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:89
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:99
msgid "Slow attachment upload"
msgstr "附件上傳速度慢"
@@ -29516,28 +29521,28 @@ msgstr "慢一點 — 請稍候再試一次。"
#. Developer option label for simulating slow message edits.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:105
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:85
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:95
msgid "Slow message edit"
msgstr "訊息編輯速度慢"
#. Developer option label for simulating slow message loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:97
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:77
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:87
msgid "Slow message load"
msgstr "訊息載入緩慢"
#. Developer option label for simulating slow message sending.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:101
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:81
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:91
msgid "Slow message send"
msgstr "訊息傳送速度慢"
#. Developer option label for simulating slow profile loading.
#. Developer tools debug menu label. Internal-only surface for developers; translators may keep this terse.
#: src/features/channel/components/channel_header_components/developer_tools/DeveloperOptionLabels.ts:109
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:93
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:103
msgid "Slow profile load"
msgstr "載入個人檔案緩慢"
@@ -30330,7 +30335,7 @@ msgstr "重新開始"
msgid "Start recording"
msgstr "開始錄音"
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:585
#: src/features/search/components/quick_switcher/QuickSwitcherModal.tsx:586
msgid "Start searches with <0>{peoplePrefix}</0> <1>{textChannelPrefix}</1> <2>{voiceChannelPrefix}</2> <3>{communityPrefix}</3> to narrow down results."
msgstr "以 <0>{peoplePrefix}</0>、<1>{textChannelPrefix}</1>、<2>{voiceChannelPrefix}</2> 和 <3>{communityPrefix}</3> 開頭的搜尋,以縮小搜尋範圍。"
@@ -30591,6 +30596,11 @@ msgstr "停止接收訊息和好友邀請."
msgid "Stop Neko from chasing your cursor while keeping it draggable and interactive."
msgstr "停止 Neko 追蹤您的游標,同時仍可拖曳和互動。"
#. Developer / debug surface — keep terse and technical. Tooltip / description for the translation DOM guard kill switch.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:41
msgid "Stop patching Node.prototype insertBefore and removeChild. The app will crash again when a page translator re-parents text nodes React still holds."
msgstr "停止修補 Node.prototype 的 insertBefore 和 removeChild。當頁面翻譯器重新父系化 React 仍持有的文字節點時,應用程式將再次崩潰。"
#. Action that stops ringing the selected participant in a voice call.
#: src/features/ui/action_menu/items/CallMenuItems.tsx:29
msgid "Stop ringing"
@@ -33633,7 +33643,7 @@ msgid "Typing state"
msgstr "輸入狀態"
#. Developer options group for forcing UI component states.
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:61
#: src/features/devtools/components/DeveloperOptionsToggleGroups.ts:71
msgid "UI components"
msgstr "UI 元件"
@@ -0,0 +1,75 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {findTranslationUnsafeTextNodes} from '@app/features/i18n/testing/TranslatorSimulation';
import type {ReactNode} from 'react';
import {flushSync} from 'react-dom';
import {createRoot} from 'react-dom/client';
export interface TranslationCommitOptions {
before: ReactNode;
after: ReactNode;
pipeline: (root: Element) => void;
betweenCommits?: () => void;
inspect?: (host: HTMLElement) => void;
}
export interface TranslationCommitResult {
error: Error | null;
htmlBeforeTranslation: string;
htmlAfterTranslation: string;
htmlAfterCommit: string;
unsafeTextNodesBeforeTranslation: number;
}
export function commitUnderTranslation({
before,
after,
pipeline,
betweenCommits,
inspect,
}: TranslationCommitOptions): TranslationCommitResult {
const host = document.createElement('div');
document.body.appendChild(host);
let error: Error | null = null;
const root = createRoot(host, {
onUncaughtError: (caught) => {
error ??= caught as Error;
},
onCaughtError: (caught) => {
error ??= caught as Error;
},
onRecoverableError: () => {},
});
flushSync(() => root.render(before));
const htmlBeforeTranslation = host.innerHTML;
const unsafeTextNodesBeforeTranslation = findTranslationUnsafeTextNodes(host).length;
pipeline(host);
const htmlAfterTranslation = host.innerHTML;
try {
betweenCommits?.();
} catch (caught) {
error ??= caught as Error;
}
try {
flushSync(() => root.render(after));
} catch (caught) {
error ??= caught as Error;
}
const htmlAfterCommit = host.innerHTML;
inspect?.(host);
try {
root.unmount();
} catch {}
host.remove();
return {error, htmlBeforeTranslation, htmlAfterTranslation, htmlAfterCommit, unsafeTextNodesBeforeTranslation};
}
export function isTranslationDomCrash(error: Error | null): boolean {
if (error == null) {
return false;
}
return (
error.message.includes("Failed to execute 'insertBefore' on 'Node'") ||
error.message.includes("Failed to execute 'removeChild' on 'Node'")
);
}
@@ -0,0 +1,232 @@
// @vitest-environment happy-dom
// SPDX-License-Identifier: AGPL-3.0-or-later
import {commitUnderTranslation, isTranslationDomCrash} from '@app/features/i18n/testing/TranslationCommitHarness';
import {
chromeFaithfulCompoundPipeline,
findTranslationUnsafeTextNodes,
TRANSLATION_MARKER,
TRANSLATOR_PIPELINE_NAMES,
TranslatorPipelines,
} from '@app/features/i18n/testing/TranslatorSimulation';
import {createElement, Fragment, type ReactNode} from 'react';
import {afterEach, describe, expect, it} from 'vitest';
const badge = (on: boolean): ReactNode => (on ? createElement('b', null, '!') : null);
const tail = createElement('i', null, 'x');
const BareLabel = (): ReactNode => 'Hello';
const WrappedLabel = (): ReactNode => createElement('flx-i18n', null, 'Hello');
const wrap = (text: string): ReactNode => createElement('flx-i18n', null, text);
const row = (...children: Array<ReactNode>): ReactNode => createElement('div', null, ...children);
const visibleText = (html: string): string => html.replace(/<[^>]+>/g, '').replaceAll(TRANSLATION_MARKER, '');
interface Scenario {
name: string;
unsafe: (on: boolean) => ReactNode;
fixed: (on: boolean) => ReactNode;
beforeState: boolean;
afterState: boolean;
expectedText: string;
expectedFirstTag: string;
}
const scenarios: Array<Scenario> = [
{
name: 'placement before a bare text sibling',
unsafe: (on) => row(badge(on), 'Hello', tail),
fixed: (on) => row(badge(on), wrap('Hello'), tail),
beforeState: false,
afterState: true,
expectedText: '!Hellox',
expectedFirstTag: 'B',
},
{
name: 'deletion of a bare text sibling',
unsafe: (on) => row(on ? 'Hello' : null, tail),
fixed: (on) => row(on ? wrap('Hello') : null, tail),
beforeState: true,
afterState: false,
expectedText: 'x',
expectedFirstTag: 'I',
},
{
name: 'placement between adjacent text nodes',
unsafe: (on) => row('A', badge(on), 'B', tail),
fixed: (on) => row(wrap('A'), badge(on), wrap('B'), tail),
beforeState: false,
afterState: true,
expectedText: 'A!Bx',
expectedFirstTag: 'FLX-I18N',
},
{
name: 'placement before text inside a fragment',
unsafe: (on) => row(createElement(Fragment, null, badge(on), 'Hello'), tail),
fixed: (on) => row(createElement(Fragment, null, badge(on), wrap('Hello')), tail),
beforeState: false,
afterState: true,
expectedText: '!Hellox',
expectedFirstTag: 'B',
},
{
name: 'placement before a component that returns a bare string',
unsafe: (on) => row(badge(on), createElement(BareLabel), tail),
fixed: (on) => row(badge(on), createElement(WrappedLabel), tail),
beforeState: false,
afterState: true,
expectedText: '!Hellox',
expectedFirstTag: 'B',
},
];
afterEach(() => {
document.body.replaceChildren();
});
for (const pipelineName of TRANSLATOR_PIPELINE_NAMES) {
const pipeline = TranslatorPipelines[pipelineName];
describe(`${pipelineName} pipeline`, () => {
for (const scenario of scenarios) {
it(`throws the production DOM error on ${scenario.name}`, () => {
const result = commitUnderTranslation({
before: scenario.unsafe(scenario.beforeState),
after: scenario.unsafe(scenario.afterState),
pipeline,
});
expect(result.unsafeTextNodesBeforeTranslation).toBeGreaterThan(0);
expect(result.htmlAfterTranslation).not.toBe(result.htmlBeforeTranslation);
expect(isTranslationDomCrash(result.error)).toBe(true);
});
if (pipelineName === 'chromeCompound') {
it(`leaves the compound pipeline no text-and-element parent to rewrite in ${scenario.name}`, () => {
const unsafe = commitUnderTranslation({
before: scenario.unsafe(scenario.beforeState),
after: scenario.unsafe(scenario.beforeState),
pipeline,
});
expect(unsafe.unsafeTextNodesBeforeTranslation).toBeGreaterThan(0);
expect(unsafe.htmlAfterTranslation).not.toBe(unsafe.htmlBeforeTranslation);
const fixed = commitUnderTranslation({
before: scenario.fixed(scenario.beforeState),
after: scenario.fixed(scenario.afterState),
pipeline,
});
expect(fixed.unsafeTextNodesBeforeTranslation).toBe(0);
expect(fixed.htmlAfterTranslation).toBe(fixed.htmlBeforeTranslation);
expect(fixed.error).toBeNull();
});
continue;
}
it(`survives ${scenario.name} once the text is a sole child`, () => {
let firstTag: string | null = null;
let unsafeTextNodes = -1;
const result = commitUnderTranslation({
before: scenario.fixed(scenario.beforeState),
after: scenario.fixed(scenario.afterState),
pipeline,
inspect: (host) => {
firstTag = host.querySelector('div')?.firstElementChild?.tagName ?? null;
unsafeTextNodes = findTranslationUnsafeTextNodes(host).length;
},
});
expect(result.htmlAfterTranslation).not.toBe(result.htmlBeforeTranslation);
expect(result.htmlAfterTranslation).toContain(TRANSLATION_MARKER);
expect(result.error).toBeNull();
expect(result.unsafeTextNodesBeforeTranslation).toBe(0);
expect(unsafeTextNodes).toBe(0);
expect(firstTag).toBe(scenario.expectedFirstTag);
expect(visibleText(result.htmlAfterCommit)).toBe(scenario.expectedText);
});
}
});
}
describe('faithful compound pipeline', () => {
const inlineWrap = (text: string): ReactNode => createElement('span', null, text);
const contentsWrap = (text: string): ReactNode => createElement('flx-i18n', {style: {display: 'contents'}}, text);
it('defeats a bare text sibling', () => {
const result = commitUnderTranslation({
before: row(badge(false), 'Hello', tail),
after: row(badge(true), 'Hello', tail),
pipeline: chromeFaithfulCompoundPipeline,
});
expect(isTranslationDomCrash(result.error)).toBe(true);
});
it('defeats an inline sole-child wrapper', () => {
const result = commitUnderTranslation({
before: row(badge(false), inlineWrap('Hello'), tail),
after: row(badge(true), inlineWrap('Hello'), tail),
pipeline: chromeFaithfulCompoundPipeline,
});
expect(isTranslationDomCrash(result.error)).toBe(true);
});
it('defeats the display:contents wrapper the app ships', () => {
const result = commitUnderTranslation({
before: row(badge(false), contentsWrap('Hello'), tail),
after: row(badge(true), contentsWrap('Hello'), tail),
pipeline: chromeFaithfulCompoundPipeline,
});
expect(isTranslationDomCrash(result.error)).toBe(true);
});
it('defeats a pure element tree that holds no text node of its own', () => {
let reassembledChildren = false;
const pureElementRow = (on: boolean): ReactNode =>
row(badge(on), createElement('i', null, 'a'), createElement('em', null, 'y'));
const result = commitUnderTranslation({
before: pureElementRow(false),
after: pureElementRow(true),
pipeline: (host) => {
const before = Array.from(host.querySelector('div')?.childNodes ?? []);
chromeFaithfulCompoundPipeline(host);
const after = Array.from(host.querySelector('div')?.childNodes ?? []);
reassembledChildren = before.some((node, index) => node !== after[index]);
},
});
expect(reassembledChildren).toBe(true);
expect(result.unsafeTextNodesBeforeTranslation).toBe(0);
expect(isTranslationDomCrash(result.error)).toBe(true);
});
it('is survived only by translate="no"', () => {
const result = commitUnderTranslation({
before: createElement('div', {translate: 'no'}, badge(false), contentsWrap('Hello'), tail),
after: createElement('div', {translate: 'no'}, badge(true), contentsWrap('Hello'), tail),
pipeline: chromeFaithfulCompoundPipeline,
});
expect(result.htmlAfterTranslation).toBe(result.htmlBeforeTranslation);
expect(result.error).toBeNull();
expect(result.htmlAfterCommit).toContain('<b>!</b>');
expect(visibleText(result.htmlAfterCommit)).toBe('!Hellox');
});
});
describe('shapes that were never at risk', () => {
it('does not throw when only elements are siblings', () => {
const result = commitUnderTranslation({
before: row(badge(false), createElement('i', null, 'a')),
after: row(badge(true), createElement('i', null, 'a')),
pipeline: TranslatorPipelines.chromeLegacyFont,
});
expect(result.htmlAfterTranslation).not.toBe(result.htmlBeforeTranslation);
expect(result.error).toBeNull();
});
it('does not throw when a sibling is appended after the text', () => {
const result = commitUnderTranslation({
before: row('Hello', badge(false)),
after: row('Hello', badge(true)),
pipeline: TranslatorPipelines.chromeLegacyFont,
});
expect(result.htmlAfterTranslation).not.toBe(result.htmlBeforeTranslation);
expect(result.error).toBeNull();
});
});
@@ -0,0 +1,259 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
const ELEMENT_NODE = 1;
const TEXT_NODE = 3;
export const TRANSLATION_MARKER = '~';
const NEVER_TRANSLATED_TAGS = new Set([
'SCRIPT',
'STYLE',
'BR',
'WBR',
'CODE',
'KBD',
'MAP',
'OBJECT',
'PARAM',
'RP',
'svg',
]);
const VALUE_ONLY_TAGS = new Set(['INPUT', 'TEXTAREA', 'TITLE']);
const BLOCK_CONTAINER_TAGS = new Set([
'UL',
'OL',
'DL',
'TABLE',
'THEAD',
'TBODY',
'TFOOT',
'TR',
'SELECT',
'OPTGROUP',
'MENU',
'NAV',
'HEADER',
'FOOTER',
'SECTION',
'ARTICLE',
'ASIDE',
'MAIN',
'FORM',
'FIELDSET',
'BODY',
'HTML',
]);
const INLINE_TAGS = new Set([
'A',
'ABBR',
'ACRONYM',
'B',
'BASEFONT',
'BDO',
'BIG',
'CITE',
'DFN',
'EM',
'FONT',
'I',
'LABEL',
'NOBR',
'Q',
'S',
'SMALL',
'SPAN',
'STRIKE',
'STRONG',
'SUB',
'SUP',
'TT',
'U',
'VAR',
]);
function isElement(node: Node): node is Element {
return node.nodeType === ELEMENT_NODE;
}
function isNonBlankText(node: Node): boolean {
return node.nodeType === TEXT_NODE && (node.nodeValue?.trim().length ?? 0) > 0;
}
export function isTranslationOptedOut(element: Element): boolean {
return (
NEVER_TRANSLATED_TAGS.has(element.tagName) ||
element.classList.contains('notranslate') ||
element.classList.contains('skiptranslate') ||
element.getAttribute('translate') === 'no'
);
}
export function isInlineElement(element: Element): boolean {
const view = element.ownerDocument.defaultView;
const display = view?.getComputedStyle ? view.getComputedStyle(element).display : '';
if (display === 'inline' || display === 'contents') {
return true;
}
return display === '' && INLINE_TAGS.has(element.tagName);
}
export function isCompoundRoot(element: Element): boolean {
if (VALUE_ONLY_TAGS.has(element.tagName) || BLOCK_CONTAINER_TAGS.has(element.tagName)) {
return false;
}
if (element.tagName === 'PRE' || element.tagName === 'RUBY') {
return false;
}
if (isInlineElement(element) || isTranslationOptedOut(element)) {
return false;
}
let hasInlineContent = false;
for (const child of Array.from(element.childNodes)) {
if (isElement(child)) {
if (isTranslationOptedOut(child)) {
continue;
}
if (!isInlineElement(child)) {
return false;
}
hasInlineContent = true;
} else if (isNonBlankText(child)) {
hasInlineContent = true;
}
}
return hasInlineContent;
}
function walkTranslatable(element: Element, visit: (element: Element) => boolean): void {
if (isTranslationOptedOut(element)) {
return;
}
if (!visit(element)) {
return;
}
for (const child of Array.from(element.childNodes)) {
if (isElement(child) && child.tagName !== 'FONT') {
walkTranslatable(child, visit);
}
}
}
function translatedTextNode(document: Document, source: Node): Text {
return document.createTextNode(TRANSLATION_MARKER + (source.nodeValue ?? ''));
}
function reassembledFragment(element: Element, children: ReadonlyArray<Node>): DocumentFragment {
const document = element.ownerDocument;
const fragment = document.createDocumentFragment();
for (const child of children) {
fragment.appendChild(child.nodeType === TEXT_NODE ? translatedTextNode(document, child) : child.cloneNode(true));
}
return fragment;
}
function wrapTextNodesInFont(element: Element): void {
const document = element.ownerDocument;
for (const child of Array.from(element.childNodes)) {
if (child.nodeType !== TEXT_NODE || !isNonBlankText(child)) {
continue;
}
const outer = document.createElement('font');
const inner = document.createElement('font');
outer.setAttribute('style', 'vertical-align: inherit;');
inner.setAttribute('style', 'vertical-align: inherit;');
outer.appendChild(inner);
element.insertBefore(outer, child);
child.nodeValue = TRANSLATION_MARKER + (child.nodeValue ?? '');
inner.appendChild(child);
}
}
export function chromeLegacyFontPipeline(root: Element): void {
walkTranslatable(root, (element) => {
wrapTextNodesInFont(element);
return true;
});
}
export function chromeCompoundPipeline(root: Element): void {
walkTranslatable(root, (element) => {
const children = Array.from(element.childNodes);
const hasText = children.some(isNonBlankText);
const hasElement = children.some(isElement);
if (!hasText || !hasElement) {
return true;
}
element.replaceChildren(reassembledFragment(element, children));
return false;
});
}
export function chromeFaithfulCompoundPipeline(root: Element): void {
walkTranslatable(root, (element) => {
if (!isCompoundRoot(element)) {
return true;
}
element.replaceChildren(reassembledFragment(element, Array.from(element.childNodes)));
return false;
});
}
export function chromeRevertPipeline(root: Element): void {
const savedChildren = new Map<Element, Array<Node>>();
walkTranslatable(root, (element) => {
const children = Array.from(element.childNodes);
if (children.some(isNonBlankText)) {
savedChildren.set(element, children);
}
return true;
});
chromeLegacyFontPipeline(root);
for (const [element, children] of savedChildren) {
element.replaceChildren(...children.map((child) => child.cloneNode(true)));
}
}
export function firefoxMergePipeline(root: Element): void {
walkTranslatable(root, (element) => {
const children = Array.from(element.childNodes);
if (children.length === 0 || !children.some(isNonBlankText)) {
return true;
}
while (element.firstChild) {
element.removeChild(element.firstChild);
}
for (const child of children) {
element.appendChild(
child.nodeType === TEXT_NODE ? translatedTextNode(element.ownerDocument, child) : child.cloneNode(true),
);
}
return false;
});
}
export const TranslatorPipelines = {
chromeLegacyFont: chromeLegacyFontPipeline,
chromeCompound: chromeCompoundPipeline,
chromeRevert: chromeRevertPipeline,
firefoxMerge: firefoxMergePipeline,
} as const;
export type TranslatorPipelineName = keyof typeof TranslatorPipelines;
export const TRANSLATOR_PIPELINE_NAMES = Object.keys(TranslatorPipelines) as Array<TranslatorPipelineName>;
export function findTranslationUnsafeTextNodes(root: Element): Array<Text> {
const unsafe: Array<Text> = [];
const visit = (element: Element): void => {
const children = Array.from(element.childNodes);
for (const child of children) {
if (isElement(child)) {
visit(child);
} else if (isNonBlankText(child) && children.length > 1) {
unsafe.push(child as Text);
}
}
};
visit(root);
return unsafe;
}
@@ -0,0 +1,343 @@
// @vitest-environment happy-dom
// SPDX-License-Identifier: AGPL-3.0-or-later
import {commitUnderTranslation, isTranslationDomCrash} from '@app/features/i18n/testing/TranslationCommitHarness';
import {TranslatorPipelines} from '@app/features/i18n/testing/TranslatorSimulation';
import {createElement, type ReactNode} from 'react';
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
type GuardModule = typeof import('@app/features/i18n/utils/TranslationDomGuard');
type DeveloperOptionsModule = typeof import('@app/features/devtools/state/DeveloperOptions');
interface LoadedGuard {
guard: GuardModule;
developerOptions: DeveloperOptionsModule['default'];
}
let loaded: LoadedGuard | null = null;
let originalInsertBefore: typeof Node.prototype.insertBefore;
let originalRemoveChild: typeof Node.prototype.removeChild;
async function loadGuard(options: {electron?: boolean; disabled?: boolean} = {}): Promise<LoadedGuard> {
vi.resetModules();
const {Platform} = await import('@app/features/platform/types/Platform');
Platform.isElectron = options.electron === true;
const developerOptions = (await import('@app/features/devtools/state/DeveloperOptions')).default;
developerOptions.updateOption('disableTranslationDomGuard', options.disabled === true);
const guard = await import('@app/features/i18n/utils/TranslationDomGuard');
loaded = {guard, developerOptions};
return loaded;
}
function translatorDisplacedText(): {container: HTMLElement; text: Text} {
const container = document.createElement('div');
container.setAttribute('data-flx', 'guard-fixture');
const outer = document.createElement('font');
const inner = document.createElement('font');
const text = document.createTextNode('Hello');
inner.appendChild(text);
outer.appendChild(inner);
container.appendChild(outer);
document.body.appendChild(container);
return {container, text};
}
function detachedTranslatedText(): {container: HTMLElement; text: Text} {
const container = document.createElement('div');
const outer = document.createElement('font');
const inner = document.createElement('font');
const text = document.createTextNode('Hello');
inner.appendChild(text);
outer.appendChild(inner);
container.appendChild(outer);
document.body.appendChild(container);
document.documentElement.classList.add('translated-ltr');
outer.replaceChildren();
inner.replaceChildren();
return {container, text};
}
function unrelatedSubtreeText(): {container: HTMLElement; other: HTMLElement; text: Text} {
const container = document.createElement('div');
const other = document.createElement('div');
other.id = 'other';
const font = document.createElement('font');
const text = document.createTextNode('Hello');
font.appendChild(text);
other.appendChild(font);
document.body.append(container, other);
return {container, other, text};
}
function foreignParentText(): {container: HTMLElement; text: Text} {
const container = document.createElement('div');
const elsewhere = document.createElement('div');
const text = document.createTextNode('Hello');
elsewhere.appendChild(text);
document.body.append(container, elsewhere);
return {container, text};
}
const badge = (on: boolean): ReactNode => (on ? createElement('b', null, '!') : null);
const tail = createElement('i', null, 'x');
const unsafeRow = (on: boolean): ReactNode =>
createElement('div', null, badge(on), 'Hello', createElement('i', null, 'x'));
beforeEach(() => {
originalInsertBefore = Node.prototype.insertBefore;
originalRemoveChild = Node.prototype.removeChild;
});
afterEach(() => {
loaded?.guard.uninstallTranslationDomGuard();
loaded?.developerOptions.updateOption('disableTranslationDomGuard', false);
loaded = null;
Node.prototype.insertBefore = originalInsertBefore;
Node.prototype.removeChild = originalRemoveChild;
document.body.replaceChildren();
document.documentElement.className = '';
vi.restoreAllMocks();
});
describe('installation', () => {
it('patches both prototype methods and restores them by identity on uninstall', async () => {
const {guard} = await loadGuard();
guard.installTranslationDomGuard();
expect(Node.prototype.insertBefore).not.toBe(originalInsertBefore);
expect(Node.prototype.removeChild).not.toBe(originalRemoveChild);
expect(guard.getTranslationDomGuardStats().installed).toBe(true);
guard.installTranslationDomGuard();
expect(guard.uninstallTranslationDomGuard()).toBe(true);
expect(Node.prototype.insertBefore).toBe(originalInsertBefore);
expect(Node.prototype.removeChild).toBe(originalRemoveChild);
expect(guard.uninstallTranslationDomGuard()).toBe(false);
expect(guard.getTranslationDomGuardStats().installed).toBe(false);
});
it('never installs in Electron', async () => {
const {guard} = await loadGuard({electron: true});
guard.installTranslationDomGuard();
expect(Node.prototype.insertBefore).toBe(originalInsertBefore);
expect(guard.getTranslationDomGuardStats().installed).toBe(false);
});
it('never installs when the Electron native context is unavailable', async () => {
vi.spyOn(navigator, 'userAgent', 'get').mockReturnValue(
'Mozilla/5.0 (Macintosh) fluxer/1.0.0 Chrome/140.0.0.0 Electron/38.2.1 Safari/537.36',
);
const {guard} = await loadGuard({electron: false});
guard.installTranslationDomGuard();
expect(Node.prototype.insertBefore).toBe(originalInsertBefore);
expect(Node.prototype.removeChild).toBe(originalRemoveChild);
expect(guard.getTranslationDomGuardStats().installed).toBe(false);
});
it('never patches while the kill switch is already set', async () => {
const {guard} = await loadGuard({disabled: true});
guard.installTranslationDomGuard();
expect(Node.prototype.insertBefore).toBe(originalInsertBefore);
expect(guard.getTranslationDomGuardStats().installed).toBe(false);
});
it('uninstalls and reinstalls live when the kill switch is toggled', async () => {
const {guard, developerOptions} = await loadGuard();
guard.installTranslationDomGuard();
expect(guard.getTranslationDomGuardStats().installed).toBe(true);
developerOptions.updateOption('disableTranslationDomGuard', true);
expect(Node.prototype.insertBefore).toBe(originalInsertBefore);
expect(guard.getTranslationDomGuardStats().installed).toBe(false);
developerOptions.updateOption('disableTranslationDomGuard', false);
expect(Node.prototype.insertBefore).not.toBe(originalInsertBefore);
expect(guard.getTranslationDomGuardStats().installed).toBe(true);
});
it('exposes stats and a live uninstall on the debug object', async () => {
const {guard} = await loadGuard();
guard.installTranslationDomGuard();
const debug = window.__FLUXER_DEBUG__;
const getStats = debug?.getTranslationDomGuardStats as
| (() => ReturnType<GuardModule['getTranslationDomGuardStats']>)
| undefined;
expect(getStats?.().installed).toBe(true);
expect(debug?.uninstallTranslationDomGuard?.()).toBe(true);
expect(Node.prototype.insertBefore).toBe(originalInsertBefore);
});
});
describe('reporting', () => {
it('counts and logs every repaired insertBefore', async () => {
const {guard} = await loadGuard();
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {});
guard.installTranslationDomGuard();
const {container, text} = translatorDisplacedText();
expect(() => container.insertBefore(document.createElement('b'), text)).not.toThrow();
const stats = guard.getTranslationDomGuardStats();
expect(stats.insertBefore).toBe(1);
expect(stats.removeChild).toBe(0);
expect(stats.declined).toBe(0);
expect(stats.firstFireAt).not.toBeNull();
expect(stats.lastPath).toBe('guard-fixture');
const logged = consoleError.mock.calls.flat().join(' ');
expect(logged).toContain('TranslationDomGuard');
expect(logged).toContain('insertBefore');
});
it('counts and logs every repaired removeChild', async () => {
const {guard} = await loadGuard();
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {});
guard.installTranslationDomGuard();
const {container, text} = translatorDisplacedText();
expect(() => container.removeChild(text)).not.toThrow();
const stats = guard.getTranslationDomGuardStats();
expect(stats.removeChild).toBe(1);
expect(stats.insertBefore).toBe(0);
expect(text.parentNode).toBeNull();
expect(container.innerHTML).toBe('');
expect(consoleError.mock.calls.flat().join(' ')).toContain('removeChild');
});
it('keeps counting after it stops logging', async () => {
const {guard} = await loadGuard();
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {});
guard.installTranslationDomGuard();
for (let attempt = 0; attempt < 5; attempt += 1) {
const {container, text} = translatorDisplacedText();
container.insertBefore(document.createElement('b'), text);
}
expect(guard.getTranslationDomGuardStats().insertBefore).toBe(5);
expect(consoleError).toHaveBeenCalledTimes(3);
});
it('leaves calls on the original path alone', async () => {
const {guard} = await loadGuard();
guard.installTranslationDomGuard();
const parent = document.createElement('div');
const child = document.createElement('span');
parent.appendChild(child);
parent.insertBefore(document.createElement('b'), child);
parent.removeChild(child);
expect(parent.innerHTML).toBe('<b></b>');
const stats = guard.getTranslationDomGuardStats();
expect(stats.insertBefore).toBe(0);
expect(stats.removeChild).toBe(0);
expect(stats.declined).toBe(0);
});
it('declines to repair a displacement no translator caused', async () => {
const {guard} = await loadGuard();
guard.installTranslationDomGuard();
const {container, text} = foreignParentText();
expect(() => container.insertBefore(document.createElement('b'), text)).toThrow(
/Failed to execute 'insertBefore' on 'Node'/,
);
expect(() => container.removeChild(text)).toThrow(/Failed to execute 'removeChild' on 'Node'/);
const stats = guard.getTranslationDomGuardStats();
expect(stats.insertBefore).toBe(0);
expect(stats.removeChild).toBe(0);
expect(stats.declined).toBe(2);
});
});
describe('the guard behind the structural fix', () => {
it('turns the production crash into a reported fire', async () => {
const {guard} = await loadGuard();
vi.spyOn(console, 'error').mockImplementation(() => {});
const unguarded = commitUnderTranslation({
before: unsafeRow(false),
after: unsafeRow(true),
pipeline: TranslatorPipelines.chromeLegacyFont,
});
expect(isTranslationDomCrash(unguarded.error)).toBe(true);
guard.installTranslationDomGuard();
const guarded = commitUnderTranslation({
before: unsafeRow(false),
after: unsafeRow(true),
pipeline: TranslatorPipelines.chromeLegacyFont,
});
expect(guarded.error).toBeNull();
expect(guard.getTranslationDomGuardStats().insertBefore).toBeGreaterThan(0);
});
it('repairs the placement at the position the translator displaced', async () => {
const {guard} = await loadGuard();
vi.spyOn(console, 'error').mockImplementation(() => {});
guard.installTranslationDomGuard();
let firstTag: string | null = null;
const result = commitUnderTranslation({
before: unsafeRow(false),
after: unsafeRow(true),
pipeline: TranslatorPipelines.chromeLegacyFont,
inspect: (host) => {
firstTag = host.querySelector('div')?.firstElementChild?.tagName ?? null;
},
});
expect(result.error).toBeNull();
expect(firstTag).toBe('B');
expect(result.htmlAfterCommit.replace(/<[^>]+>/g, '')).toBe('!~Hello~x');
});
it('leaves no empty husk behind after a repaired deletion', async () => {
const {guard} = await loadGuard();
vi.spyOn(console, 'error').mockImplementation(() => {});
guard.installTranslationDomGuard();
let html = '';
let fontCount = -1;
let emptyFontCount = -1;
const result = commitUnderTranslation({
before: createElement('div', null, 'Hello', tail),
after: createElement('div', null, null, tail),
pipeline: TranslatorPipelines.chromeLegacyFont,
inspect: (host) => {
html = host.innerHTML;
const fonts = Array.from(host.querySelectorAll('font'));
fontCount = fonts.length;
emptyFontCount = fonts.filter((font) => font.childNodes.length === 0).length;
},
});
expect(result.error).toBeNull();
expect(guard.getTranslationDomGuardStats().removeChild).toBeGreaterThan(0);
expect(html.replace(/<[^>]+>/g, '')).toBe('~x');
expect(html).not.toContain('Hello');
expect(emptyFontCount).toBe(0);
expect(fontCount).toBe(2);
});
it('no-ops a removeChild of a node the translator already detached', async () => {
const {guard} = await loadGuard();
const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {});
guard.installTranslationDomGuard();
const {container, text} = detachedTranslatedText();
expect(text.parentNode).toBeNull();
expect(container.removeChild(text)).toBe(text);
expect(text.parentNode).toBeNull();
expect(guard.getTranslationDomGuardStats().removeChild).toBe(1);
expect(consoleError.mock.calls.flat().join(' ')).toContain('removeChild');
});
it('does not unwind husks outside the container the removal was addressed to', async () => {
const {guard} = await loadGuard();
vi.spyOn(console, 'error').mockImplementation(() => {});
guard.installTranslationDomGuard();
const {container, other, text} = unrelatedSubtreeText();
expect(container.removeChild(text)).toBe(text);
expect(text.parentNode).toBeNull();
expect(other.parentNode).toBe(document.body);
expect(document.getElementById('other')).toBe(other);
expect(other.innerHTML).toBe('<font></font>');
expect(guard.getTranslationDomGuardStats().removeChild).toBe(1);
});
});
@@ -0,0 +1,183 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import DeveloperOptions from '@app/features/devtools/state/DeveloperOptions';
import {Platform} from '@app/features/platform/types/Platform';
import {Logger} from '@app/features/platform/utils/AppLogger';
import {getFluxerDebugObject} from '@app/features/platform/utils/FluxerDebugGlobal';
import {hasUnavailableElectronNativeContext} from '@app/features/ui/utils/NativeUtils';
import {reaction} from 'mobx';
const logger = new Logger('TranslationDomGuard');
const MAX_LOGGED_FIRES_PER_KIND = 3;
const TRANSLATED_ROOT_CLASS_PATTERN = /(^|\s)translated-(ltr|rtl)(\s|$)/;
const MICROSOFT_TRANSLATOR_ATTRIBUTES = ['_msttexthash', '_msthash'];
type GuardedMethod = 'insertBefore' | 'removeChild';
export interface TranslationDomGuardStats {
installed: boolean;
insertBefore: number;
removeChild: number;
declined: number;
firstFireAt: number | null;
lastPath: string | null;
}
const stats: TranslationDomGuardStats = {
installed: false,
insertBefore: 0,
removeChild: 0,
declined: 0,
firstFireAt: null,
lastPath: null,
};
const loggedByKind: Record<GuardedMethod, number> = {insertBefore: 0, removeChild: 0};
let restorePrototypes: (() => void) | null = null;
let stopWatchingKillSwitch: (() => void) | null = null;
function describe(node: Node | null): string | null {
const element = node instanceof Element ? node : (node?.parentElement ?? null);
if (!element) {
return null;
}
return element.closest('[data-flx]')?.getAttribute('data-flx') ?? element.tagName.toLowerCase();
}
function isTranslatorDisplacement(subject: Node, container: Node): boolean {
let node: Node | null = subject;
while (node != null && node !== container) {
if (node instanceof Element) {
const element = node;
if (element.tagName === 'FONT') {
return true;
}
if (MICROSOFT_TRANSLATOR_ATTRIBUTES.some((attribute) => element.hasAttribute(attribute))) {
return true;
}
}
node = node.parentNode;
}
const root = subject.ownerDocument?.documentElement;
return root != null && TRANSLATED_ROOT_CLASS_PATTERN.test(root.className);
}
function recordFire(kind: GuardedMethod, container: Node, subject: Node): void {
stats[kind] += 1;
stats.firstFireAt ??= Date.now();
const path = describe(container) ?? describe(subject) ?? 'unknown';
stats.lastPath = path;
if (loggedByKind[kind] < MAX_LOGGED_FIRES_PER_KIND) {
loggedByKind[kind] += 1;
logger.error(
`Repaired a ${kind} against a node a page translator re-parented at ${path}. A translation-unsafe text node is still rendered there; fix the component instead of relying on this guard.`,
);
}
}
function patchPrototypes(): void {
if (restorePrototypes != null) {
return;
}
const originalInsertBefore = Node.prototype.insertBefore;
const originalRemoveChild = Node.prototype.removeChild;
const guardedInsertBefore = function insertBefore<T extends Node>(this: Node, node: T, child: Node | null): T {
if (child == null || child.parentNode === this) {
return originalInsertBefore.call(this, node, child) as T;
}
if (!isTranslatorDisplacement(child, this)) {
stats.declined += 1;
return originalInsertBefore.call(this, node, child) as T;
}
recordFire('insertBefore', this, child);
let anchor: Node | null = child;
while (anchor != null && anchor.parentNode !== this) {
anchor = anchor.parentNode;
}
return originalInsertBefore.call(this, node, anchor) as T;
};
const guardedRemoveChild = function removeChild<T extends Node>(this: Node, child: T): T {
const actualParent = child.parentNode;
if (actualParent === this) {
return originalRemoveChild.call(this, child) as T;
}
if (!isTranslatorDisplacement(child, this)) {
stats.declined += 1;
return originalRemoveChild.call(this, child) as T;
}
recordFire('removeChild', this, child);
if (actualParent == null) {
return child;
}
const removed = originalRemoveChild.call(actualParent, child) as T;
if (!(this instanceof Node) || !this.contains(actualParent)) {
return removed;
}
let husk: Node | null = actualParent;
while (husk != null && husk !== this && husk.childNodes.length === 0) {
const parent: Node | null = husk.parentNode;
if (parent == null) {
break;
}
originalRemoveChild.call(parent, husk);
husk = parent;
}
return removed;
};
Node.prototype.insertBefore = guardedInsertBefore;
Node.prototype.removeChild = guardedRemoveChild;
restorePrototypes = () => {
if (Node.prototype.insertBefore !== guardedInsertBefore || Node.prototype.removeChild !== guardedRemoveChild) {
logger.warn('Node prototype methods were replaced after install; restoring the originals anyway.');
}
Node.prototype.insertBefore = originalInsertBefore;
Node.prototype.removeChild = originalRemoveChild;
};
stats.installed = true;
}
function unpatchPrototypes(): void {
if (restorePrototypes == null) {
return;
}
restorePrototypes();
restorePrototypes = null;
stats.installed = false;
}
export function getTranslationDomGuardStats(): TranslationDomGuardStats {
return {...stats};
}
export function uninstallTranslationDomGuard(): boolean {
const wasInstalled = restorePrototypes != null;
stopWatchingKillSwitch?.();
stopWatchingKillSwitch = null;
unpatchPrototypes();
return wasInstalled;
}
export function installTranslationDomGuard(): void {
if (stopWatchingKillSwitch != null || restorePrototypes != null) {
return;
}
if (typeof Node === 'undefined' || Platform.isElectron || hasUnavailableElectronNativeContext()) {
return;
}
stopWatchingKillSwitch = reaction(
() => DeveloperOptions.disableTranslationDomGuard,
(disabled) => {
if (disabled) {
unpatchPrototypes();
logger.info('Translation DOM guard disabled by developer option.');
} else {
patchPrototypes();
}
},
{fireImmediately: true},
);
const debug = getFluxerDebugObject();
if (debug) {
debug.getTranslationDomGuardStats = getTranslationDomGuardStats;
debug.uninstallTranslationDomGuard = uninstallTranslationDomGuard;
}
}
@@ -14,7 +14,9 @@ export function MentionLabel({icon, children}: MentionLabelProps): React.ReactEl
return (
<>
{icon}
{icon == null ? null : ICON_LABEL_JOINER}
{icon == null ? null : (
<span data-flx="messaging.markdown.renderers.mention-label.joiner">{ICON_LABEL_JOINER}</span>
)}
<span className={mentionRendererStyles.label} data-flx="messaging.markdown.renderers.mention-label.span">
{children}
</span>
@@ -123,7 +123,7 @@ export const MentionRenderer = observer(function MentionRenderer({
const genericMention = (
<span key={id} className={markupStyles.mention} data-flx="messaging.markdown.renderers.mention-renderer.span">
<MentionLabel data-flx="messaging.markdown.renderers.mention-renderer.mention-label">
@{name || kind.id}
{`@${name || kind.id}`}
</MentionLabel>
</span>
);
@@ -138,7 +138,7 @@ export const MentionRenderer = observer(function MentionRenderer({
data-flx="messaging.markdown.renderers.mention-renderer.span--2"
>
<MentionLabel data-flx="messaging.markdown.renderers.mention-renderer.mention-label--2">
@{name || user.displayName}
{`@${name || user.displayName}`}
</MentionLabel>
</span>
);
@@ -166,7 +166,7 @@ export const MentionRenderer = observer(function MentionRenderer({
data-flx="messaging.markdown.renderers.mention-renderer.button.stop-propagation"
>
<MentionLabel data-flx="messaging.markdown.renderers.mention-renderer.mention-label--3">
@{name || user.displayName}
{`@${name || user.displayName}`}
</MentionLabel>
</span>
</FocusRing>
@@ -247,7 +247,9 @@ export const MacPermissionsModal: React.FC<MacPermissionsModalProps> = observer(
data-flx="permissions.system.mac-permissions-modal.check-icon"
/>
)}
{i18n._(statusDescriptorForStatus(status))}
<flx-i18n data-flx="permissions.system.mac-permissions-modal.flx-i18n">
{i18n._(statusDescriptorForStatus(status))}
</flx-i18n>
</div>
{hasAction && (
<div className={styles.action} data-flx="permissions.mac-permissions-modal.action">
@@ -2,6 +2,7 @@
import i18n from '@app/app/I18n';
import Config from '@app/features/app/config/Config';
import {getTranslationDomGuardStats} from '@app/features/i18n/utils/TranslationDomGuard';
import {Logger} from '@app/features/platform/utils/AppLogger';
import {getFluxerDebugObject} from '@app/features/platform/utils/FluxerDebugGlobal';
import {getElectronAPI, isDesktop} from '@app/features/ui/utils/NativeUtils';
@@ -290,6 +291,15 @@ export async function getClientInfo(): Promise<ClientInfo> {
return {...base, ...getOsContextFromInfo(desktopInfo), ...getDesktopContextFromInfo(desktopInfo)};
}
function formatTranslationDomGuardFires(): string {
const guard = getTranslationDomGuardStats();
const fires = guard.insertBefore + guard.removeChild;
if (fires === 0) {
return '';
}
return `Translation guard ${fires} (${guard.lastPath ?? 'unknown'})`;
}
export function formatClientBuildInfo(info: ClientInfo, options: {unknownLabel?: string} = {}): string {
const releaseChannel = formatReleaseChannelLabel(Config.PUBLIC_RELEASE_CHANNEL);
const buildVersion = Config.PUBLIC_BUILD_VERSION || 'dev';
@@ -314,6 +324,7 @@ export function formatClientBuildInfo(info: ClientInfo, options: {unknownLabel?:
info.desktopChromeVersion ? `Chrome ${info.desktopChromeVersion}` : '',
info.desktopNodeVersion ? `Node ${info.desktopNodeVersion}` : '',
i18n.locale ? `Locale ${i18n.locale}` : '',
formatTranslationDomGuardFires(),
];
return parts.filter(Boolean).join(', ');
}
@@ -165,6 +165,7 @@ const ResultRow = observer(
onConfirm(executableResult);
};
const iconRendered = renderIcon(executableResult, isHighlight, styles.optionIcon, styles.optionIconHighlight);
const iconContent: React.ReactElement = iconRendered.content;
const key = getViewContext(executableResult)
? `${executableResult.type}-${getViewContext(executableResult)}-${executableResult.id}`
: `${executableResult.type}-${executableResult.id}`;
@@ -194,14 +195,14 @@ const ResultRow = observer(
<div className={styles.optionContent} data-flx="search.quick-switcher-bottom-sheet.result-row.option-content">
{iconRendered.type === 'avatar' ? (
<div className={styles.avatar} data-flx="search.quick-switcher-bottom-sheet.result-row.avatar">
{iconRendered.content}
{iconContent}
</div>
) : iconRendered.type === 'guild' ? (
<div className={styles.guildIcon} data-flx="search.quick-switcher-bottom-sheet.result-row.guild-icon">
{iconRendered.content}
{iconContent}
</div>
) : (
iconRendered.content
iconContent
)}
<div
className={clsx(styles.optionText, isHighlight && styles.optionHighlight)}
@@ -181,6 +181,7 @@ const ResultRow = observer(
quickStyles.optionIcon,
quickStyles.optionIconHighlight,
);
const iconContent: React.ReactElement = iconRendered.content;
const key = getViewContext(executableResult)
? `${executableResult.type}-${getViewContext(executableResult)}-${executableResult.id}`
: `${executableResult.type}-${executableResult.id}`;
@@ -215,17 +216,17 @@ const ResultRow = observer(
className={quickStyles.avatar}
data-flx="search.quick-switcher.quick-switcher-modal.result-row.div--3"
>
{iconRendered.content}
{iconContent}
</div>
) : iconRendered.type === 'guild' ? (
<div
className={quickStyles.guildIcon}
data-flx="search.quick-switcher.quick-switcher-modal.result-row.div--4"
>
{iconRendered.content}
{iconContent}
</div>
) : (
iconRendered.content
iconContent
)}
<div
className={clsx(quickStyles.optionText, isHighlight && quickStyles.optionHighlight)}
@@ -26,6 +26,10 @@
display: block;
}
flx-i18n {
display: contents;
}
html,
:host {
line-height: 1.5;
@@ -653,8 +653,7 @@ export const EntranceSoundSection: React.FC = observer(() => {
{entry.name}
</span>
<span className={styles.soundDuration} data-flx="user.entrance-sound-section.sound-duration">
{(entry.durationMs / 1000).toFixed(1)}s
{isActiveHere ? ` · ${i18n._(ACTIVE_BADGE_DESCRIPTOR)}` : ''}
{`${(entry.durationMs / 1000).toFixed(1)}s${isActiveHere ? ` · ${i18n._(ACTIVE_BADGE_DESCRIPTOR)}` : ''}`}
</span>
</div>
</div>
@@ -341,7 +341,9 @@ export const EntranceSoundTrimmerModal: React.FC<EntranceSoundTrimmerModalProps>
) : (
<PlayIcon size={14} weight="fill" data-flx="voice.entrance-sound-trimmer-modal.play-icon" />
)}
{isPlaying ? i18n._(PAUSE_SELECTION_DESCRIPTOR) : i18n._(PLAY_SELECTION_DESCRIPTOR)}
<flx-i18n data-flx="voice.entrance-sound-trimmer-modal.flx-i18n">
{isPlaying ? i18n._(PAUSE_SELECTION_DESCRIPTOR) : i18n._(PLAY_SELECTION_DESCRIPTOR)}
</flx-i18n>
</span>
</Button>
</div>
@@ -592,7 +592,9 @@ export const VoiceMessageComposerModal: React.FC<VoiceMessageComposerModalProps>
data-flx="voice.voice-message-composer-modal.play-icon"
/>
)}
{isPlaying ? i18n._(PAUSE_DESCRIPTOR) : i18n._(PLAY_DESCRIPTOR)}
<flx-i18n data-flx="voice.voice-message-composer-modal.flx-i18n">
{isPlaying ? i18n._(PAUSE_DESCRIPTOR) : i18n._(PLAY_DESCRIPTOR)}
</flx-i18n>
</span>
</Button>
<Button
@@ -384,9 +384,7 @@ export function InlineAudioPlayer({
</span>
</p>
<p className={styles.fileMeta} data-flx="voice.media-player.inline-audio-player.file-meta">
{fileSizeString}
{fileSizeString && displayDuration > 0 && ' · '}
{displayDuration > 0 && formatDuration(displayDuration)}
{`${fileSizeString}${fileSizeString && displayDuration > 0 ? ' · ' : ''}${displayDuration > 0 ? formatDuration(displayDuration) : ''}`}
</p>
</div>
</div>
@@ -423,8 +423,7 @@ export const MobileVideoViewer = observer(function MobileVideoViewer({
aria-hidden="true"
data-flx="voice.mobile-video-viewer.seek-feedback"
>
{seekFeedback.direction === 'backward' ? '-' : '+'}
{seekFeedback.seconds}s
{`${seekFeedback.direction === 'backward' ? '-' : '+'}${seekFeedback.seconds}s`}
</motion.div>
)}
</AnimatePresence>
+9 -7
View File
@@ -19,7 +19,9 @@ import {AppErrorBoundary} from '@app/features/app/components/AppErrorBoundary';
import {BootstrapErrorScreen} from '@app/features/app/components/BootstrapErrorScreen';
import {ErrorFallback} from '@app/features/app/components/ErrorFallback';
import {installSelfXssNotice} from '@app/features/devtools/utils/SelfXssNotice';
import {AppI18nProvider} from '@app/features/i18n/components/AppI18nProvider';
import {installLocaleSwitchWatchdog} from '@app/features/i18n/utils/LocaleSwitchWatchdog';
import {installTranslationDomGuard} from '@app/features/i18n/utils/TranslationDomGuard';
import {installScrollRestoration} from '@app/features/platform/components/router/ScrollRestoration';
import {Logger} from '@app/features/platform/utils/AppLogger';
import {
@@ -32,7 +34,6 @@ import {loadLazyModule} from '@app/features/platform/utils/LazyModuleLoader';
import {scheduleNonLatinScriptFaces} from '@app/features/theme/fonts/ScriptFontLoader';
import {installVoiceSubscriptionDebugApi} from '@app/features/voice/diagnostics/VoiceSubscriptionDebugApi';
import {i18n} from '@lingui/core';
import {I18nProvider} from '@lingui/react';
import {configure} from 'mobx';
import type {ReactNode} from 'react';
import ReactDOM from 'react-dom/client';
@@ -60,12 +61,13 @@ function createRoot(): ReactDOM.Root {
}
function mountRoot(content: ReactNode, dataFlxScope: string): void {
installTranslationDomGuard();
createRoot().render(
<AppErrorBoundary
fallback={(error) => (
<I18nProvider i18n={i18n}>
<AppI18nProvider i18n={i18n}>
<ErrorFallback error={error ?? undefined} data-flx={`${dataFlxScope}.error-fallback`} />
</I18nProvider>
</AppI18nProvider>
)}
data-flx={`${dataFlxScope}.app-error-boundary`}
>
@@ -93,9 +95,9 @@ async function bootstrapThemeStudio(): Promise<void> {
await AccountManager.bootstrap();
setupHttp();
mountRoot(
<I18nProvider i18n={i18n}>
<AppI18nProvider i18n={i18n}>
<ThemeStudioStandaloneApp data-flx="index.render-theme-studio.theme-studio-standalone-app" />
</I18nProvider>,
</AppI18nProvider>,
'index.render-theme-studio',
);
}
@@ -166,8 +168,8 @@ bootstrap().catch((error: unknown) => {
const normalized = error instanceof Error ? error : new Error(String(error));
logger.error('Failed to bootstrap app:', normalized);
createRoot().render(
<I18nProvider i18n={i18n}>
<AppI18nProvider i18n={i18n}>
<BootstrapErrorScreen error={normalized} data-flx="index.bootstrap-error-screen" />
</I18nProvider>,
</AppI18nProvider>,
);
});
@@ -126,7 +126,7 @@ A key past its expiry is never returned.
<RouteHeader method="POST" path="/v1/admin/api-keys" />
Creates a key and returns an [Admin API key creation](#admin-api-key-creation-object) object that has the raw credential, with HTTP 200 rather than 201. Requires `admin_api_key:manage`.
Creates a key and returns an [Admin API key creation](#admin-api-key-creation-object) object that has the raw credential, with HTTP 200, not 201. Requires `admin_api_key:manage`.
The acting credential must already have every value in `acls`, unless it has `*`. The key authenticates immediately, and its effective permission is the intersection described under [Admin API key object](#admin-api-key-object).
@@ -142,7 +142,7 @@ The acting credential must already have every value in `acls`, unless it has `*`
<sup>2</sup> The stored expiry is the request instant plus this many days. Omitting the field creates a key that does not expire
<sup>3</sup> An empty array produces a key that satisfies no operation. Fluxer compares `acls` against the presenting key's own ACLs, so a key cannot mint a broader key
<sup>3</sup> An empty array produces a key that satisfies no operation. Fluxer compares `acls` against the presenting key's own ACLs, so a key cannot issue a broader key
Fluxer rejects the request with 403 `MISSING_ACL` on the first ungrantable value. A request that names several ungrantable ACLs reports only that one.
@@ -221,7 +221,7 @@ An update never rotates the credential, and no field on this route changes the e
| 403<sup>1</sup> | [error response](/admin-api/#error-response) | Credential type is refused, `admin_api_key:manage` is absent, or `acls` names a value the acting credential does not have |
| 404 | [error response](/admin-api/#error-response) | `ADMIN_API_KEY_NOT_FOUND`, which also covers an expired key and a key created by another account |
<sup>1</sup> The ownership check runs before the ACL grant check, so a key belonging to another account returns 404 rather than 403
<sup>1</sup> The ownership check runs before the ACL grant check, so a key belonging to another account returns 404, not 403
### Rate limit
@@ -8,10 +8,10 @@ import RouteHeader from '@/components/RouteHeader.astro';
An application is an OAuth2 client, and it can own one bot account. These routes report its ownership, bot state, redirect configuration, and non-secret credential metadata. [Transfer application ownership](#transfer-application-ownership) is the only one that writes.
The records are the same ones the public [Applications](/http-api/applications/) resource serves. Creation, deletion, renaming, bot provisioning, redirect URI editing, and credential rotation stay there.
These records are the same ones the public [Applications](/http-api/applications/) resource serves. Creation, deletion, renaming, bot creation, redirect URI editing, and credential rotation stay there.
:::note[Admin operations report credential metadata only]
The Admin application object reports whether a client secret or bot token hash is stored, when it was provisioned, and the non-secret bot token preview.
The Admin application object reports whether a client secret or bot token hash is stored, when it was created, and the non-secret bot token preview.
:::
## Admin application object
@@ -38,8 +38,8 @@ The Admin view of one application. An application and its bot account share one
| has_client_secret | boolean | Whether a client secret hash is stored |
| has_bot_token | boolean | Whether a bot token hash is stored |
| bot_token_preview | ?string | The non-secret trailing preview of the bot token, or null when none is stored |
| bot_token_created_at | ?ISO8601 timestamp | When the bot token was provisioned, or null when none is stored |
| client_secret_created_at<sup>4</sup> | ?ISO8601 timestamp | When the client secret was provisioned |
| bot_token_created_at | ?ISO8601 timestamp | When the bot token was created, or null when none is stored |
| client_secret_created_at<sup>4</sup> | ?ISO8601 timestamp | When the client secret was created |
| version<sup>5</sup> | integer | The optimistic locking version of the stored record (0-2147483647) |
<sup>1</sup> Null when the owner account can no longer be read
@@ -83,8 +83,7 @@ The Admin view of one application. An application and its bot account share one
Fluxer serves one synthetic application for its own Admin OAuth2 client. The application has no bot, so every `bot_` field is null or false and `has_bot_token` is false. It also reports these values:
- `id` is the fixed constant `1234567890123456789`.
- `name` is `Fluxer Admin`.
- `owner_user_id` is the system account `0`.
- `name` is `Fluxer Admin`, and `owner_user_id` is the system account `0`.
- `oauth2_redirect_uris` has one entry, the configured Admin endpoint followed by `/oauth2_callback`.
- `has_client_secret` is true on every response that has it, and `client_secret_created_at` is null.
- `version` is always 1.
@@ -173,7 +173,7 @@ Returns one [archive](#archive-object) object. Requires an ACL covering the subj
| Status | Body | Condition |
| --- | --- | --- |
| 200 | response body | A lookup was performed, whether or not it resolved |
| 200 | response body | A lookup was done, whether or not it resolved |
| 403 | [error response](/admin-api/#error-response) | `MISSING_ACL` without an ACL covering the subject type |
### Side effects
@@ -191,7 +191,7 @@ The read issues no download grant.
Issues a temporary download URL for a completed archive. Returns an [archive download](#archive-download-object) object on success. Requires an ACL covering the subject type.
:::caution[The grant is an unauthenticated bearer URL]
The URL has its own signature and works for seven days for anyone who holds it. No operation revokes it, and it is bound to no Admin account. Each repeat of the operation issues a further independent grant.
The URL has its own signature and works for seven days for anyone who holds it. It is bound to no Admin account, and no operation revokes it. Each repeat of the operation issues a further independent grant.
:::
### Path parameters
@@ -213,7 +213,7 @@ The URL has its own signature and works for seven days for anyone who holds it.
<sup>1</sup> `HARVEST_FAILED` while `failed_at` is set, `HARVEST_NOT_READY` while the archive has no completion time or no stored object, and `HARVEST_EXPIRED` once `expires_at` has passed, tested in that order
<sup>2</sup> The archive record stops being readable at `expires_at`, so an archive past its expiry answers `UNKNOWN_HARVEST` rather than `HARVEST_EXPIRED`
<sup>2</sup> The archive record stops being readable at `expires_at`, so an archive past its expiry answers `UNKNOWN_HARVEST`, not `HARVEST_EXPIRED`
### Side effects
@@ -8,7 +8,7 @@ import RouteHeader from '@/components/RouteHeader.astro';
A blocklist is a stored set of values Fluxer checks account access and user content against. Nine lists exist. Each has one canonical value form, one matching rule, and its own stored fields. Fluxer canonicalises every value before storage and before every check.
Each list has its own three [Admin ACLs](/admin-api/#acl-registry). A read needs the selected list's `check` permission, an addition or an update needs its `add` permission, and a removal needs its `remove` permission, so an account holding `ban:ip:add` writes to the `ip` list and to no other. Every write records the audit reason on the [Admin audit entries](/admin-api/#admin-audit-entry-object) it produces. The reads record nothing.
Each list has its own three [Admin ACLs](/admin-api/#acl-registry). A read needs the selected list's `check` permission, an addition or an update needs its `add` permission, and a removal needs its `remove` permission. An account holding `ban:ip:add` writes to the `ip` list and to no other. Every write records the audit reason on the [Admin audit entries](/admin-api/#admin-audit-entry-object) it produces. The reads record nothing.
Fluxer builds each permission name from `ban:`, the list name with each hyphen written as an underscore, and the verb, so the `url-domain` list uses `ban:url_domain:check`, `ban:url_domain:add`, and `ban:url_domain:remove`. The `email-domain-suspicious` list is the one exception and uses `suspicious_email_domain:check`, `suspicious_email_domain:add`, and `suspicious_email_domain:remove`.
@@ -18,19 +18,19 @@ Fluxer synchronises disposable email domains from external feeds every six hours
## Blocklist types
`ip`, `email`, and `email-domain-suspicious` gate account access and registration. `phrase`, `url`, `url-domain`, `file-sha`, `avatar-hash`, and `profile-substring` gate what an account may post, link, upload, or display. `email` and `email-domain-suspicious` store nothing but the value, while an `ip` row also stores a ban kind, a reason, an expiry, and its creation time.
`ip`, `email`, and `email-domain-suspicious` gate account access and registration. `phrase`, `url`, `url-domain`, `file-sha`, `avatar-hash`, and `profile-substring` gate what an account may post, link, upload, or display. `email` and `email-domain-suspicious` store nothing but the value. An `ip` row also stores a ban kind, a reason, an expiry, and its creation time.
| Value | Description |
| --- | --- |
| ip<sup>1</sup> | IPv4 addresses, IPv6 addresses, and CIDR ranges denied service |
| email<sup>2</sup> | Exact email addresses barred from registration and from being set on an account |
| email<sup>2</sup> | Exact email addresses blocked from registration and from being set on an account |
| email-domain-suspicious<sup>2</sup> <sup>3</sup> | Email domains that allow registration and require the new account to verify a phone number first |
| phrase<sup>4</sup> | Phrases barred from content |
| url<sup>5</sup> | Absolute `http` and `https` URLs barred from being posted |
| url-domain<sup>6</sup> | Domains barred from being linked |
| file-sha<sup>7</sup> | SHA-256 hashes barred from being uploaded |
| avatar-hash<sup>8</sup> | Avatar hashes barred from being set |
| profile-substring<sup>4</sup> <sup>9</sup> | Substrings barred from one named profile field |
| phrase<sup>4</sup> | Phrases blocked from content |
| url<sup>5</sup> | Absolute `http` and `https` URLs blocked from being posted |
| url-domain<sup>6</sup> | Domains blocked from being linked |
| file-sha<sup>7</sup> | SHA-256 hashes blocked from being uploaded |
| avatar-hash<sup>8</sup> | Avatar hashes blocked from being set |
| profile-substring<sup>4</sup> <sup>9</sup> | Substrings blocked from one named profile field |
<sup>1</sup> Fluxer refuses an address with 400 `IP_BAN_DECLINED` when it is on the instance exemption list, or when the high blast-radius carrier network check matches, and records both refusals in the Admin audit log
@@ -38,7 +38,7 @@ Fluxer synchronises disposable email domains from external feeds every six hours
<sup>3</sup> Fluxer never shows the list to the account holder, who sees only the verified-phone gate. A domain must match `^[a-zA-Z0-9][a-zA-Z0-9\-.]*\.[a-zA-Z]{2,}$`
<sup>4</sup> Canonicalised by NFKC normalisation, removal of control, format and variation-selector characters, lowercasing, and trimming. Match time also normalises inserted whitespace, punctuation, and compatibility glyphs
<sup>4</sup> Canonicalised by NFKC normalisation, removal of control, format and variation-selector characters, lowercasing, and trimming. Match time also normalises inserted whitespace, punctuation, and compatibility characters
<sup>5</sup> Canonicalised before storage. A value Fluxer cannot canonicalise returns 400 `INVALID_FORM_BODY` naming `url`
@@ -46,11 +46,11 @@ Fluxer synchronises disposable email domains from external feeds every six hours
<sup>7</sup> Stored as lowercase hexadecimal
<sup>8</sup> Stored as the 8-character hash with any `a_` animation prefix stripped and the remainder lowercased, so the animated and static forms of one avatar are the same row
<sup>8</sup> Stored as the 8-character hash with any `a_` animation prefix stripped and the rest lowercased, so the animated and static forms of one avatar are the same row
<sup>9</sup> The only scoped list. Scope and substring together identify a row, so the same substring can be stored once per [scope](#profile-substring-scopes)
The fields a list accepts differ from list to list, and so does the operation set. Read the `fields` array and the three `supports_` flags of a [blocklist object](#blocklist-object) before writing to a list.
The fields and the operations a list accepts differ from list to list. Read the `fields` array and the three `supports_` flags of a [blocklist object](#blocklist-object) before writing to a list.
## Content blocklist categories
@@ -92,14 +92,14 @@ Every `url`, `url-domain`, `file-sha`, and `avatar-hash` row has a severity. A r
## Blocklist object
One entry of the blocklist catalogue returned by [List blocklists](#list-blocklists). The catalogue is a constant of the release and reports no counts.
One entry of the blocklist catalogue returned by [List blocklists](#list-blocklists). The catalogue is fixed in each release and reports no counts.
### Structure
| Field | Type | Description |
| --- | --- | --- |
| list_type | string | The [blocklist type](#blocklist-types) this entry describes |
| description | string | The human-readable summary of what the blocklist matches and how it matches |
| description | string | The human-readable summary of what the blocklist matches and how |
| value_field<sup>1</sup> | string | The request body field that has the value when adding |
| fields<sup>2</sup> | array[string] | The field names rows of this blocklist accept beyond the value (at most 8) |
| scoped<sup>3</sup> | boolean | Whether rows are scoped to a profile field and every operation has a scope |
@@ -160,7 +160,7 @@ One stored row of one blocklist. Every field is present on every entry, and a fi
<sup>2</sup> Non-null only on `profile-substring`
<sup>3</sup> Non-null only on `url`, `url-domain`, `file-sha`, and `avatar-hash`, where `category` and `severity` are always populated
<sup>3</sup> Non-null only on `url`, `url-domain`, `file-sha`, and `avatar-hash`, where `category` and `severity` are always set
<sup>4</sup> Non-null only on `url`, `url-domain`, `file-sha`, `avatar-hash`, and `profile-substring`
@@ -170,7 +170,7 @@ One stored row of one blocklist. Every field is present on every entry, and a fi
<sup>7</sup> Non-null only on `ip`. An address added through [Add blocklist entry](#add-blocklist-entry) is written as a permanent ban, so it reads back with the reason `platform_admin_enforcement` and a null `expires_at`
<sup>8</sup> Both null on `email`, `email-domain-suspicious`, and `phrase`, which store nothing but the value. `created_by_user_id` is additionally null on `ip`
<sup>8</sup> Both null on `email`, `email-domain-suspicious`, and `phrase`, which store nothing but the value. `created_by_user_id` is also null on `ip`
:::note[The audit entry records the accepted reason]
An `avatar-hash` or `profile-substring` write accepts `reason`, and both lists then report `reason` as null in this object.
@@ -236,7 +236,7 @@ The body of [Add blocklist entry](#add-blocklist-entry) is a union resolved by t
Each field is a string, except `hashes` and `substrings`, which are `array[string]`.
`avatar-hash` deduplicates the array after canonicalisation. `profile-substring` does not, so a substring repeated in one request is written once and audited once per occurrence, and a value that canonicalises to an empty string is skipped.
`avatar-hash` deduplicates the array after canonicalisation. `profile-substring` does not, so a substring repeated in one request is written once and audited once per occurrence. A `profile-substring` value that canonicalises to an empty string is skipped.
### Additional fields
@@ -267,7 +267,7 @@ Each field is a string, except `hashes` and `substrings`, which are `array[strin
<RouteHeader method="GET" path="/v1/admin/blocklists" />
Returns one [blocklist](#blocklist-object) object for every blocklist this instance maintains. Requires any one of the nine `check` permissions.
Returns one [blocklist](#blocklist-object) object for every blocklist this instance keeps. Requires any one of the nine `check` permissions.
The response is identical for every Admin.
@@ -373,7 +373,7 @@ The response has no body, so it does not report the canonical form that was stor
The written rows take effect for subsequent blocklist decisions. For every list except `email` and `email-domain-suspicious`, other nodes see the rows after a short propagation delay. No Gateway Dispatch is emitted.
One [Admin audit entry](/admin-api/#admin-audit-entry-object) is recorded per written value, with that value in its metadata. Fluxer records an entry for a refused `ip` too, under the action `ban_ip_skipped_exempt` or `ban_ip_skipped_cgnat`, before it returns the 400.
Fluxer records one [Admin audit entry](/admin-api/#admin-audit-entry-object) per written value, with that value in its metadata. It records an entry for a refused `ip` too, under the action `ban_ip_skipped_exempt` or `ban_ip_skipped_cgnat`, before it returns the 400.
### Rate limit
@@ -383,7 +383,7 @@ One [Admin audit entry](/admin-api/#admin-audit-entry-object) is recorded per wr
<RouteHeader method="PUT" path="/v1/admin/blocklists/{list_type}/entries" auditReason />
Enqueues a background job that adds up to 10000 SHA-256 hashes to the `file-sha` blocklist and returns the job ID immediately. Requires `ban:file_sha:add`.
Queues a background job that adds up to 10000 SHA-256 hashes to the `file-sha` blocklist and returns the job ID immediately. Requires `ban:file_sha:add`.
Only `file-sha` accepts this operation, reported as `supports_bulk_create` by [List blocklists](#list-blocklists). Every other list type returns 400 `INVALID_FORM_BODY`.
@@ -416,11 +416,11 @@ Only `file-sha` accepts this operation, reported as `supports_bulk_create` by [L
The operation returns before any hash is written. Read progress and the final counts from [Get job](/admin-api/jobs/#get-job), and stop the job with [Cancel job](/admin-api/jobs/#cancel-job). The job reports progress every 50 hashes and finishes with a summary naming how many were written and how many failed.
Every hash is written with the category `manual`, the severity `2`, and a null content type, source URL, and note. The bulk path accepts no metadata, so a hash that needs any of those goes through [Add blocklist entry](#add-blocklist-entry) or takes a later [Update blocklist entry](#update-blocklist-entry).
Every hash is written with the category `manual`, the severity `2`, and a null content type, source URL, and note. The bulk path accepts no metadata, so a hash that needs any of those goes through [Add blocklist entry](#add-blocklist-entry) or a later [Update blocklist entry](#update-blocklist-entry).
### Side effects
The job lowercases each hash and writes it as an upsert. It publishes one refresh notice after the last hash, so a job cancelled part way leaves the hashes it wrote invisible to other nodes until a later write or the twelve-hourly feed sync publishes one. No Gateway Dispatch is emitted.
The job lowercases each hash and writes it as an upsert. It publishes one refresh notice after the last hash, so a job cancelled part way leaves the hashes it wrote invisible to other nodes. They become visible on a later write, or on the feed sync that runs every twelve hours. No Gateway Dispatch is emitted.
The job records one aggregate [Admin audit entry](/admin-api/#admin-audit-entry-object) under the action `bulk_ban_file_shas`, with the submitted, successful, and failed counts. A cancelled job records none.
@@ -465,7 +465,7 @@ The body is selected by `list_type`.
The operation is idempotent and reports no counts. A value with no stored row still returns 204. Read the list before and after to tell a removal from a no-op.
`avatar-hash` deduplicates the array after canonicalisation. `profile-substring` does not, so a substring repeated in one request is removed once and audited once per occurrence, and a value that canonicalises to an empty string is skipped.
`avatar-hash` deduplicates the array after canonicalisation. `profile-substring` does not, so a substring repeated in one request is removed once and audited once per occurrence. A `profile-substring` value that canonicalises to an empty string is skipped.
### Side effects
@@ -507,7 +507,7 @@ Reports whether one value is currently blocked by the selected blocklist and ret
| ip<sup>3</sup> <sup>4</sup> | The address itself, any stored CIDR range containing it, and any stored address the instance treats as the same origin |
| email | Exact match on the lowercased address |
| email-domain-suspicious<sup>5</sup> | Exact match on the lowercased domain |
| phrase | Normalised phrase matching, so an obfuscated form of a stored phrase still reads as blocked |
| phrase | Normalised phrase matching, so a disguised form of a stored phrase still reads as blocked |
| url<sup>6</sup> | Exact match on the canonicalised URL |
| url-domain | Exact match on the lowercased hostname |
| file-sha | Exact match on the lowercased hexadecimal digest |
@@ -520,7 +520,7 @@ Reports whether one value is currently blocked by the selected blocklist and ret
<sup>5</sup> A domain the account policy exempts from contact-domain reputation reads as not blocked even while a row exists
<sup>6</sup> This check does not consult the `url-domain` list, so a URL blocked in practice by a stored domain reads as not blocked. Check the hostname separately
<sup>6</sup> This check does not read the `url-domain` list, so a URL that a stored domain blocks reads as not blocked. Check the hostname separately
### Response
@@ -567,7 +567,7 @@ The body is the creation shape of the selected blocklist with the value field re
| reason?<sup>5</sup> | string | The reason (1-1024 characters) |
| notes?<sup>6</sup> | string | The internal note (1-1024 characters) |
<sup>1</sup> Required by `profile-substring`. This operation takes no query parameters, so the scope travels in the body, and every other blocklist ignores it there
<sup>1</sup> Required by `profile-substring`. This operation takes no query parameters, so the scope goes in the body, and every other blocklist ignores it there
<sup>2</sup> Accepted only by `url`, `url-domain`, `file-sha`, and `avatar-hash`
@@ -600,7 +600,7 @@ Changing the `scope` of a `profile-substring` row writes a second row under the
The written fields take effect for subsequent matches, and the write publishes a refresh notice. No Gateway Dispatch is emitted.
One [Admin audit entry](/admin-api/#admin-audit-entry-object) is recorded under the same action an add records, with the canonical value. The audit entry has no previous values of the changed fields.
The write records one [Admin audit entry](/admin-api/#admin-audit-entry-object) under the same action an add records, with the canonical value but no previous values of the changed fields.
### Rate limit
@@ -638,13 +638,13 @@ Removes one row from the selected blocklist. Returns 204 with an empty body. Req
On the `url` blocklist, an `entry_value` Fluxer cannot canonicalise returns 400 `INVALID_FORM_BODY` naming `url` in the `errors` array.
The operation is idempotent. A value with no stored row returns 204 and still records an Admin audit entry, so this operation never returns 404 and never reports whether anything was removed.
Removal is idempotent. A value with no stored row returns 204 and still records an Admin audit entry, so this operation never returns 404 and never reports whether anything was removed.
### Side effects
The removed row stops affecting subsequent blocklist decisions, and other nodes stop applying it after a short propagation delay for every list except `email` and `email-domain-suspicious`. A value can remain blocked by another matching row, such as a single address covered by a stored CIDR range. No Gateway Dispatch is emitted.
The removed row stops affecting subsequent blocklist decisions. For every list except `email` and `email-domain-suspicious`, other nodes stop applying it after a short propagation delay. A value can remain blocked by another matching row, such as a single address covered by a stored CIDR range. No Gateway Dispatch is emitted.
One [Admin audit entry](/admin-api/#admin-audit-entry-object) is recorded with the canonical value in its metadata.
The removal records one [Admin audit entry](/admin-api/#admin-audit-entry-object), with the canonical value in its metadata.
### Rate limit
@@ -666,7 +666,7 @@ This is a shortcut over [Add blocklist entry](#add-blocklist-entry) for blocking
### JSON body
Both fields are optional. An empty body and `{}` are both valid requests.
Both fields are optional, so an empty body and `{}` are both valid requests.
| Field | Type | Description |
| --- | --- | --- |
@@ -698,7 +698,7 @@ Every account using that image shares the same truncated prefix, so blocking the
The hash takes effect for subsequent avatar uploads, and the write publishes a refresh notice. No Gateway Dispatch is emitted.
One [Admin audit entry](/admin-api/#admin-audit-entry-object) is recorded under the action `ban_avatar_hash`, with the stored hash and the supplied reason.
Fluxer records one [Admin audit entry](/admin-api/#admin-audit-entry-object) under the action `ban_avatar_hash`, with the stored hash and the supplied reason.
### Rate limit
@@ -22,7 +22,7 @@ A bulk job creation has the identifier of the queued job.
| --- | --- | --- |
| job_id<sup>1</sup> | snowflake | The job that applies the requested operation, readable through [Get job](/admin-api/jobs/#get-job) |
<sup>1</sup> Fluxer writes the ledger row before it enqueues the job, so the identifier in a 200 is always readable
<sup>1</sup> Fluxer writes the ledger row before it queues the job, so the identifier in a 200 is always readable
### Example
@@ -140,11 +140,11 @@ The `task` discriminator selects one of these structures. Every ID array has an
| 403 | [error response](/admin-api/#error-response) | `MISSING_ACL` without the ACL selected by `task` |
| 500<sup>1</sup> | [error response](/admin-api/#error-response) | The job could not be queued |
<sup>1</sup> A full queue rejects the job, which surfaces as `INTERNAL_SERVER_ERROR`
<sup>1</sup> A full queue rejects the job and the request returns `INTERNAL_SERVER_ERROR`
### Side effects
This operation writes no Admin audit entry. It records one [Jobs](/admin-api/jobs/) ledger row naming the acting Admin as the requester and storing the audit reason, then enqueues the worker task. When the ledger row cannot be written, Fluxer returns 500 `INTERNAL_SERVER_ERROR` and enqueues nothing.
This operation writes no Admin audit entry. It records one [Jobs](/admin-api/jobs/) ledger row naming the acting Admin as the requester and storing the audit reason, then queues the worker task. When the ledger row cannot be written, Fluxer returns 500 `INTERNAL_SERVER_ERROR` and queues nothing.
The worker processes entities in the submitted order, one at a time. A cancellation check runs before each entity, so [Cancel job](/admin-api/jobs/#cancel-job) stops the run between two entities and settles the job as `cancelled`. Every entity changed before cancellation or failure stays changed. An entity that fails, including an ID that resolves to nothing, is counted as failed and skipped, and the run continues through the rest of the set.
@@ -163,7 +163,7 @@ Every task writes one summary Admin audit entry when it finishes, with the actio
`schedule_user_deletion` marks each account deleted. The task stores the reason code, public reason, and audit reason on the account, and reschedules its pending deletion. It dispatches [User Update](/gateway/events/#user-update), writes one `schedule_deletion` entry for each account, and emails the account holder when an address is on file. A failed email is logged and does not fail the entity.
:::caution[Bulk scheduling is narrower than the single-account operation]
The worker does not terminate sessions, cancel or refund a Stripe subscription, ban the account's identifiers, or resolve pending reports. [Schedule user deletion](/admin-api/users/#schedule-user-deletion) performs each of those for one account, the last two only when the reason is not `USER_REQUESTED`.
The worker does not terminate sessions, cancel or refund a Stripe subscription, ban the account's identifiers, or resolve pending reports. [Schedule user deletion](/admin-api/users/#schedule-user-deletion) does each of those for one account, the last two only when the reason is not `USER_REQUESTED`.
:::
### Rate limit
@@ -92,7 +92,7 @@ An approved listing. It has every field of the [Admin pending application object
## Discovery application object
This is the [discovery application object](/http-api/discovery/#discovery-application-object) of the public Discovery resource. Every write on this page answers with it, so a client re-reads the listing after a write to render the enriched guild fields.
This is the [discovery application object](/http-api/discovery/#discovery-application-object) of the public Discovery resource. Every write on this page answers with it, so a client re-reads the listing after a write to render the enriched guild fields. No response on this page exposes the Admin that approved, rejected, or removed the application.
### Structure
@@ -137,10 +137,6 @@ This is the [discovery application object](/http-api/discovery/#discovery-applic
}
```
## Reviewer identity
The application records the Admin that approved, rejected, or removed it. No response on this page exposes that value.
## Discovery categories
Each release ships a fixed category set, and no Admin operation changes it. See [discovery categories](/http-api/discovery/#discovery-categories) for the set.
@@ -309,7 +305,7 @@ Files every named guild under one [discovery category](/http-api/discovery/#disc
| updated | integer | Number of distinct guilds that were moved |
| failed_guild_ids<sup>1</sup> | array[snowflake] | Distinct guilds that were not moved |
<sup>1</sup> A guild lands here when it holds no application, when its application is rejected or removed, or when the write failed. The response does not say which, so retry the guild through [Update discovery listing](#update-discovery-listing) to read the error
<sup>1</sup> A guild lands here when it holds no application, when its application is rejected or removed, or when the write failed. The response does not say which. Retry the guild through [Update discovery listing](#update-discovery-listing) to read the error
### Response
@@ -397,7 +393,7 @@ Removes an approved listing from discovery, strips the guild's discoverable feat
### JSON body
The operation takes a required body even though it is a DELETE, so a request without one fails body validation.
The body is required even though this is a DELETE, so a request without one fails body validation.
| Field | Type | Description |
| --- | --- | --- |
@@ -110,7 +110,7 @@ One entry for each live guild process the read sampled. Every value except `nsfw
| guild_name<sup>1</sup> | string | The guild name the process holds in memory |
| guild_icon | ?string | The icon hash the guild process holds in memory, or null when it has none |
| nsfw_level<sup>2</sup> | ?integer | The [NSFW level](/http-api/guilds/#nsfw-levels) resolved from stored guild data, or null when the guild could not be resolved |
| memory<sup>3</sup> | string | The bytes the guild process occupies, as a decimal string |
| memory<sup>3</sup> | string | The bytes the guild process uses, as a decimal string |
| member_count | integer | The number of members the guild process holds |
| session_count | integer | The number of sessions subscribed to the guild process |
| presence_count | integer | The number of presences the guild process tracks |
@@ -6,7 +6,7 @@ description: Guild search, detail, mutation, deletion, membership, expressions,
import RouteHeader from '@/components/RouteHeader.astro';
Admin guild operations read and change the guilds the public [Guilds](/http-api/guilds/) resource exposes. Most of them need no membership in the guild and no guild permission, and [Remove guild member](#remove-guild-member) and [Ban guild member](#ban-guild-member) are the exceptions.
Admin guild operations read and change the guilds the public [Guilds](/http-api/guilds/) resource exposes. Most need no membership in the guild and no guild permission. [Remove guild member](#remove-guild-member) and [Ban guild member](#ban-guild-member) are the exceptions.
[Archives](/admin-api/archives/) owns the archive lifecycle and the downloads.
@@ -18,7 +18,7 @@ Reads use the `admin:lookup` bucket, which permits 200 requests per minute for e
## Admin guild object
The compact guild representation returned by [List guilds](#list-guilds) and by [List user guilds](/admin-api/users/#list-user-guilds). It has no channel or role state.
The compact guild representation returned by [List guilds](#list-guilds) and by [List user guilds](/admin-api/users/#list-user-guilds), with no channel or role state.
### Structure
@@ -146,7 +146,7 @@ The full guild representation returned by [Get guild](#get-guild). It embeds eve
## Admin guild update object
The guild state [Update guild](#update-guild) reads back after applying the request. It has no channel, role, or owner identity state.
The guild state [Update guild](#update-guild) reads back after applying the request, with no channel, role, or owner identity state.
### Structure
@@ -163,7 +163,7 @@ The guild state [Update guild](#update-guild) reads back after applying the requ
## Admin guild expression object
One custom emoji or one sticker of a guild, together with a resolvable media URL. The two listings return the same shape.
A custom emoji or a sticker of a guild, with a resolvable media URL. The two listings return the same shape.
### Structure
@@ -292,7 +292,7 @@ Returns one guild with its channels and roles. Requires `guild:lookup`.
| Status | Body | Condition |
| --- | --- | --- |
| 200 | response body | A lookup was performed, whether or not it resolved |
| 200 | response body | A lookup was done, whether or not it resolved |
### Rate limit
@@ -308,11 +308,11 @@ This is the only way to change the owner of a guild without acting as its curren
Fluxer evaluates authorisation in two stages and reads the body between them. The account first needs at least one of `guild:update:name`, `guild:update:settings`, `guild:update:features`, `guild:update:vanity`, and `guild:transfer_ownership`. The validated body then selects a set of ACLs and every one of them is required, so a body with `name` and `nsfw` needs both `guild:update:name` and `guild:update:settings`. The wildcard satisfies both stages.
- `guild:update:name` is selected by `name`.
- `guild:update:settings` is selected by `fields`, `verification_level`, `mfa_level`, `nsfw_level`, `nsfw`, `content_warning_level`, `content_warning_text`, `explicit_content_filter`, `default_message_notifications`, and `disabled_operations`.
- `guild:update:features` is selected by `add_features` and `remove_features`.
- `guild:update:vanity` is selected by `vanity_url_code`.
- `guild:transfer_ownership` is selected by `new_owner_id`.
- `name` selects `guild:update:name`.
- `fields`, `verification_level`, `mfa_level`, `nsfw_level`, `nsfw`, `content_warning_level`, `content_warning_text`, `explicit_content_filter`, `default_message_notifications`, and `disabled_operations` select `guild:update:settings`.
- `add_features` and `remove_features` select `guild:update:features`.
- `vanity_url_code` selects `guild:update:vanity`.
- `new_owner_id` selects `guild:transfer_ownership`.
A body with no field at all selects nothing, so an empty patch applies no change.
@@ -379,7 +379,7 @@ The groups run in a fixed order: image clears, settings, features, name, custom
### Side effects
Clearing an image field queues the previous stored object for deletion. Replacing the custom invite code deletes the invite record holding the previous code and creates one for the new code, while sending null deletes the previous record without creating another.
Clearing an image field queues the previous stored object for deletion. Replacing the custom invite code deletes the invite record holding the previous code and creates one for the new code. Sending null deletes the previous record without creating another.
Supplying `add_features` or `remove_features` reconciles an existing discovery application. The application is approved when [DISCOVERABLE](/http-api/guilds/#guild-features) becomes present and it is not already approved, and it is marked removed when `DISCOVERABLE` becomes absent and it was approved. A guild that has never applied for [discovery](/admin-api/discovery/) gains no application.
@@ -517,9 +517,9 @@ Only the Admin ACL is evaluated.
### Side effects
Fluxer creates the membership with the Admin force-add join source and restores a communication timeout still in force from a previous membership. The guild ban list is not consulted, so a banned user can be admitted. The suspicious activity phone gate does not run. The per-user guild limit and the guild member limit are still enforced.
Fluxer creates the membership with the Admin force-add join source and restores a communication timeout still in force from a previous membership. The guild ban list is not checked, so a banned user can be admitted. The suspicious activity phone gate does not run. The per-user guild limit and the guild member limit are still enforced.
[Guild Member Add](/gateway/events/#guild-member-add) fires to the guild, the user's sessions are joined to the guild on the main Gateway, and the member enters guild member search when the guild has an indexed member set. The ordinary join system message is created, and with it a [Message Create](/gateway/events/#message-create) Dispatch, unless the guild sets `SUPPRESS_JOIN_NOTIFICATIONS` or has no usable system channel. A bot target also records a `BOT_ADD` entry in the guild's own [audit log](/http-api/guild-audit-logs/#audit-actions).
[Guild Member Add](/gateway/events/#guild-member-add) fires to the guild, and the user's sessions are joined to the guild on the main Gateway. The member enters guild member search when the guild has an indexed member set. The ordinary join system message is created, and with it a [Message Create](/gateway/events/#message-create) Dispatch, unless the guild sets `SUPPRESS_JOIN_NOTIFICATIONS` or has no usable system channel. A bot target also records a `BOT_ADD` entry in the guild's own [audit log](/http-api/guild-audit-logs/#audit-actions).
A user who is already a member keeps their existing membership. No membership is created, no counter moves, and no Dispatch is emitted. The Admin audit entry is still written.
@@ -561,7 +561,7 @@ The acting account must see the guild, hold [KICK_MEMBERS](/http-api/permissions
Fluxer snapshots the membership metadata, including any communication timeout, so that a later rejoin restores it. It then deletes the membership, decreases the recorded member count by one, and detaches the user from the guild on the main Gateway. The member is removed from guild member search when the guild has an indexed member set.
[Guild Member Remove](/gateway/events/#guild-member-remove) fires to the guild. A `MEMBER_KICK` entry is written to the guild's own [audit log](/http-api/guild-audit-logs/#audit-actions). The entry names the acting Admin account and has the audit reason, and the write fires [Guild Audit Log Entry Create](/gateway/events/#guild-audit-log-entry-create) to sessions holding [VIEW_AUDIT_LOG](/http-api/permissions/).
[Guild Member Remove](/gateway/events/#guild-member-remove) fires to the guild. A `MEMBER_KICK` entry is written to the guild's own [audit log](/http-api/guild-audit-logs/#audit-actions). The entry names the acting Admin account and has the audit reason. The write fires [Guild Audit Log Entry Create](/gateway/events/#guild-audit-log-entry-create) to sessions holding [VIEW_AUDIT_LOG](/http-api/permissions/).
The removal creates no ban record, so the user can rejoin.
@@ -611,18 +611,18 @@ The acting account must hold [BAN_MEMBERS](/http-api/permissions/) in the guild,
| 404 | [error response](/admin-api/#error-response) | `UNKNOWN_MEMBER` because the target is the acting account, or `UNKNOWN_USER` because the user does not exist |
:::caution[The ban can also delete messages]
The ban removes current membership and blocks later joins until its expiry or explicit removal. Messages inside the resolved deletion window are permanently deleted and are not restored when the ban ends.
A ban removes current membership and blocks later joins until its expiry or explicit removal. Messages inside the resolved deletion window are permanently deleted and are not restored when the ban ends.
:::
### Side effects
The ban record names the acting Admin account as moderator and has the expiry, the reason, the target's last known IP address unless that address is on the ban exemption list, and the target's lowercased email address. While the ban exists the guild also blocks that address and that email, as described by [Guild moderation](/http-api/guild-moderation/#guild-ban-object), and removing the ban releases both.
The ban record names the acting Admin account as moderator. It has the expiry, the reason, the target's lowercased email address, and the target's last known IP address unless that address is on the ban exemption list. While the ban exists the guild also blocks that address and that email, as described by [Guild moderation](/http-api/guild-moderation/#guild-ban-object), and removing the ban releases both.
A positive deletion window queues a background job that deletes the target's matching messages after the response, which fires [Message Delete Bulk](/gateway/events/#message-delete-bulk) as deletion progresses.
[Guild Ban Add](/gateway/events/#guild-ban-add) fires to the guild. A target who was a member is then removed, which decreases the recorded member count, detaches the user from the guild on the main Gateway, removes the member from guild member search, and fires [Guild Member Remove](/gateway/events/#guild-member-remove). The ban path snapshots no membership metadata, so a communication timeout in force at the moment of the ban is not restored on a later rejoin. This operation writes no entry to the guild's own audit log, and it emits no [Guild Audit Log Entry Create](/gateway/events/#guild-audit-log-entry-create).
[Guild Ban Add](/gateway/events/#guild-ban-add) fires to the guild. A target who was a member is then removed. That decreases the recorded member count, detaches the user from the guild on the main Gateway, removes the member from guild member search, and fires [Guild Member Remove](/gateway/events/#guild-member-remove). The ban path snapshots no membership metadata, so a communication timeout in force at the moment of the ban is not restored on a later rejoin. This operation writes no entry to the guild's own audit log, and it emits no [Guild Audit Log Entry Create](/gateway/events/#guild-audit-log-entry-create).
One Admin audit entry is recorded with the action `ban_member`, the target type `guild_member`, the banned user as the target, and the guild ID, user ID, `delete_message_days` value, and any supplied reason and duration in the metadata.
One Admin audit entry is recorded with the action `ban_member`, the target type `guild_member`, and the banned user as the target. Its metadata has the guild ID, the user ID, the `delete_message_days` value, and any supplied reason and duration.
### Rate limit
@@ -751,7 +751,7 @@ Every entry in `processed` records its own Admin audit entry, with the numeric I
Returns one page of the guild's own in-app audit log, without requiring guild membership or [VIEW_AUDIT_LOG](/http-api/permissions/). Requires `guild:audit_log:view`.
The page has the same shape and the same semantics as the public [List guild audit logs](/http-api/guild-audit-logs/#list-guild-audit-logs) operation, including the message deletion consolidation that operation performs.
The page has the same shape and semantics as the public [List guild audit logs](/http-api/guild-audit-logs/#list-guild-audit-logs) operation, including its message deletion consolidation.
### Path parameters
@@ -16,12 +16,12 @@ Fluxer evaluates the credential in a fixed order.
1. A request that resolves no account is refused with 401 `UNAUTHORIZED`.
2. A credential presented with the `Bot` scheme is refused with 401 `UNAUTHORIZED`.
3. An access token issued to any OAuth2 application other than the built-in Admin application is refused with 403 `ACCESS_DENIED`.
3. Any access token issued to an OAuth2 application other than the built-in Admin application is refused with 403 `ACCESS_DENIED`.
4. An account holding neither `admin:authenticate` nor the wildcard `*` is refused with 403 `MISSING_PERMISSIONS`.
5. An account that clears both gates but satisfies none of the [ACLs](#acl-evaluation) the operation names is refused with 403 `MISSING_ACL`.
:::caution[A denial names no requirement]
The `MISSING_ACL` body is a fixed sentence that has no ACL name and no requirement list, so a response never discloses which requirement failed.
The `MISSING_ACL` body is a fixed sentence with no ACL name and no requirement list, so a denial never says which requirement failed.
:::
No Admin operation declares an OAuth2 scope, an MFA requirement, or a sudo requirement, so none consumes the `X-Fluxer-Sudo-Mode-JWT` header. An accepted credential together with the required ACLs is the complete authorisation boundary.
@@ -60,7 +60,7 @@ A body with none of those fields resolves to no ACL at all and applies no change
- `add_guild_members` maps to `bulk:add:guild_members`.
- `schedule_user_deletion` maps to `bulk:delete:users`.
Fluxer bounds every grant separately. [Set user ACLs](/admin-api/users/#set-user-acls) and [Create Admin API key](/admin-api/api-keys/#create-admin-api-key) both refuse to write an ACL the acting Admin does not itself hold, with 403 `MISSING_ACL`. A wildcard holder is exempt. Set user ACLs additionally refuses the acting Admin's own account with 403 `ACCESS_DENIED`, and it resolves the target before the bound is evaluated, so an unknown ID fails first with 404 `UNKNOWN_USER`.
Fluxer bounds every grant separately. [Set user ACLs](/admin-api/users/#set-user-acls) and [Create Admin API key](/admin-api/api-keys/#create-admin-api-key) both refuse to write an ACL the acting Admin does not itself hold, with 403 `MISSING_ACL`. A wildcard holder is exempt. Set user ACLs also refuses the acting Admin's own account with 403 `ACCESS_DENIED`, and it resolves the target before the bound is evaluated, so an unknown ID fails first with 404 `UNKNOWN_USER`.
[Set user ACLs](/admin-api/users/#set-user-acls), [Create Admin API key](/admin-api/api-keys/#create-admin-api-key), and [Update Admin API key](/admin-api/api-keys/#update-admin-api-key) each accept at most 111 ACLs and validate every entry against the registry, so a value outside it returns 400 `INVALID_FORM_BODY`.
@@ -116,7 +116,7 @@ An entry stores an acting Admin, a target type, a target ID, an action name, an
<sup>7</sup> Keys are 1 to 256 characters and values are 0 to 4,000 characters. The keys an operation records are stated by that operation
Fluxer populates the `related_` maps from the acting Admin, from the resolved target, and from the metadata. A metadata key contributes when its value is a decimal integer and its name is `user_id`, `guild_id`, `channel_id`, `target_user_id`, or `admin_user_id`, or ends in `_user_id`, `_guild_id`, or `_channel_id`. An identifier that no longer resolves is omitted from the map.
Fluxer sets the `related_` maps from the acting Admin, from the resolved target, and from the metadata. A metadata key contributes when its value is a decimal integer and its name is `user_id`, `guild_id`, `channel_id`, `target_user_id`, or `admin_user_id`, or ends in `_user_id`, `_guild_id`, or `_channel_id`. An identifier that no longer resolves is omitted from the map.
An entry has no request method, request path, status, duration, IP address, or field change list. Fluxer never redacts an entry on read, so a caller holding `audit_log:view` reads `audit_log_reason` and every metadata value in full.
@@ -222,11 +222,11 @@ An entry has no request method, request path, status, duration, IP address, or f
<sup>2</sup> The target has no snowflake, so `target_id` is `0` and the entry's textual identity is in `metadata`
The field is a free-form string, so a client MUST tolerate a value outside this table.
The field is a free-form string, so a client MUST accept a value outside this table.
### Audit actions
An operation records one of the following actions. The field is a free-form string of 1 to 256 characters, so a client MUST tolerate a value outside this table.
An operation records one of the following actions. The field is a free-form string of 1 to 256 characters, so a client MUST accept a value outside this table.
| Value | Description |
| --- | --- |
@@ -322,7 +322,7 @@ An operation records one of the following actions. The field is a free-form stri
| update_voice_server | A registered voice server was updated |
| verify_email | An email address was marked verified |
<sup>1</sup> The same action name is recorded for two different resources, so `target_type` disambiguates the entry
<sup>1</sup> The same action name is recorded for two different resources, so `target_type` tells them apart
<a id="audit-reasons-and-effects"></a>
@@ -330,7 +330,7 @@ An operation records one of the following actions. The field is a free-form stri
Fluxer reads the `X-Audit-Log-Reason` header once at the boundary, on every request to the API, Admin or not. The header is read raw and never percent-decoded, so a client that URI-encodes the value has the encoded form stored.
Fluxer normalises the value by stripping control and format characters and trimming surrounding whitespace. An absent header, a blank value, and a value whose normalised length exceeds 512 characters all resolve to null. Fluxer never fails a request during this normalisation, so an over-long reason is dropped silently.
Normalisation strips control and format characters and trims surrounding whitespace. An absent header, a blank value, and a value whose normalised length exceeds 512 characters all resolve to null. Fluxer never fails a request during this normalisation, so an over-long reason is dropped silently.
Fluxer writes the resolved value to `audit_log_reason` on every entry the request records. An operation that records no entry accepts the header and does nothing with it. An Admin resource page marks an operation with the audit reason capability only where an entry stores the value.
@@ -502,11 +502,11 @@ The registry is returned in this order by [List ACLs](#list-acls). A value outsi
| user:view:dob<sup>6</sup> | Unredacts user dates of birth |
| user:view:email<sup>6</sup> | Unredacts user email addresses and email verification state |
| user:view:ip<sup>6</sup> | Unredacts the last active IP address and the location derived from it |
| user:temp_ban | Applies and lifts an account ban |
| user:temp_ban | Applies and removes an account ban |
| user:update:bot_status | Updates bot and system account state |
| user:update:dob | Updates dates of birth |
| user:update:email | Updates the email address, marks the address verified, resends verification, and sends a password reset |
| user:update:flags | Updates account flags and premium flags, and terminates every login session of an account |
| user:update:flags | Updates account flags and premium flags, and ends every login session of an account |
| user:update:mfa | Reads and removes a user's WebAuthn credentials, and removes MFA state |
| user:update:phone | Updates verified phone state |
| user:update:profile | Clears profile fields |
@@ -8,7 +8,7 @@ import RouteHeader from '@/components/RouteHeader.astro';
Instance configuration is everything an operator can change at runtime. It covers single sign-on, Gateway rollout, registration policy, branding and legal links, instance policy, third party integrations, media retention, and the ordered limit configuration. The [Instance](/http-api/instance/) resource serves the subset published to unauthenticated clients.
Every write is a merge over the stored configuration, and an omitted key leaves the stored value unchanged. The limit configuration write is the one exception, and it replaces the stored document.
Every write is a merge over the stored configuration, and an omitted key leaves the stored value unchanged. The limit configuration write is the one exception and replaces the stored document.
Reading configuration requires the [Admin ACL](/admin-api/#acl-registry) `instance:config:view`, and writing it requires `instance:config:update`. The limit configuration has its own pair, `instance:limit_config:view` and `instance:limit_config:update`. The heap snapshot requires `system:heap_snapshot`.
@@ -208,7 +208,7 @@ Community, direct message, premium and gating policy for the whole deployment.
| Field | Type | Description |
| --- | --- | --- |
| single_community_enabled | boolean | Whether the deployment presents one community |
| single_community_guild_id | ?string | Guild used as that community, or null before one has been provisioned |
| single_community_guild_id | ?string | Guild used as that community, or null before one has been created |
| direct_messages_disabled | boolean | Whether direct messages are disabled |
| direct_messages_locked<sup>1</sup> | boolean | Whether the direct message setting is locked against further change |
| premium_mode | string | [Premium mode](#premium-modes) |
@@ -221,7 +221,7 @@ Community, direct message, premium and gating policy for the whole deployment.
<sup>2</sup> Each key is the operator override when one is set, and otherwise the matching `services_available` value
<sup>3</sup> `gif` and `youtube` report whether an API key resolves from either the stored configuration or the deployment configuration. `bluesky` reports the integration's resolved enablement
<sup>3</sup> `gif` and `youtube` report whether an API key resolves from the stored configuration or the deployment configuration. `bluesky` reports the integration's resolved enablement
## Premium modes
@@ -232,15 +232,15 @@ Community, direct message, premium and gating policy for the whole deployment.
## Deferred phone gate object
A rule that imposes phone verification in a configured window of hours after registration.
A rule that requires phone verification in a configured window of hours after registration.
### Structure
| Field | Type | Description |
| --- | --- | --- |
| enabled | boolean | Whether the delayed phone requirement is applied (default false) |
| window_hours | number | Hours after registration in which the requirement can be imposed (default 6) |
| member_threshold | number | Guild member count above which the requirement is imposed (default 50) |
| window_hours | number | Hours after registration in which the requirement can be applied (default 6) |
| member_threshold | number | Guild member count above which the requirement is applied (default 50) |
## Instance integrations object
@@ -265,7 +265,7 @@ CAPTCHA provider settings, and the provider resolved from them.
| Field | Type | Description |
| --- | --- | --- |
| provider | ?string | Operator override of `hcaptcha`, `turnstile`, or `none`, or null for no override |
| effective_provider | string | Provider actually in use, one of `hcaptcha`, `turnstile`, or `none` |
| effective_provider | string | Provider in use, one of `hcaptcha`, `turnstile`, or `none` |
| hcaptcha_site_key | ?string | hCaptcha site key |
| hcaptcha_secret_key_set | boolean | Whether an hCaptcha secret is stored or supplied by deployment configuration |
| turnstile_site_key | ?string | Turnstile site key |
@@ -283,7 +283,7 @@ Outbound email settings, and the provider resolved from them.
| enabled | ?boolean | Operator override, or null for no override |
| effective_enabled | boolean | Whether outbound email is in force |
| provider | ?string | Operator override of `smtp` or `none`, or null for no override |
| effective_provider | string | Provider actually in use, either `smtp` or `none` |
| effective_provider | string | Provider in use, either `smtp` or `none` |
| from_email | ?string | Envelope sender address |
| from_name | ?string | Envelope sender name |
| smtp<sup>1</sup> | object | `host`, `port`, `username`, `secure`, and `password_set` |
@@ -383,7 +383,7 @@ The stored limit configuration together with the deployment defaults and the met
| limit_config_json | string | The same document rendered as JSON indented by two spaces, for an editor to display |
| self_hosted | boolean | Whether the deployment runs in self-hosted mode |
| defaults<sup>1</sup> | map[string, map[string, integer]] | Deployment default limits, keyed by rule identifier and then by limit key |
| metadata | map[string, [limit key metadata](#limit-key-metadata-object) object] | Presentation metadata for each limit key |
| metadata | map[string, [limit key metadata](#limit-key-metadata-object) object] | Display metadata for each limit key |
| categories<sup>2</sup> | map[string, string] | Display label for each metadata category |
| limit_keys | array[string] | Every [limit key](/http-api/instance/#limit-keys) in registry order |
| bounds?<sup>3</sup> | map[string, object] | Optional `min` and `max` pair for each limit key |
@@ -424,7 +424,7 @@ One rule in that ordered set, with the filters that scope it and the limits it s
## Limit key metadata object
Presentation metadata for one [limit key](/http-api/instance/#limit-keys), which an editor uses to render its control.
Display metadata for one [limit key](/http-api/instance/#limit-keys), which an editor uses to render its control.
### Structure
@@ -463,7 +463,7 @@ Returns the [instance configuration](#instance-configuration-object) object. Req
Applies a merge patch to the stored configuration and returns the resulting [instance configuration](#instance-configuration-object) object. Requires `instance:config:update`, or a session credential until setup is marked complete.
:::note[Every section is optional and merged independently]
The body has one optional object for each section, and Fluxer leaves an absent section alone. Within a section, an absent key keeps its stored value, and a key sent as null clears the stored value where the schema permits null.
The body has one optional object for each section. Fluxer leaves an absent section alone. Within a section, an absent key keeps its stored value, and a key sent as null clears the stored value where the schema permits null.
:::
### JSON body
@@ -485,7 +485,7 @@ The body has one optional object for each section, and Fluxer leaves an absent s
<sup>3</sup> A secret such as `klipy_api_key`, `api_key`, `hcaptcha_secret_key`, `turnstile_secret_key`, or the SMTP `password` is written when supplied and left alone when absent. `integrations.bluesky.keys` is the only way to write the Bluesky signing keys counted as `bluesky.key_count`. It takes up to 8 entries of `kid` (1-255 characters) and nullable `private_key` (up to 10000 characters), and replaces the stored key set outright
:::note[Single sign-on URL validation is conditional]
Fluxer skips URL validation while the merged configuration leaves single sign-on disabled. A configuration that is both enabled and enforced fails validation against `sso` with `SSO_MISCONFIGURED` unless it resolves an authorisation endpoint, a token endpoint, a client identifier, and a claims source. `issuer` stands in for the two endpoints and the claims source.
Fluxer skips URL validation while the merged configuration leaves single sign-on disabled. A configuration both enabled and enforced fails validation against `sso` with `SSO_MISCONFIGURED` unless it resolves an authorisation endpoint, a token endpoint, a client identifier, and a claims source. `issuer` stands in for the two endpoints and the claims source.
:::
#### Instance policy update structure
@@ -500,7 +500,7 @@ Fluxer skips URL validation while the merged configuration leaves single sign-on
| services? | object | Nullable `gif_enabled`, `youtube_enabled`, and `bluesky_enabled` overrides |
| deferred_phone_gate?<sup>3</sup> | object | `enabled`, `window_hours`, and `member_threshold` |
<sup>1</sup> Setting `single_community_enabled` to true adopts the already designated guild when one still exists, and otherwise provisions a community using `single_community_name` or the configured product name. On a deployment whose setup is already complete, enabling it while no guild is designated fails with 400 `INSTANCE_POLICY_TRANSITION_NOT_ALLOWED`, as does enabling it when the acting Admin account cannot be resolved. Setting it to false only clears the flag and leaves the guild in place
<sup>1</sup> Setting `single_community_enabled` to true adopts the already designated guild when one still exists, and otherwise creates a community using `single_community_name` or the configured product name. On a deployment whose setup is already complete, enabling it while no guild is designated fails with 400 `INSTANCE_POLICY_TRANSITION_NOT_ALLOWED`, as does enabling it when the acting Admin account cannot be resolved. Setting it to false only clears the flag and leaves the guild in place
<sup>2</sup> The setting can be changed only while `direct_messages_locked` is false, and a change attempted after the lock is set fails with 400 `INSTANCE_POLICY_TRANSITION_NOT_ALLOWED` unless the same request sets `direct_messages_locked` to false. Re-enabling direct messages sets the lock again
@@ -700,7 +700,7 @@ Both decisions remove the pending registration, so the same account cannot be de
Approval removes both the `registration_pending_approval` trait and the `registration_rejected` trait, and joins the account to the single community when that mode is enabled and a guild is designated. A join that fails is logged and does not fail the request. Rejection removes the `registration_pending_approval` trait and adds the `registration_rejected` trait, which blocks login and every later session creation. A session issued before the decision stays valid. The pending registration is removed either way.
One Admin audit entry with the action `approve_registration` or `reject_registration` targets the account and records the audit reason. It has no metadata.
One Admin audit entry with the action `approve_registration` or `reject_registration` targets the account, records the audit reason, and has no metadata.
### Rate limit
@@ -786,7 +786,7 @@ The 200 has `Content-Type: application/octet-stream`, `Content-Disposition: atta
A client MUST NOT decode the body as JSON. The published OpenAPI document declares a JSON object of `success`, `filename`, and `size_bytes` here, so a generated client has to be overridden.
:::danger[A snapshot stalls the process and exposes memory]
Writing a snapshot blocks the process that serves the request for as long as the dump takes. The file contains whatever that process held in memory, including message content, tokens, and personal data.
Writing a snapshot blocks the serving process until the dump finishes. The file contains whatever that process held in memory, including message content, tokens, and personal data.
:::
:::caution[Only the serving node is captured]
@@ -48,7 +48,7 @@ One object is one row of the ledger. No operation on this page changes any field
| payload<sup>11</sup> | ?string | The JSON rendering of the job input |
| result | ?string | Always null |
<sup>1</sup> The task reports progress at its own cadence, and a task that never reports leaves all three null for its whole run. A bulk task reports once before it starts, again after every 25 entities, and once when it finishes, except for `schedule_user_deletion`, which reports after every 10 accounts, and the file SHA bulk ban, which reports after every 50 hashes
<sup>1</sup> The task reports progress at its own pace, and a task that never reports leaves all three null for its whole run. A bulk task reports once before it starts, again after every 25 entities, and once when it finishes, except for `schedule_user_deletion`, which reports after every 10 accounts, and the file SHA bulk ban, which reports after every 50 hashes
<sup>2</sup> Written only when the job is dead-lettered. A single failed delivery that is redelivered leaves it null
@@ -56,7 +56,7 @@ One object is one row of the ledger. No operation on this page changes any field
<sup>4</sup> Only [Queue bulk job](/admin-api/bulk-jobs/#queue-bulk-job) and the file SHA bulk ban record one, so a system DM broadcast, an archive, and a search index rebuild all report null
<sup>5</sup> The reason the queueing operation resolved from `X-Audit-Log-Reason`. A blank or over-length header resolves to null there, and the queueing operation still succeeds
<sup>5</sup> The reason the queueing operation resolved from `X-Audit-Log-Reason`. A blank or too-long header resolves to null there, and the queueing operation still succeeds
<sup>6</sup> Present as soon as the job is queued
@@ -44,7 +44,7 @@ Every operation that returns Admin message objects also returns the matching pub
<sup>1</sup> Every object in one response has the same values, taken from the channel named in the request path or query. All five are null when the channel no longer exists
<sup>2</sup> Always absent from the objects these operations return. The same member is populated on the [report message context object](/admin-api/reports/#report-message-context-object)
<sup>2</sup> Always absent from the objects these operations return. The same member is set on the [report message context object](/admin-api/reports/#report-message-context-object)
<sup>3</sup> Written on every object these operations return, and empty when no NCMEC report has been filed against the author
@@ -95,7 +95,7 @@ An attachment entry has the ordinary attachment metadata together with the NCMEC
<sup>5</sup> Assigned only once NCMEC accepts the report, so it is null while `ncmec_status` is `not_submitted` and after a failed submission
<sup>6</sup> Populated only when `ncmec_status` is `failed`, and it stores the raw upstream error. The sanitised wording appears in the failing response body instead
<sup>6</sup> Set only when `ncmec_status` is `failed`, and it stores the raw upstream error. The sanitised wording appears in the failing response body instead
#### NCMEC submission status
@@ -363,7 +363,7 @@ Shred jobs are created by [Shred user messages](/admin-api/users/#shred-user-mes
| --- | --- | --- |
| job_id<sup>1</sup> | snowflake | The message shred job ID, taken from the queueing response |
<sup>1</sup> A snowflake issued when the job was queued, so a value that is not a decimal integer fails path validation rather than reporting `not_found`
<sup>1</sup> A snowflake issued when the job was queued, so a value that is not a decimal integer fails path validation instead of reporting `not_found`
### Response
@@ -383,7 +383,7 @@ Submits one image or video attachment to NCMEC and starts the account enforcemen
A caller missing more than one of the four is refused with 403 `MISSING_ACL` naming the first it does not hold, in the order listed. The wildcard satisfies all four.
This operation ignores `X-Audit-Log-Reason`. The reason on every audit entry the workflow produces is synthesised from the assigned NCMEC report ID and the channel and attachment IDs, and it is returned as `audit_log_reason`.
This operation ignores `X-Audit-Log-Reason`. The reason on every audit entry the workflow produces is built from the assigned NCMEC report ID and the channel and attachment IDs, and it is returned as `audit_log_reason`.
### JSON body
@@ -407,7 +407,7 @@ This operation ignores `X-Audit-Log-Reason`. The reason on every audit entry the
| --- | --- | --- |
| success | boolean | Always true |
| ncmec_report_id | string | The report ID NCMEC assigned to this submission (1-256 characters) |
| audit_log_reason<sup>3</sup> | string | The synthesised reason recorded on every audit entry the workflow produced (1-4,000 characters) |
| audit_log_reason<sup>3</sup> | string | The reason recorded on every audit entry the workflow produced (1-4,000 characters) |
<sup>3</sup> The NCMEC report ID followed by the channel ID and attachment ID, so one string identifies the submission in the audit log and at NCMEC
@@ -437,7 +437,7 @@ When the resolved attachment has an author who has not already been enforced aga
Message content is deleted only after that archive completes. The archive is re-checked every 15 seconds by default, for at most 240 attempts. Once the archive is complete the reported message is deleted, its attachments are purged, and [Message Delete](/gateway/events/#message-delete) is sent.
A successful submission records one [Admin audit entry](/admin-api/#admin-audit-entry-object) with the action `NCMEC Report`. It targets the reported user, or targets the source report when the attachment resolved to no author. Triggering the archive records a second entry with the action `trigger_user_archive` targeting the same user, skipped when the account already has an archive taken after the enforcement. Both entries have the synthesised reason returned as `audit_log_reason`.
A successful submission records one [Admin audit entry](/admin-api/#admin-audit-entry-object) with the action `NCMEC Report`. It targets the reported user, or targets the source report when the attachment resolved to no author. Triggering the archive records a second entry with the action `trigger_user_archive` targeting the same user, skipped when the account already has an archive taken after the enforcement. Both entries record the reason returned as `audit_log_reason`.
An attachment that resolved to no author is submitted to NCMEC and audited. No account is disabled, no archive is triggered, and no message content is deleted.
@@ -165,12 +165,12 @@ A message report captures the reported message together with at most 25 messages
| id | snowflake | The ID of the message |
| channel_id<sup>1</sup> | string | The channel the captured messages were read from |
| channel_nsfw<sup>2</sup> | ?boolean | The current NSFW state of that channel |
| channel_content_warning_level?<sup>3</sup> <sup>4</sup> | ?integer | The channel content warning level |
| channel_content_warning_level?<sup>3</sup> <sup>4</sup> | ?integer | The channel [content warning level](/http-api/channels/#content-warning-levels) |
| channel_content_warning_text?<sup>3</sup> <sup>4</sup> | ?string | The channel content warning text |
| guild_id<sup>5</sup> | ?snowflake | The guild the report is scoped to, or null when the report names none |
| guild_nsfw_level<sup>2</sup> | ?integer | The current guild [NSFW level](/http-api/guilds/#nsfw-levels) |
| guild_nsfw?<sup>3</sup> <sup>4</sup> | ?boolean | Whether the guild is marked NSFW |
| guild_content_warning_level?<sup>3</sup> <sup>4</sup> | ?integer | The guild content warning level |
| guild_content_warning_level?<sup>3</sup> <sup>4</sup> | ?integer | The guild [content warning level](/http-api/guilds/#guild-content-warning-levels) |
| guild_content_warning_text?<sup>3</sup> <sup>4</sup> | ?string | The guild content warning text |
| content | string | The captured message content, empty when the message had none |
| timestamp<sup>6</sup> | ISO8601 timestamp | When the message was sent |

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