Compare commits

...
147 changed files with 3877 additions and 1661 deletions
+22
View File
@@ -426,6 +426,28 @@ jobs:
'packages/markdown_parser/rust/Cargo.toml', 'packages/markdown_parser/rust/.cargo/config.toml',
'packages/markdown_parser/rust/src/**') }}
lint:
runs-on: ubuntu-24.04
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
- name: Install pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271
- name: Install Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
with:
node-version: '24'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Check formatting and lint
run: pnpm exec biome ci .
i18n:
runs-on: ubuntu-24.04
timeout-minutes: 25
+64 -33
View File
@@ -3,12 +3,20 @@
# A name absent from this file is one Compose does not forward, and it reaches a
# service only through a Compose override file that adds it to that service's
# environment. packages/config/src/__tests__/DeployEnvCoverage.test.ts fails when
# a Compose edit forgets the matching line here.
# a Compose edit forgets the matching line here. Compose expands this file from
# top to bottom, so a line written with ${...} has to sit below every name it
# reads.
FLUXER_DOMAIN=chat.example.com
FLUXER_PUBLIC_SCHEME=https
FLUXER_PUBLIC_PORT=443
# The three lines above are the address browsers use, and every endpoint the
# services advertise carries the port from FLUXER_PUBLIC_PORT. They do not move
# what the host publishes. FLUXER_HTTP_PORT and FLUXER_HTTPS_PORT further down
# do that, and a non-default port needs the matching one set as well. Both
# complete recipes are written out beside them.
# How browsers reach this instance.
#
# Default: Fluxer binds 80 and 443 and gets its own Let's Encrypt certificate.
@@ -33,50 +41,71 @@ FLUXER_PUBLIC_PORT=443
# address if it reaches Fluxer from a public IP.
#FLUXER_EDGE_TRUSTED_PROXIES=private_ranges
# The public origin browsers use, without a trailing slash. Derived from the three
# values above and correct for the usual https-on-443 setup, so leave it alone
# unless you serve Fluxer on a non-default port, where the port must appear here.
# The origin browsers see, without a trailing slash. Leave it unset and each
# service builds one from the three values at the top of this file. Set it and it
# wins: every service reads the host, the scheme and the port out of it and
# ignores those three names. Use it when browsers reach the instance on a host
# FLUXER_DOMAIN does not name. It has to be a bare origin, a scheme and a host
# and an optional port and nothing after them, or the services refuse to start.
# It does not move the edge listener or the published ports either, so set the
# publish below to the port written here.
#FLUXER_PUBLIC_ORIGIN=https://chat.example.com
# Overrides the address Fluxer's edge listens on. Honoured in the default mode
# only: docker-compose.proxy.yml sets the literal :8080 and Compose lets the last
# file win, so a value here is discarded under the proxy overlay with no warning.
# Set it only for an unusual default-mode layout, such as serving several
# hostnames or binding a non-default TLS port.
#FLUXER_EDGE_SITE_ADDRESS=chat.example.com
# Overrides the address the edge listens on inside its container. Compose builds
# it from FLUXER_PUBLIC_SCHEME and FLUXER_DOMAIN with no port, and the edge keeps
# its container ports at 80 and 443 whatever the public port is. Caddy matches a
# site by host and ignores the port in the Host header, so a request arriving on
# a non-default published port still lands on this site. Put a port in this value
# only if you also publish that same container port below, or nothing will be
# listening where the publish points. Honoured in the default mode only:
# docker-compose.proxy.yml sets the literal :8080 and tunnel.compose.yml the
# literal :80, and Compose lets the last file win, so a value here is discarded
# under either overlay with no warning. Set it for an unusual default-mode
# layout, such as serving several hostnames. Write the scheme into it: a bare
# hostname means automatic HTTPS on 443 whatever FLUXER_PUBLIC_SCHEME says.
#FLUXER_EDGE_SITE_ADDRESS=https://chat.example.com
# The old name for the value above. It is read only when
# FLUXER_EDGE_SITE_ADDRESS is unset, so an existing .env keeps the listener
# it already had. Rename it to FLUXER_EDGE_SITE_ADDRESS at your convenience.
#FLUXER_CADDY_SITE_ADDRESS=
# FLUXER_PUBLIC_ORIGIN is the origin browsers see. It must carry the port
# whenever FLUXER_PUBLIC_PORT is not the default for its scheme, because an
# origin written with a default port never matches a browser Origin header.
# Serving on any other port means setting all three, plus the published port
# below, and pointing FLUXER_EDGE_SITE_ADDRESS at the same scheme and host.
# Compose expands this file from top to bottom, so FLUXER_PUBLIC_ORIGIN has to
# stay below the two values it reads. Above them it silently expands to a bare
# host with a trailing colon.
#FLUXER_PUBLIC_SCHEME=http
#FLUXER_PUBLIC_PORT=19080
#FLUXER_PUBLIC_ORIGIN=${FLUXER_PUBLIC_SCHEME}://${FLUXER_DOMAIN}:${FLUXER_PUBLIC_PORT}
#FLUXER_HTTP_PORT=19080
# Ports Caddy publishes on the host. Caddy still listens on 80 and 443 inside
# the container, so change only these when something else already owns the
# standard ports or another proxy sits in front. Both take an optional bind
# address in front of the port, and 127.0.0.1 keeps the publish off every
# public interface. FLUXER_HTTPS_PORT moves the TCP and the UDP publish
# together, because HTTP/3 needs both on the same port.
# Host side of the edge's publishes, and the only two names that decide which
# host ports Fluxer binds. The container side is fixed. Container 80 carries the
# HTTP to HTTPS redirect and the Let's Encrypt HTTP challenge under an https
# scheme, and the site itself under an http one. Container 443 carries the TLS
# site. FLUXER_HTTPS_PORT moves the TCP and the UDP publish together, because
# HTTP/3 needs both on the same port. Both take an optional bind address in front
# of the port, and 127.0.0.1 keeps the publish off every public interface. Give
# them different host ports: the same host port on both is two publishes of one
# port and the edge refuses to start.
#FLUXER_HTTP_PORT=80
#FLUXER_HTTPS_PORT=443
#FLUXER_HTTP_PORT=127.0.0.1:80
#FLUXER_HTTPS_PORT=127.0.0.1:443
# HTTPS on 8443, complete. Host 80 stays published and still answers the ACME
# challenge. Let's Encrypt only ever connects to the public 80 or 443, so the
# certificate is issued if a router in front forwards public 80 to this host and
# is not issued otherwise. Serve your own certificate from the Caddyfile when it
# cannot.
#FLUXER_PUBLIC_PORT=8443
#FLUXER_HTTPS_PORT=8443
# Plain HTTP on 19080, complete. The port 80 publish moves to 19080, so nothing
# binds host 80. Under an http scheme nothing listens on container 443, so the
# last line parks that publish on loopback for a host that wants 443 for
# something else. Drop it and 443 is published and idle, which is what earlier
# releases did.
#FLUXER_PUBLIC_SCHEME=http
#FLUXER_PUBLIC_PORT=19080
#FLUXER_HTTP_PORT=19080
#FLUXER_HTTPS_PORT=127.0.0.1:443
# A tunnel or another proxy in front of the stack needs no HTTPS publish at all.
# tunnel.compose.yml ships beside this file and replaces Caddy's published ports
# with a single loopback HTTP publish, so nothing binds 443. FLUXER_HTTP_PORT
# with a single loopback HTTP publish, so nothing binds 443, and points the edge
# at plain HTTP on that publish so it stops redirecting to https. FLUXER_HTTP_PORT
# still moves that one publish. Set the line below and plain docker compose
# commands pick the file up, or add it to your own -f flags if you pass any. The
# file uses the !override tag, which needs Compose 2.24.4 or newer.
@@ -153,9 +182,11 @@ FLUXER_VAPID_PRIVATE_KEY=CHANGE_ME
LIVEKIT_API_KEY=fluxer
LIVEKIT_API_SECRET=CHANGE_ME
# The URL browsers use for voice signalling. Derived from FLUXER_PUBLIC_SCHEME,
# FLUXER_DOMAIN and FLUXER_PUBLIC_PORT as wss://host[:port]/livekit when empty.
# Set it only when LiveKit is served from another host.
# The URL browsers use for voice signalling. Compose builds it from
# FLUXER_PUBLIC_ORIGIN, or from FLUXER_PUBLIC_SCHEME, FLUXER_DOMAIN and
# FLUXER_PUBLIC_PORT, as that origin followed by /livekit. The client rewrites a
# leading http to ws itself. Set it only when LiveKit is served from another
# host.
#FLUXER_LIVEKIT_URL=
# Media ports. LiveKit advertises these in ICE candidates, so the host must
+7 -2
View File
@@ -18,6 +18,7 @@ x-fluxer-env: &fluxer-env
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_API_HEADERS_TIMEOUT_MS: ${FLUXER_API_HEADERS_TIMEOUT_MS:-30000}
@@ -56,7 +57,7 @@ x-fluxer-env: &fluxer-env
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}}/livekit}
FLUXER_LIVEKIT_URL: ${FLUXER_LIVEKIT_URL:-${FLUXER_PUBLIC_ORIGIN:-${FLUXER_PUBLIC_SCHEME:-https}://${FLUXER_DOMAIN}:${FLUXER_PUBLIC_PORT:-443}}/livekit}
FLUXER_KLIPY_API_KEY: ${FLUXER_KLIPY_API_KEY:-}
@@ -132,7 +133,7 @@ services:
- "${FLUXER_HTTPS_PORT:-443}:443"
- "${FLUXER_HTTPS_PORT:-443}:443/udp"
environment:
FLUXER_EDGE_SITE_ADDRESS: ${FLUXER_EDGE_SITE_ADDRESS:-${FLUXER_CADDY_SITE_ADDRESS:-${FLUXER_DOMAIN:?set FLUXER_DOMAIN in .env}}}
FLUXER_EDGE_SITE_ADDRESS: ${FLUXER_EDGE_SITE_ADDRESS:-${FLUXER_CADDY_SITE_ADDRESS:-${FLUXER_PUBLIC_SCHEME:-https}://${FLUXER_DOMAIN:?set FLUXER_DOMAIN in .env}}}
FLUXER_EDGE_TRUSTED_PROXIES: ${FLUXER_EDGE_TRUSTED_PROXIES:-private_ranges}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
@@ -494,6 +495,10 @@ services:
environment:
FLUXER_APP_PROXY_HOST: 0.0.0.0
FLUXER_APP_PROXY_PORT: "8080"
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:-}
DISCOVERY_UPSTREAM_URL: http://edge:8088/.well-known/fluxer
PUBLIC_BOOTSTRAP_API_ENDPOINT: /api
PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT: ${FLUXER_PUBLIC_ORIGIN:-${FLUXER_PUBLIC_SCHEME:-https}://${FLUXER_DOMAIN}}/api
+2
View File
@@ -2,3 +2,5 @@ services:
edge:
ports: !override
- "${FLUXER_HTTP_PORT:-127.0.0.1:80}:80"
environment:
FLUXER_EDGE_SITE_ADDRESS: ":80"
+7 -1
View File
@@ -129,6 +129,11 @@ impl AdminConfig {
pub fn secure_cookies(&self) -> bool {
self.admin_endpoint.starts_with("https://")
}
pub fn admin_origin(&self) -> Option<String> {
let origin = url::Url::parse(&self.admin_endpoint).ok()?.origin();
origin.is_tuple().then(|| origin.ascii_serialization())
}
}
impl RuntimeEnv {
@@ -202,6 +207,7 @@ mod tests {
unsafe { env::remove_var(name) };
}
unsafe { env::remove_var("FLUXER_PUBLIC_PORT") };
unsafe { env::remove_var("FLUXER_PUBLIC_ORIGIN") };
unsafe { env::set_var("FLUXER_ADMIN_SECRET_KEY_BASE", "test-secret") };
for (name, value) in vars {
unsafe { env::set_var(name, value) };
@@ -350,7 +356,7 @@ mod tests {
("FLUXER_BASE_DOMAIN", "fluxer.example"),
("FLUXER_PUBLIC_PORT", "19080"),
("FLUXER_ADMIN_ENDPOINT", "http://fluxer.example/admin"),
("FLUXER_APP_ENDPOINT", "http://fluxer.example:19080"),
("FLUXER_APP_ENDPOINT", "http://fluxer.example"),
("FLUXER_MEDIA_ENDPOINT", "http://fluxer.example/media"),
("FLUXER_STATIC_CDN_ENDPOINT", "https://cdn.example.net"),
(
+95 -4
View File
@@ -27,7 +27,6 @@ pub async fn csrf_protection(
) -> Response {
let config = state.config();
let secret = config.secret_key_base.clone();
let admin_endpoint = config.admin_endpoint.clone();
let secure_cookies = config.secure_cookies();
let user_id = request
@@ -50,7 +49,7 @@ pub async fn csrf_protection(
.iter()
.any(|suffix| path.ends_with(suffix));
if !is_ignored {
if !is_same_site_request(&request, &admin_endpoint) {
if !is_same_site_request(&request, config.admin_origin().as_deref()) {
return StatusCode::FORBIDDEN.into_response();
}
let header_token = extract_csrf_header(&request);
@@ -167,7 +166,7 @@ async fn extract_csrf_from_form_body(
Ok((request, token))
}
fn is_same_site_request(request: &Request, admin_endpoint: &str) -> bool {
fn is_same_site_request(request: &Request, admin_origin: Option<&str>) -> bool {
if let Some(site) = request
.headers()
.get("sec-fetch-site")
@@ -180,7 +179,7 @@ fn is_same_site_request(request: &Request, admin_endpoint: &str) -> bool {
.get(header::ORIGIN)
.and_then(|value| value.to_str().ok())
{
Some(origin) => origin == admin_endpoint,
Some(origin) => admin_origin.is_some_and(|expected| origin == expected),
None => true,
}
}
@@ -275,6 +274,98 @@ mod tests {
);
}
async fn action_status(admin_endpoint: &str, origin: &str) -> StatusCode {
let state = state_with_admin_endpoint(admin_endpoint);
let app = Router::new()
.route("/", get(|| async { "ok" }).post(|| async { "ok" }))
.layer(from_fn_with_state(state, csrf_protection));
let issued = app
.clone()
.oneshot(Request::builder().uri("/").body(Body::empty()).unwrap())
.await
.expect("router responds");
let cookie = issued
.headers()
.get_all(header::SET_COOKIE)
.iter()
.filter_map(|value| value.to_str().ok())
.filter_map(|value| value.split(';').next())
.find(|pair| pair.contains("csrf_token=") && !pair.ends_with('='))
.expect("a csrf cookie is issued")
.to_owned();
let token = cookie.split_once('=').expect("a cookie value").1.to_owned();
let response = app
.oneshot(
Request::builder()
.method(Method::POST)
.uri("/")
.header(header::COOKIE, cookie.as_str())
.header(header::ORIGIN, origin)
.header(CSRF_HEADER_NAME, token.as_str())
.body(Body::empty())
.unwrap(),
)
.await
.expect("router responds");
response.status()
}
#[tokio::test]
async fn a_matching_origin_passes_the_same_site_check() {
let status = action_status(
"https://admin.example.test/admin",
"https://admin.example.test",
)
.await;
assert_eq!(status, StatusCode::OK);
}
#[tokio::test]
async fn a_matching_origin_on_a_non_default_port_passes_the_same_site_check() {
let status = action_status(
"https://admin.example.test:19080/admin",
"https://admin.example.test:19080",
)
.await;
assert_eq!(status, StatusCode::OK);
}
#[tokio::test]
async fn a_foreign_origin_fails_the_same_site_check() {
let status = action_status(
"https://admin.example.test:19080/admin",
"https://evil.example.test:19080",
)
.await;
assert_eq!(status, StatusCode::FORBIDDEN);
}
#[tokio::test]
async fn another_port_on_the_admin_host_fails_the_same_site_check() {
let status = action_status(
"https://admin.example.test:19080/admin",
"https://admin.example.test",
)
.await;
assert_eq!(status, StatusCode::FORBIDDEN);
}
#[tokio::test]
async fn an_unparseable_admin_endpoint_fails_closed() {
let status = action_status("not-an-endpoint", "https://admin.example.test").await;
assert_eq!(status, StatusCode::FORBIDDEN);
}
#[tokio::test]
async fn an_explicit_default_port_matches_a_portless_origin() {
let status = action_status(
"https://admin.example.test:443/admin",
"https://admin.example.test",
)
.await;
assert_eq!(status, StatusCode::OK);
}
#[test]
fn oauth2_callback_is_exempt() {
let exempt = IGNORED_PATH_SUFFIXES
+17 -3
View File
@@ -18,6 +18,7 @@ use tower::ServiceExt;
const SECRET_KEY: &str = "legacy-csrf-cookie-test-secret";
const ADMIN_ORIGIN: &str = "https://admin.example.test";
const LEGACY_HEX_TOKEN: &str = "8f14e45fceea167a5a36dedd4bea25438f14e45fceea167a5a36dedd4bea2543";
const CREATED_KEY_SECRET: &str = "fa_1900000000000000001_OneTimeSecretForTests";
struct TestApp {
router: Router,
@@ -128,6 +129,10 @@ async fn load_page(app: &TestApp, cookie: &str) -> (String, String) {
let body = to_bytes(response.into_body(), usize::MAX).await.unwrap();
let text = String::from_utf8(body.to_vec()).unwrap();
assert_eq!(status, StatusCode::OK, "{text}");
assert!(
text.contains("AdminUser"),
"the page did not render the admin the mock API returns"
);
let cookie_token = host_csrf_cookie(&headers)
.unwrap_or_else(|| panic!("no __Host-csrf_token in Set-Cookie: {headers:?}"));
let page_token = form_csrf_value(&text).expect("no _csrf hidden input rendered");
@@ -166,7 +171,16 @@ async fn submit_action(app: &TestApp, cookie: &str, form_token: &str) -> StatusC
)
.await
.unwrap();
response.status()
let status = response.status();
let body = to_bytes(response.into_body(), usize::MAX).await.unwrap();
let text = String::from_utf8(body.to_vec()).unwrap();
if status == StatusCode::OK {
assert!(
text.contains(CREATED_KEY_SECRET),
"the action did not render the key the mock API creates"
);
}
status
}
fn host_csrf_cookie(headers: &HeaderMap) -> Option<String> {
@@ -207,11 +221,11 @@ async fn spawn_mock_api() -> String {
async fn mock_api(method: Method, uri: Uri) -> Response {
match (method, uri.path()) {
(Method::GET, "/admin/users/me") => Json(json!({ "user": admin_user() })).into_response(),
(Method::GET, "/admin/users/@me") => Json(json!({ "user": admin_user() })).into_response(),
(Method::GET, "/admin/api-keys") => Json(json!([])).into_response(),
(Method::POST, "/admin/api-keys") => Json(json!({
"key_id": "1900000000000000001",
"key": "fa_1900000000000000001_OneTimeSecretForTests",
"key": CREATED_KEY_SECRET,
"name": "Legacy Cookie Key",
"created_at": "2026-07-10T15:00:00.000Z",
"expires_at": null,
+1 -1
View File
@@ -209,7 +209,7 @@ export async function forgotPassword(ctx: ApiContext, {data, request}: ForgotPas
}
const hasValidDns = await emailDnsValidation.hasValidDnsRecords(data.email);
if (!hasValidDns) {
throw InputValidationError.fromCode('email', ValidationErrorCodes.INVALID_EMAIL_ADDRESS);
throw InputValidationError.fromCode('email', ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL);
}
const user = await users.findByEmail(data.email);
if (!user) {
+1 -1
View File
@@ -187,7 +187,7 @@ export async function register(
contactDomain = normalizePolicyContactDomain(extractEmailDomain(rawEmail));
const hasValidDns = await emailDnsValidation.hasValidDnsRecords(rawEmail);
if (!hasValidDns) {
throw InputValidationError.fromCode('email', ValidationErrorCodes.INVALID_EMAIL_ADDRESS);
throw InputValidationError.fromCode('email', ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL);
}
contactDomainBlocked = accountPolicyEvaluator.isBlockedRegistrationEmailDomain(contactDomain);
if (contactDomainBlocked) {
@@ -40,7 +40,7 @@ export class DonationCheckoutService {
}
const hasValidDns = await this.emailDnsValidationService.hasValidDnsRecords(params.email);
if (!hasValidDns) {
throw InputValidationError.fromCode('email', ValidationErrorCodes.INVALID_EMAIL_ADDRESS);
throw InputValidationError.fromCode('email', ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL);
}
const isRecurring = params.interval !== null;
const existingDonor = await this.donationRepository.findDonorByEmail(params.email);
@@ -24,7 +24,7 @@ export class DonationMagicLinkService {
async sendMagicLink(email: string): Promise<void> {
const hasValidDns = await this.emailDnsValidationService.hasValidDnsRecords(email);
if (!hasValidDns) {
throw InputValidationError.fromCode('email', ValidationErrorCodes.INVALID_EMAIL_ADDRESS);
throw InputValidationError.fromCode('email', ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL);
}
const donor = await this.donationRepository.findDonorByEmail(email);
if (!donor) {
@@ -27,25 +27,51 @@ interface EmailDnsValidationServiceOptions {
enforceInTestMode?: boolean;
positiveTtlMs?: number;
negativeTtlMs?: number;
lookupTimeoutMs?: number;
maxCachedDomains?: number;
isEmailEnabled?: () => Promise<boolean>;
}
type DnsResolutionResult = 'valid' | 'invalid' | 'fallback' | 'transient_error';
type DomainVerdict = 'valid' | 'invalid' | 'unverified';
const DOMAIN_NOT_FOUND_CODES = new Set(['ENOTFOUND', 'ENONAME', 'EAI_NONAME', 'NXDOMAIN']);
const DOMAIN_NO_RECORD_CODES = new Set(['ENODATA', 'ENOENT', 'NODATA']);
const DNS_LOOKUP_TIMEOUT_MS = 2000;
const DNS_LOOKUP_TRIES = 1;
const MAX_CACHED_DOMAINS = 10000;
async function isInstanceEmailEnabled(): Promise<boolean> {
const {getInstanceConfigRepository} = await import('../middleware/ServiceSingletons');
return getInstanceConfigRepository().isEmailEnabled();
}
function createLookupTimeoutError(): NodeJS.ErrnoException {
const error: NodeJS.ErrnoException = new Error('Email DNS lookup timed out');
error.code = 'ETIMEOUT';
return error;
}
export class EmailDnsValidationService implements IEmailDnsValidationService {
private readonly resolver: IDnsResolver;
private readonly enforceInTestMode: boolean;
private readonly positiveTtlMs: number;
private readonly negativeTtlMs: number;
private readonly lookupTimeoutMs: number;
private readonly maxCachedDomains: number;
private readonly isEmailEnabled: () => Promise<boolean>;
private readonly domainCache = new Map<string, DomainValidationCacheEntry>();
constructor(options: EmailDnsValidationServiceOptions = {}) {
this.resolver = options.resolver ?? new Resolver();
this.lookupTimeoutMs = options.lookupTimeoutMs ?? DNS_LOOKUP_TIMEOUT_MS;
this.resolver =
options.resolver ??
new Resolver({timeout: this.lookupTimeoutMs, tries: DNS_LOOKUP_TRIES, maxTimeout: this.lookupTimeoutMs});
this.enforceInTestMode = options.enforceInTestMode ?? false;
this.positiveTtlMs = options.positiveTtlMs ?? ms('30 minutes');
this.negativeTtlMs = options.negativeTtlMs ?? ms('5 minutes');
this.maxCachedDomains = options.maxCachedDomains ?? MAX_CACHED_DOMAINS;
this.isEmailEnabled = options.isEmailEnabled ?? isInstanceEmailEnabled;
}
async hasValidDnsRecords(email: string): Promise<boolean> {
@@ -56,13 +82,19 @@ export class EmailDnsValidationService implements IEmailDnsValidationService {
if (!domain) {
return false;
}
if (!(await this.isEmailEnabled())) {
return true;
}
const cached = this.getCachedDomainResult(domain);
if (cached !== null) {
return cached;
}
const isValid = await this.resolveDomain(domain);
this.setCachedDomainResult(domain, isValid);
return isValid;
const verdict = await this.resolveDomain(domain);
if (verdict === 'invalid') {
Logger.warn({domain}, 'Email domain publishes no mail exchange or address records, rejecting the address');
}
this.setCachedDomainResult(domain, verdict);
return verdict !== 'invalid';
}
private extractDomain(email: string): string | null {
@@ -82,41 +114,49 @@ export class EmailDnsValidationService implements IEmailDnsValidationService {
this.domainCache.delete(domain);
return null;
}
this.domainCache.delete(domain);
this.domainCache.set(domain, cached);
return cached.valid;
}
private setCachedDomainResult(domain: string, isValid: boolean): void {
const ttlMs = isValid ? this.positiveTtlMs : this.negativeTtlMs;
private setCachedDomainResult(domain: string, verdict: DomainVerdict): void {
const ttlMs = verdict === 'valid' ? this.positiveTtlMs : this.negativeTtlMs;
if (this.domainCache.size >= this.maxCachedDomains && !this.domainCache.has(domain)) {
const oldestDomain = this.domainCache.keys().next().value;
if (oldestDomain !== undefined) {
this.domainCache.delete(oldestDomain);
}
}
this.domainCache.set(domain, {
valid: isValid,
valid: verdict !== 'invalid',
expiresAtMs: Date.now() + ttlMs,
});
}
private async resolveDomain(domain: string): Promise<boolean> {
private async resolveDomain(domain: string): Promise<DomainVerdict> {
const mxResult = await this.resolveMx(domain);
if (mxResult === 'valid') {
return true;
return 'valid';
}
if (mxResult === 'invalid') {
return false;
return 'invalid';
}
if (mxResult === 'transient_error') {
return true;
return 'unverified';
}
const addressResult = await this.resolveAddressRecords(domain);
if (addressResult === 'valid') {
return true;
return 'valid';
}
if (addressResult === 'invalid') {
return false;
return 'invalid';
}
return true;
return 'unverified';
}
private async resolveMx(domain: string): Promise<DnsResolutionResult> {
try {
const records = await this.resolver.resolveMx(domain);
const records = await this.withLookupDeadline(this.resolver.resolveMx(domain));
if (records.length > 0) {
return 'valid';
}
@@ -128,8 +168,8 @@ export class EmailDnsValidationService implements IEmailDnsValidationService {
private async resolveAddressRecords(domain: string): Promise<DnsResolutionResult> {
const [ipv4Result, ipv6Result] = await Promise.allSettled([
this.resolver.resolve4(domain),
this.resolver.resolve6(domain),
this.withLookupDeadline(this.resolver.resolve4(domain)),
this.withLookupDeadline(this.resolver.resolve6(domain)),
]);
if (ipv4Result.status === 'fulfilled' && ipv4Result.value.length > 0) {
return 'valid';
@@ -147,6 +187,20 @@ export class EmailDnsValidationService implements IEmailDnsValidationService {
return 'invalid';
}
private async withLookupDeadline<T>(lookup: Promise<T>): Promise<T> {
let timer: ReturnType<typeof setTimeout> | undefined;
try {
return await Promise.race([
lookup,
new Promise<never>((_resolve, reject) => {
timer = setTimeout(() => reject(createLookupTimeoutError()), this.lookupTimeoutMs);
}),
]);
} finally {
clearTimeout(timer);
}
}
private classifyResolverError(
error: unknown,
domain: string,
@@ -0,0 +1,220 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {ms} from 'itty-time';
import {describe, expect, it} from 'vitest';
import {Config} from '../../Config';
import {getInstanceConfigRepository} from '../../middleware/ServiceSingletons';
import {EmailDnsValidationService} from '../EmailDnsValidationService';
interface MxRecord {
exchange: string;
priority: number;
}
function dnsError(code: string): NodeJS.ErrnoException {
const error: NodeJS.ErrnoException = new Error(`dns lookup failed with ${code}`);
error.code = code;
return error;
}
class FakeDnsResolver {
readonly lookups: Array<string> = [];
mxRecords: Array<MxRecord> = [{exchange: 'mx.example.com', priority: 10}];
mxErrorCode: string | null = null;
addressErrorCode: string | null = 'ENOTFOUND';
addresses: Array<string> = [];
stall = false;
async resolveMx(domain: string): Promise<Array<MxRecord>> {
this.lookups.push(`mx:${domain}`);
if (this.stall) {
return new Promise<Array<MxRecord>>(() => {});
}
if (this.mxErrorCode) {
throw dnsError(this.mxErrorCode);
}
return this.mxRecords;
}
async resolve4(domain: string): Promise<Array<string>> {
this.lookups.push(`a:${domain}`);
if (this.addressErrorCode) {
throw dnsError(this.addressErrorCode);
}
return this.addresses;
}
async resolve6(domain: string): Promise<Array<string>> {
this.lookups.push(`aaaa:${domain}`);
if (this.addressErrorCode) {
throw dnsError(this.addressErrorCode);
}
return this.addresses;
}
}
describe('EmailDnsValidationService', () => {
it('skips the lookup when the instance sends no mail', async () => {
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ENOTFOUND';
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => false,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(resolver.lookups).toEqual([]);
});
it('looks the domain up when the instance sends mail', async () => {
const resolver = new FakeDnsResolver();
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(resolver.lookups).toEqual(['mx:gmail.com']);
});
it('follows the env email flag when no gate is supplied and the operator set nothing', async () => {
expect(Config.email.enabled).toBe(true);
const resolver = new FakeDnsResolver();
const service = new EmailDnsValidationService({resolver, enforceInTestMode: true});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(resolver.lookups).toEqual(['mx:gmail.com']);
});
it('follows the runtime instance email setting over the env flag', async () => {
expect(Config.email.enabled).toBe(true);
await getInstanceConfigRepository().setInstanceIntegrationsConfig({email: {enabled: false}});
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ENOTFOUND';
const service = new EmailDnsValidationService({resolver, enforceInTestMode: true});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(resolver.lookups).toEqual([]);
});
it('still rejects a syntactically broken address when the instance sends no mail', async () => {
const resolver = new FakeDnsResolver();
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => false,
});
expect(await service.hasValidDnsRecords('probe@')).toBe(false);
expect(resolver.lookups).toEqual([]);
});
it('rejects a domain that does not exist', async () => {
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ENOTFOUND';
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(false);
expect(resolver.lookups).toEqual(['mx:asdf.asdf']);
});
it('accepts a domain that publishes address records but no mail records', async () => {
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ENODATA';
resolver.addressErrorCode = null;
resolver.addresses = ['198.51.100.10'];
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(resolver.lookups).toEqual(['mx:mail-less.test', 'a:mail-less.test', 'aaaa:mail-less.test']);
});
it('rejects a domain that publishes neither mail nor address records', async () => {
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ENODATA';
resolver.addressErrorCode = 'ENODATA';
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(false);
expect(resolver.lookups).toEqual(['mx:no-records.test', 'a:no-records.test', 'aaaa:no-records.test']);
});
it('allows the address when the resolver fails transiently', async () => {
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ESERVFAIL';
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
});
it('does not cache a transient failure as a verified domain', async () => {
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ESERVFAIL';
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
positiveTtlMs: ms('30 minutes'),
negativeTtlMs: 0,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(resolver.lookups).toEqual(['mx:asdf.asdf', 'mx:asdf.asdf']);
});
it('caches a verified domain for the positive ttl', async () => {
const resolver = new FakeDnsResolver();
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
positiveTtlMs: ms('30 minutes'),
negativeTtlMs: 0,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(resolver.lookups).toEqual(['mx:gmail.com']);
});
it('gives up on a stalled resolver instead of hanging', async () => {
const resolver = new FakeDnsResolver();
resolver.stall = true;
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
lookupTimeoutMs: 10,
});
const startedAtMs = Date.now();
expect(await service.hasValidDnsRecords('[email protected]')).toBe(true);
expect(Date.now() - startedAtMs).toBeLessThan(ms('5 seconds'));
expect(resolver.lookups).toEqual(['mx:stalled.test']);
});
it('bounds the domain cache', async () => {
const resolver = new FakeDnsResolver();
resolver.mxErrorCode = 'ENOTFOUND';
const service = new EmailDnsValidationService({
resolver,
enforceInTestMode: true,
isEmailEnabled: async () => true,
maxCachedDomains: 2,
});
expect(await service.hasValidDnsRecords('[email protected]')).toBe(false);
expect(await service.hasValidDnsRecords('[email protected]')).toBe(false);
expect(await service.hasValidDnsRecords('[email protected]')).toBe(false);
expect(await service.hasValidDnsRecords('[email protected]')).toBe(false);
expect(resolver.lookups).toEqual(['mx:first.test', 'mx:second.test', 'mx:third.test']);
expect(await service.hasValidDnsRecords('[email protected]')).toBe(false);
expect(resolver.lookups).toEqual(['mx:first.test', 'mx:second.test', 'mx:third.test', 'mx:first.test']);
});
});
+1 -1
View File
@@ -343,7 +343,7 @@ export class ReportService {
const normalizedEmail = this.normalizeEmail(email);
const hasValidDns = await this.emailDnsValidationService.hasValidDnsRecords(normalizedEmail);
if (!hasValidDns) {
throw InputValidationError.fromCode('email', ValidationErrorCodes.INVALID_EMAIL_ADDRESS);
throw InputValidationError.fromCode('email', ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL);
}
const verificationCode = this.generateDsaVerificationCode();
const expiresAt = new Date(Date.now() + ms('10 minutes'));
@@ -178,7 +178,7 @@ export class EmailChangeService {
}
const hasValidDns = await emailDnsValidation.hasValidDnsRecords(trimmedEmail);
if (!hasValidDns) {
throw InputValidationError.fromCode('new_email', ValidationErrorCodes.INVALID_EMAIL_ADDRESS);
throw InputValidationError.fromCode('new_email', ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL);
}
const existing = await users.findByEmail(trimmedEmail.toLowerCase());
if (existing && existing.id !== user.id) {
@@ -3,6 +3,7 @@
import * as Modal from '@app/features/app/components/dialogs/Modal';
import styles from '@app/features/app/components/setup/SelfHostedSetupWizardGate.module.css';
import {
classifySetupUnauthorized,
fetchInstanceConfig,
type SetupBrandingAssetKind,
testSmtpConfig,
@@ -55,6 +56,7 @@ import {fileToBase64} from '@app/features/user/utils/AvatarUtils';
import * as FormUtils from '@app/lib/forms';
import {type ThemeType, ThemeTypes} from '@fluxer/constants/src/UserConstants';
import type {InstanceConfigResponse} from '@fluxer/schema/src/domains/admin/AdminSchemas';
import type {MessageDescriptor} from '@lingui/core';
import {msg} from '@lingui/core/macro';
import {useLingui} from '@lingui/react/macro';
import {ArrowLeftIcon, ArrowRightIcon, CheckIcon, WrenchIcon} from '@phosphor-icons/react';
@@ -92,6 +94,11 @@ const LOAD_ERROR_DESCRIPTOR = msg({
message: 'Could not load the instance configuration. Try reloading the page.',
comment: 'Error shown when the setup wizard fails to load the instance configuration.',
});
const ORIGIN_MISMATCH_DESCRIPTOR = msg({
message:
'The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload.',
comment: 'Error shown when the setup wizard cannot load because the API origin differs from the page origin.',
});
const ASSET_UPLOAD_ERROR_DESCRIPTOR = msg({
message: 'That image could not be used. Try a different file.',
comment: 'Error shown when a branding image fails to upload in the setup wizard.',
@@ -425,7 +432,7 @@ export const SelfHostedSetupWizardGate = observer(() => {
const stepNavigationUnlockTimerRef = useRef<number | null>(null);
const [config, setConfig] = useState<InstanceConfigResponse | null>(null);
const [loadError, setLoadError] = useState(false);
const [loadError, setLoadError] = useState<MessageDescriptor | null>(null);
const [submitting, setSubmitting] = useState(false);
const [submitError, setSubmitError] = useState<string | null>(null);
const [stepNavigationLocked, setStepNavigationLocked] = useState(false);
@@ -531,11 +538,11 @@ export const SelfHostedSetupWizardGate = observer(() => {
}, [authStoreAuthenticated, forceUnauthenticatedSetup]);
const resetStaleSetupSession = useCallback(async () => {
logger.warn('Instance config fetch returned 401 during setup; clearing stale local setup session');
logger.warn('The setup session token was rejected. Clearing the stale local setup session.');
setForceUnauthenticatedSetup(true);
registerFormDraftsRef.current.clear();
setConfig(null);
setLoadError(false);
setLoadError(null);
setSubmitError(null);
setSubmitting(false);
setWizardSnapshot(createSetupWizardSnapshot());
@@ -605,7 +612,7 @@ export const SelfHostedSetupWizardGate = observer(() => {
useEffect(() => {
if (!isAuthenticated || config) return;
let cancelled = false;
setLoadError(false);
setLoadError(null);
void (async () => {
try {
const next = await fetchInstanceConfig();
@@ -613,12 +620,15 @@ export const SelfHostedSetupWizardGate = observer(() => {
hydrateFromConfig(next);
} catch (error) {
if (cancelled) return;
if (error instanceof HttpError && error.status === 401) {
const cause =
error instanceof HttpError && error.status === 401 ? await classifySetupUnauthorized() : 'unknown';
if (cancelled) return;
if (cause === 'stale_session') {
await resetStaleSetupSession();
return;
}
logger.error('Failed to load instance configuration', error);
setLoadError(true);
setLoadError(cause === 'origin_mismatch' ? ORIGIN_MISMATCH_DESCRIPTOR : LOAD_ERROR_DESCRIPTOR);
}
})();
return () => {
@@ -868,7 +878,7 @@ export const SelfHostedSetupWizardGate = observer(() => {
role="alert"
data-flx="app.self-hosted-setup-wizard-gate.load-error"
>
{i18n._(LOAD_ERROR_DESCRIPTOR)}
{i18n._(loadError)}
</p>
</div>
) : (
@@ -1,7 +1,9 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {Endpoints} from '@app/features/app/constants/Endpoints';
import SessionManager from '@app/features/platform/state/AuthSession';
import {http} from '@app/features/platform/transport/RestTransport';
import {Logger} from '@app/features/platform/utils/AppLogger';
import type {
BrandingAssetUploadRequest,
InstanceConfigResponse,
@@ -10,6 +12,8 @@ import type {
InstanceEmailSmtpTestResponse,
} from '@fluxer/schema/src/domains/admin/AdminSchemas';
const logger = new Logger('SetupWizardClient');
export type SetupBrandingAssetKind = BrandingAssetUploadRequest['kind'];
export async function fetchInstanceConfig(): Promise<InstanceConfigResponse> {
@@ -35,3 +39,17 @@ export async function testSmtpConfig(body: InstanceEmailSmtpTestRequest): Promis
const response = await http.post<InstanceEmailSmtpTestResponse>(Endpoints.ADMIN_INSTANCE_CONFIG_SMTP_TESTS, {body});
return response.body;
}
export type SetupUnauthorizedCause = 'stale_session' | 'origin_mismatch' | 'unknown';
export async function classifySetupUnauthorized(): Promise<SetupUnauthorizedCause> {
if (!SessionManager.token) return 'unknown';
if (!http.carriesAuthorization()) return 'origin_mismatch';
try {
const response = await http.get(Endpoints.USER_ME, {mode: 'silent'});
return response.status === 401 ? 'stale_session' : 'unknown';
} catch (error) {
logger.warn('Could not confirm whether the setup session is still valid', error);
return 'unknown';
}
}
@@ -83,6 +83,7 @@ const EMAIL_VALIDATION_CODES = new Set<string>([
ValidationErrorCodes.INVALID_EMAIL_FORMAT,
ValidationErrorCodes.INVALID_EMAIL_LOCAL_PART,
ValidationErrorCodes.INVALID_EMAIL_ADDRESS,
ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL,
]);
const CODE_SESSION_VALIDATION_CODES = new Set<string>([
ValidationErrorCodes.EMAIL_TOKEN_EXPIRED,
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# إشارة مرجعية} few {# إشارات مر
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# مجتمع تم العثور عليه} other {# مجتمعات تم العثور عليها}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# مجموعة غير متاحة مؤقتًا بسبب عطل في مكثف التدفق.} other {# مجموعات غير متاحة مؤقتًا بسبب عطل في مكثف التدفق.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# مجتمع مشترك} other {# مجتمعات م
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# آخر} other {# آخرين}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# مشارك في المكالمة} other {# مشاركين في المكالمة}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {توسيع (# سطر)} other {توسيع (# أسط
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {توسيع (# صف)} other {توسيع (# صفوف)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {توسيع جهاز آخر} other {توسيع # أجهزة أخرى}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {في مكالمة} other {# في مكالمة}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {الانضمام لمكالمة الفيديو (# مشارك)} other {الانضمام لمكالمة الفيديو (# مشاركين)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {متابعة مشاهدة بث واحد وإضافة هذا البث} other {متابعة مشاهدة # بثوث وإضافة هذا البث}}"
@@ -2182,7 +2182,7 @@ msgstr "إجراءات"
msgid "Active"
msgstr "نشط"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "الحساب النشط"
@@ -4578,7 +4578,7 @@ msgstr "بالخارج حاليًا"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "العودة إلى الملصق"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "العودة إلى القناة الصوتية"
@@ -7497,7 +7497,7 @@ msgstr "طي موضوع القناة"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "طي الأجهزة"
@@ -8157,7 +8157,7 @@ msgstr "متصل بالمحادثة الصوتية"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "جارٍ الاتصال..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "تمت إزالة الاتصال"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "إحصائيات الاتصال"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "تم النسخ"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "تم نسخ إحصائيات JSON إلى الحافظة"
@@ -8499,11 +8499,6 @@ msgstr "تم نسخ الرابط إلى الحافظة"
msgid "Copy"
msgstr "نسخ"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "نسخ كـ JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "نسخ رابط البانر"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "نسخ معلومات الإصدار"
@@ -8743,8 +8738,8 @@ msgstr "انسخ مفتاح الإعداد"
msgid "Copy stack trace"
msgstr "نسخ تتبع المكدس"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "نسخ إحصائيات JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "انسخ مفتاح الإعداد في تطبيق المصادقة الخاص بك."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "نسخ معرّف المستخدم"
@@ -8797,7 +8792,7 @@ msgstr "نسخ الفيديو"
msgid "Copy video link"
msgstr "نسخ رابط الفيديو"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "نسخ تشخيصات الصوت"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "تعذر فك ترميز ملف الصوت هذا."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "تعذر تحميل إعدادات المثيل. حاول إعادة تحميل الصفحة."
@@ -11424,7 +11419,7 @@ msgstr "قطع اتصال المقبس"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "غير متصل"
@@ -12256,7 +12251,7 @@ msgstr "تعديل أو حذف الرموز التعبيرية والملصقا
msgid "Edit overwrites for roles and members in this channel."
msgstr "تعديل التجاوزات للأدوار والأعضاء في هذه القناة."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "أدخل الرمز"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "دخول وضع ملء الشاشة"
@@ -13277,7 +13272,7 @@ msgstr "الشاشة بأكملها"
msgid "Entire system"
msgstr "النظام بأكمله"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "صوت النظام بالكامل"
@@ -13478,7 +13473,7 @@ msgstr "خروج"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "الخروج من وضع ملء الشاشة"
@@ -14387,7 +14382,7 @@ msgstr "أكمل إعداد الحساب أولاً"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "إنهاء الإعداد"
@@ -16830,7 +16825,7 @@ msgstr "في وضع \"نظام التشغيل\"، تكون القواميس ال
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "في المتصفح، لا تعمل ميزة الضغط والتحدث إلا عندما تكون علامة تبويب {PRODUCT_NAME} في التركيز. ثبّت تطبيق سطح المكتب لاستخدام ميزة الضغط والتحدث على مستوى النظام."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "في مكالمة"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "جارٍ تحميل الوجهات…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "جارٍ تحميل إعدادات المثيل"
@@ -18885,7 +18880,7 @@ msgstr "برامج ضارة، أو سرقة بيانات اعتماد، أو م
msgid "Manage"
msgstr "إدارة"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "إدارة الحسابات"
@@ -21123,7 +21118,7 @@ msgstr "الأحدث أولاً"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "الرموز التعبيرية غير المتحركة ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "بلا"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "أُعيد الاتصال بنجاح. اختر شاشة مرة أخرى إذا أردت استئناف بثك السابق."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "جارٍ إعادة الاتصال..."
@@ -25097,7 +25092,7 @@ msgstr "تم نسخ المرجع."
msgid "Referral parameters"
msgstr "معلمات الإحالة"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "تحديث مصادر الصوت"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "إيذاء النفس أو الانتحار"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "إعداد الاستضافة الذاتية"
@@ -28220,7 +28215,7 @@ msgstr "الجلسات"
msgid "Set {fieldNode} to {0}."
msgstr "تم تعيين {fieldNode} إلى {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "تعيين حالة مخصصة"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "هل تريد تأجيل هذا التحقق؟"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "إعداد {productName}"
@@ -30929,7 +30924,7 @@ msgstr "السويدية"
msgid "Switch account"
msgstr "تبديل الحساب"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "تبديل الحسابات"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "طلب الصداقة هذا لم يعد متاحًا. حدّث الصفحة وحاول مرة أخرى."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "لم يمكن استخدام هذه الصورة. جرب ملفًا مختلفًا."
@@ -31617,6 +31612,11 @@ msgstr "هذا كل ما في الأمر."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "علامة #0000 محجوزة لمشتركي Visionary. لم يعد Visionary متاحًا للشراء."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "صفحة الإعداد لا يمكن تحميلها لأن مصدر واجهة برمجة التطبيقات مختلف عن مصدر هذه الصفحة. تحقق من المصدر العام والمنفذ الذي تم تكوين هذا المثيل به، ثم أعد التحميل."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "تعطل التطبيق"
@@ -34049,7 +34049,7 @@ msgstr "مستخدم غير معروف"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "مستخدم غير معروف"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "عرض المكالمة"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "عرض عناصر التحكم في المكالمة"
@@ -37928,12 +37928,12 @@ msgstr "لن تتمكن من حذف رسائلك المرسلة بعد حذف ح
msgid "You will still need to finish the email step."
msgstr "لا يزال يتعين عليك إكمال خطوة البريد الإلكتروني."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "لن تتلقى إشعارات على سطح المكتب"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "ستظهر غير متصل"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# отметка} other {# отметки}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# общност намерена} other {# общности намерени}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# общност е временно недостъпна поради неизправност на флукс кондензатора.} other {# общности са временно недостъпни поради неизправност на флукс кондензатора.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# обща общност} other {# общи общ
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# друг} other {# други}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# участник в разговора} other {# участници в разговора}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Разгъване (1 ред)} other {Разгъв
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Разгънете (# ред)} other {Разгънете (# реда)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Разгъване на # друго устройство} other {Разгъване на # други устройства}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {В разговор} other {# в разговор}}
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Присъединяване към видео разговор (# участник)} other {Присъединяване към видео разговор (# участници)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Продължи да гледаш # поток и добави този} other {Продължи да гледаш # потока и добави този}}"
@@ -2182,7 +2182,7 @@ msgstr "Действия"
msgid "Active"
msgstr "Активен"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Активен акаунт"
@@ -4578,7 +4578,7 @@ msgstr "В момента ме няма"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Обратно към стикера"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Обратно към гласовия канал"
@@ -7497,7 +7497,7 @@ msgstr "Скрий темата на канала"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Свиване на устройствата"
@@ -8157,7 +8157,7 @@ msgstr "Свързан към гласов чат"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Свързване..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Връзката е премахната"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Статистика на връзката"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Копирано"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Копирахте JSON на статистиката в клипборда"
@@ -8499,11 +8499,6 @@ msgstr "URL адресът е копиран в клипборда"
msgid "Copy"
msgstr "Копирай"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Копирай като JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Копирай URL на банер"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Копирай инфо за версията"
@@ -8743,8 +8738,8 @@ msgstr "Копиране на ключа за настройка"
msgid "Copy stack trace"
msgstr "Копиране на стека от извиквания"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Копирай JSON на статистиките"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Копирайте ключа за настройка във вашето приложение за удостоверяване."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Копирай потребителски ID"
@@ -8797,7 +8792,7 @@ msgstr "Копирай видеоклип"
msgid "Copy video link"
msgstr "Копиране на връзка към видеоклипа"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Копиране на гласова диагностика"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Не може да се декодира този аудиофайл."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Не успяхме да заредим конфигурацията на инстанцията. Опитайте да презаредите страницата."
@@ -11424,7 +11419,7 @@ msgstr "Прекъсване на връзката"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Прекъсната връзка"
@@ -12256,7 +12251,7 @@ msgstr "Редактиране или изтриване на емоджита
msgid "Edit overwrites for roles and members in this channel."
msgstr "Редактиране на отменяния за роли и членове в този канал."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Въвеждане на код"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "На цял екран"
@@ -13277,7 +13272,7 @@ msgstr "Цял екран"
msgid "Entire system"
msgstr "Цялата система"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Целия системен звук"
@@ -13478,7 +13473,7 @@ msgstr "Изход"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Изход от цял екран"
@@ -14387,7 +14382,7 @@ msgstr "Първо завърши настройката на профила"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Завърши настройката"
@@ -16830,7 +16825,7 @@ msgstr "В режим \"Операционна система\" посочени
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "В браузър функцията \"натисни и говори\" работи само докато разделът на {PRODUCT_NAME} е активен. Инсталирайте настолното приложение за \"натисни и говори\" в цялата система."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "В разговор"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Зареждане на дестинации…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Зареждане на конфигурацията на инстанцията"
@@ -18885,7 +18880,7 @@ msgstr "Зловреден софтуер, кражба на данни или
msgid "Manage"
msgstr "Управление"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Управление на профили"
@@ -21123,7 +21118,7 @@ msgstr "Първо най-новите"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Неанимирани емоджита ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Няма"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Връзката е възстановена. Изберете екран отново, ако искате да продължите предишния си поток."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Повторно свързване..."
@@ -25097,7 +25092,7 @@ msgstr "Връзката е копирана."
msgid "Referral parameters"
msgstr "Параметри за препоръка"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Обнови аудиоизточниците"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Самоувреждане или самоубийство"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Настройка за самостоятелно хостване"
@@ -28220,7 +28215,7 @@ msgstr "Сесии"
msgid "Set {fieldNode} to {0}."
msgstr "Задайте {fieldNode} на {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Задаване на персонализиран статус"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Отложите ли тази проверка?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Настройване на {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Шведски"
msgid "Switch account"
msgstr "Превключване на профил"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Смени профила"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Тази покана за приятелство вече не е налична. Опреснете и опитайте отново."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Не може да се използва това изображение. Опитайте с друг файл."
@@ -31617,6 +31612,11 @@ msgstr "Това е всичко."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Тагът #0000 е запазен за абонати на Visionary. Visionary вече не е наличен за закупуване."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API е на различен домейн от тази страница, така че заявките за настройка се изпращат без вашата сесия. Проверете публичния домейн и порт, с които е конфигуриран този екземпляр, след което презаредете."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Приложението срина"
@@ -34049,7 +34049,7 @@ msgstr "неизвестен потребител"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Неизвестен потребител"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Преглед на обаждането"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Вижте контролите на разговора"
@@ -37928,12 +37928,12 @@ msgstr "Няма да можете да изтриете изпратените
msgid "You will still need to finish the email step."
msgstr "Ще трябва да завършите и стъпката с имейла."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Няма да получавате известия на компютъра си"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Ще изглеждате офлайн"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# záložka} few {# záložky} many {# záložek} o
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# komunita nalezena} other {# komunit nalezeno} few {# komunity nalezeny}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# komunita je dočasně nedostupná kvůli poruše \"flux kondenzátoru\".} few {# komunity jsou dočasně nedostupné kvůli poruše \"flux kondenzátoru\".} many {# komunit je dočasně nedostupných kvůli poruše \"flux kondenzátoru\".} other {# komunit je dočasně nedostupných kvůli poruše \"flux kondenzátoru\".}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# společná komunita} other {# společné komunity
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# další} few {# další} many {# dalších} other {# dalších}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# účastník hovoru} few {# účastníci hovoru} many {# účastníka hovoru} other {# účastníků hovoru}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Rozbalit (1 řádek)} few {Rozbalit (# řádky)} ma
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Rozbalit (# řádek)} other {Rozbalit (# řádky)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Rozbalit # další zařízení} other {Rozbalit # dalších zařízení}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {V hovoru} other {# v hovoru}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Připojit se k videohovoru (1 účastník)} few {Připojit se k videohovoru (# účastníci)} many {Připojit se k videohovoru (# účastníků)} other {Připojit se k videohovoru (# účastníků)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Sledovat # stream a přidat tento} other {Sledovat # streamy a přidat tento}}"
@@ -2182,7 +2182,7 @@ msgstr "Akce"
msgid "Active"
msgstr "Aktivní"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktivní účet"
@@ -4578,7 +4578,7 @@ msgstr "Momentálně pryč"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Zpět k nálepce"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Zpět do hlasového kanálu"
@@ -7497,7 +7497,7 @@ msgstr "Sbalit téma kanálu"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Sbalit zařízení"
@@ -8157,7 +8157,7 @@ msgstr "Připojeno k hlasovému chatu"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Připojování..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Spojení odebráno"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Statistiky připojení"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Zkopírováno"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistiky JSON zkopírovány do schránky"
@@ -8499,11 +8499,6 @@ msgstr "Adresa URL zkopírována do schránky"
msgid "Copy"
msgstr "Kopírovat"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopírovat jako JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopírovat URL banneru"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopírovat informace o sestavení"
@@ -8743,8 +8738,8 @@ msgstr "Zkopírovat klíč pro nastavení"
msgid "Copy stack trace"
msgstr "Kopírovat zásobník volání"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopírovat JSON statistik"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Zkopírujte klíč pro nastavení do vaší aplikace pro ověřování."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopírovat ID uživatele"
@@ -8797,7 +8792,7 @@ msgstr "Kopírovat video"
msgid "Copy video link"
msgstr "Kopírovat odkaz na video"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopírovat diagnostiku hlasu"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Tento zvukový soubor se nepodařilo dekódovat."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Nepodařilo se načíst konfiguraci instance. Zkuste znovu načíst stránku."
@@ -11424,7 +11419,7 @@ msgstr "Odpojit socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Odpojeno"
@@ -12256,7 +12251,7 @@ msgstr "Upravit nebo smazat emoji a nálepky vytvořené jinými členy."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Upravit přepsání pro role a členy v tomto kanálu."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Zadejte kód"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Přejít na celou obrazovku"
@@ -13277,7 +13272,7 @@ msgstr "Celá obrazovka"
msgid "Entire system"
msgstr "Celý systém"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Celý zvuk systému"
@@ -13478,7 +13473,7 @@ msgstr "Odejít"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Ukončit režim celé obrazovky"
@@ -14387,7 +14382,7 @@ msgstr "Nejprve dokončete nastavení účtu"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Dokončit nastavení"
@@ -16830,7 +16825,7 @@ msgstr "V režimu \"Operační systém\" jsou výše uvedené slovníky pouze do
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "V prohlížeči funguje funkce push-to-talk pouze, když je karta {PRODUCT_NAME} aktivní. Nainstalujte si desktopovou aplikaci pro funkci push-to-talk v celém systému."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "V hovoru"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Načítání cílů…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Načítání konfigurace instance"
@@ -18885,7 +18880,7 @@ msgstr "Malware, krádež přihlašovacích údajů nebo škodlivé soubory."
msgid "Manage"
msgstr "Spravovat"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Spravovat účty"
@@ -21123,7 +21118,7 @@ msgstr "Nejnovější nahoře"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Neanimované emoji ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Žádné"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Opětovné připojení proběhlo úspěšně. Pokud chcete pokračovat v předchozím streamu, vyberte obrazovku znovu."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Opětovné připojování..."
@@ -25097,7 +25092,7 @@ msgstr "Odkaz zkopírován."
msgid "Referral parameters"
msgstr "Parametry doporučení"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Obnovit zdroje zvuku"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Sebepoškozování nebo sebevražda"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Nastavení vlastního hostování"
@@ -28220,7 +28215,7 @@ msgstr "Relace"
msgid "Set {fieldNode} to {0}."
msgstr "Nastaveno {fieldNode} na {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Nastavit vlastní status"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Odložit tuto kontrolu?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Nastavit {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Švédština"
msgid "Switch account"
msgstr "Přepnout účet"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Přepnout účty"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Tato žádost o přátelství již není k dispozici. Obnovte stránku a zkuste to znovu."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Tento obrázek nebylo možné použít. Zkuste jiný soubor."
@@ -31617,6 +31612,11 @@ msgstr "To je vše."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Tag #0000 je rezervován pro předplatitele Visionary. Visionary už není k dispozici k zakoupení."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API je na jiné doméně než tato stránka, takže žádosti o nastavení se odesílají bez vaší relace. Zkontrolujte veřejnou doménu a port, se kterými je tato instance nakonfigurována, a poté znovu načtěte."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Aplikace spadla"
@@ -34049,7 +34049,7 @@ msgstr "neznámý uživatel"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Neznámý uživatel"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Zobrazit hovor"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Zobrazit ovládání hovoru"
@@ -37928,12 +37928,12 @@ msgstr "Odeslané zprávy po smazání účtu nebude možné odstranit"
msgid "You will still need to finish the email step."
msgstr "Stále bude potřeba dokončit krok s e-mailem."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Na počítači nebudete dostávat oznámení"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Budete vypadat offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# bogmærke} other {# bogmærker}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# fællesskab fundet} other {# fællesskaber fundet}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# fællesskab er midlertidigt utilgængeligt på grund af en fejl i fluxkondensatoren.} other {# fællesskaber er midlertidigt utilgængelige på grund af en fejl i fluxkondensatoren.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# fælles fællesskab} other {# fælles fællesskab
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# anden} other {# andre}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# deltager i opkald} other {# deltagere i opkald}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Vis (# linje)} other {Vis (# linjer)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Vis (# række)} other {Vis (# rækker)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Udvid # anden enhed} other {Udvid # andre enheder}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {I opkald} other {# i opkald}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Deltag i videoopkald (# deltager)} other {Deltag i videoopkald (# deltagere)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "Fortsæt med at se # {count, plural, one {stream og tilføj denne} other {streams og tilføj denne}}"
@@ -2182,7 +2182,7 @@ msgstr "Handlinger"
msgid "Active"
msgstr "Aktiv"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktiv konto"
@@ -4578,7 +4578,7 @@ msgstr "Ikke til stede lige nu"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Tilbage til sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Tilbage til talechat"
@@ -7497,7 +7497,7 @@ msgstr "Skjul kanalemne"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Skjul enheder"
@@ -8157,7 +8157,7 @@ msgstr "Forbundet til talechat"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Opretter forbindelse..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Forbindelse fjernet"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Forbindelsesstatistik"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Kopieret"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistik-JSON kopieret til udklipsholder"
@@ -8499,11 +8499,6 @@ msgstr "URL kopieret til udklipsholder"
msgid "Copy"
msgstr "Kopiér"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopiér som JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopiér banner-URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopiér buildinfo"
@@ -8743,8 +8738,8 @@ msgstr "Kopiér opsætelsesnøgle"
msgid "Copy stack trace"
msgstr "Kopiér staksporing"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopiér statistik (JSON)"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopiér opsætelsesnøglen ind i din autentifikationsapp."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopiér bruger-id"
@@ -8797,7 +8792,7 @@ msgstr "Kopiér video"
msgid "Copy video link"
msgstr "Kopiér videolink"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopiér stemmediagnostik"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Kunne ikke afkode denne lydfil."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Kunne ikke indlæse instanskonfigurationen. Prøv at genindlæse siden."
@@ -11424,7 +11419,7 @@ msgstr "Afbryd forbindelse til socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Afbrudt"
@@ -12256,7 +12251,7 @@ msgstr "Rediger eller slet emoji og stickers, der er oprettet af andre medlemmer
msgid "Edit overwrites for roles and members in this channel."
msgstr "Rediger tilsidesættelser for roller og medlemmer i denne kanal."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Indtast kode"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Vis i fuld skærm"
@@ -13277,7 +13272,7 @@ msgstr "Hele skærmen"
msgid "Entire system"
msgstr "Hele systemet"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Hele systemets lyd"
@@ -13478,7 +13473,7 @@ msgstr "Forlad"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Afslut fuldskærm"
@@ -14387,7 +14382,7 @@ msgstr "Gør først kontoopsætningen færdig"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Afslut opsætning"
@@ -16830,7 +16825,7 @@ msgstr "I tilstanden \"Operativsystem\" er ordbøgerne ovenfor vejledende. {PROD
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "I en browser fungerer push-to-talk kun, når fanen {PRODUCT_NAME} er i fokus. Installer desktopappen for push-to-talk på hele systemet."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "I et opkald"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Indlæser destinationer…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Indlæser instanskonfiguration"
@@ -18885,7 +18880,7 @@ msgstr "Malware, tyveri af loginoplysninger eller skadelige filer."
msgid "Manage"
msgstr "Administrer"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Administrer konti"
@@ -21123,7 +21118,7 @@ msgstr "Nyeste først"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Ikke-animerede emojis ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Ingen"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Forbindelsen er genoprettet. Vælg en skærm igen, hvis du vil genoptage din tidligere stream."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Genopretter forbindelse..."
@@ -25097,7 +25092,7 @@ msgstr "Reference kopieret."
msgid "Referral parameters"
msgstr "Henvisningsparametre"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Opdater lydkilder"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Selvskade eller selvmord"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Opsætning til selv-hosting"
@@ -28220,7 +28215,7 @@ msgstr "Sessioner"
msgid "Set {fieldNode} to {0}."
msgstr "Sæt {fieldNode} til {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Angiv en brugerdefineret status"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Gem denne kontrol til senere?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Opsæt {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Svensk"
msgid "Switch account"
msgstr "Skift konto"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Skift konto"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Den venneanmodning er ikke længere tilgængelig. Opdater og prøv igen."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Det billede kunne ikke bruges. Prøv en anden fil."
@@ -31617,6 +31612,11 @@ msgstr "Det var alle sammen."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Tagget #0000 er reserveret til Visionary-abonnenter. Visionary kan ikke længere købes."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API'en er på et andet domæne end denne side, så opsætningsanmodninger sendes uden din session. Tjek det offentlige domæne og port, som denne instans er konfigureret med, og genindlæs derefter."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Appen gik ned"
@@ -34049,7 +34049,7 @@ msgstr "Ukendt bruger"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Ukendt bruger"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Se opkald"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Vis opkaldskontroller"
@@ -37928,12 +37928,12 @@ msgstr "Du kan ikke slette dine sendte beskeder, efter din konto er blevet slett
msgid "You will still need to finish the email step."
msgstr "Du skal stadig afslutte e-mail-trinnet."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Du modtager ikke notifikationer på computeren"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Du vises som offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# Lesezeichen} other {# Lesezeichen}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# Community gefunden} other {# Communitys gefunden}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# Community ist aufgrund einer Fehlfunktion des Fluxkompensators vorübergehend nicht verfügbar.} other {# Communitys sind aufgrund einer Fehlfunktion des Fluxkompensators vorübergehend nicht verfügbar.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# gemeinsame Community} other {# gemeinsame Communi
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# andere} other {# andere}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# Teilnehmer im Anruf} other {#Teilnehmer im Anruf}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Erweitern (# Zeile)} other {Erweitern (# Zeilen)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Erweitern (# Zeile)} other {Erweitern (# Zeilen)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Einen weiteren Teilnehmer einblenden} other {# weitere Teilnehmer einblenden}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Im Anruf} other {# im Anruf}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Videoanruf beitreten (# Teilnehmer)} other {Videoanruf beitreten (# Teilnehmer)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Behalte # Stream im Auge und füge diesen hinzu} other {Behalte # Streams im Auge und füge diesen hinzu}}"
@@ -2182,7 +2182,7 @@ msgstr "Aktionen"
msgid "Active"
msgstr "Aktiv"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktiver Account"
@@ -4578,7 +4578,7 @@ msgstr "Gerade abwesend"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Zurück zum Sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Zurück zum Sprachkanal"
@@ -7497,7 +7497,7 @@ msgstr "Kanalthema einklappen"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Geräte einklappen"
@@ -8157,7 +8157,7 @@ msgstr "Mit Sprachkanal verbunden"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Verbindung wird hergestellt..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Verbindung entfernt"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Verbindungsstatistik"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Kopiert"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistik-JSON in die Zwischenablage kopiert"
@@ -8499,11 +8499,6 @@ msgstr "URL in Zwischenablage kopiert"
msgid "Copy"
msgstr "Kopieren"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Als JSON kopieren"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Banner-URL kopieren"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Build-Info kopieren"
@@ -8743,8 +8738,8 @@ msgstr "Schlüssel zum Einrichten kopieren"
msgid "Copy stack trace"
msgstr "Stack-Trace kopieren"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Statistik-JSON kopieren"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopiere den Schlüssel in deine Authentifizierungs-App."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Nutzer-ID kopieren"
@@ -8797,7 +8792,7 @@ msgstr "Video kopieren"
msgid "Copy video link"
msgstr "Videolink kopieren"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Sprachdiagnose kopieren"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Audiodatei konnte nicht dekodiert werden."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Die Instanzkonfiguration konnte nicht geladen werden. Versuche, die Seite neu zu laden."
@@ -11424,7 +11419,7 @@ msgstr "Socket trennen"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Verbindung getrennt"
@@ -12256,7 +12251,7 @@ msgstr "Emojis und Sticker bearbeiten oder löschen, die von anderen Mitgliedern
msgid "Edit overwrites for roles and members in this channel."
msgstr "Berechtigungen für Rollen und Mitglieder in diesem Kanal bearbeiten."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Code eingeben"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Vollbildmodus aktivieren"
@@ -13277,7 +13272,7 @@ msgstr "Gesamter Bildschirm"
msgid "Entire system"
msgstr "Gesamtes System"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Gesamtes System-Audio"
@@ -13478,7 +13473,7 @@ msgstr "Verlassen"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Vollbild verlassen"
@@ -14387,7 +14382,7 @@ msgstr "Schließe zuerst die Accounteinrichtung ab"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Einrichtung abschließen"
@@ -16830,7 +16825,7 @@ msgstr "Im Modus \"Betriebssystem\" sind die oben aufgeführten Wörterbücher b
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Im Browser funktioniert Push-to-Talk nur, wenn der Tab \"{PRODUCT_NAME}\" im Fokus ist. Installiere die Desktop-App für systemweites Push-to-Talk."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Im Anruf"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Ziele werden geladen …"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Instanzkonfiguration wird geladen"
@@ -18885,7 +18880,7 @@ msgstr "Malware, Zugangsdaten-Diebstahl oder schädliche Dateien."
msgid "Manage"
msgstr "Verwalten"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Accounts verwalten"
@@ -21123,7 +21118,7 @@ msgstr "Neueste zuerst"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Nicht animierte Emojis ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Keine"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Wiederherstellung erfolgreich. Wähle erneut einen Bildschirm aus, wenn du deinen vorherigen Stream fortsetzen möchtest."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Verbindung wird wiederhergestellt..."
@@ -25097,7 +25092,7 @@ msgstr "Referenz kopiert."
msgid "Referral parameters"
msgstr "Empfehlungsparameter"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Audioquellen aktualisieren"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Selbstverletzung oder Suizid"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Einrichtung für selbst gehostete Installationen"
@@ -28220,7 +28215,7 @@ msgstr "Sitzungen"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} auf {0} gesetzt."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Einen eigenen Status festlegen"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Diese Prüfung beiseitelegen?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "{productName} einrichten"
@@ -30929,7 +30924,7 @@ msgstr "Schwedisch"
msgid "Switch account"
msgstr "Konto wechseln"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Accounts wechseln"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Diese Freundschaftsanfrage ist nicht mehr verfügbar. Aktualisiere die Seite und versuche es erneut."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Dieses Bild konnte nicht verwendet werden. Versuche eine andere Datei."
@@ -31617,6 +31612,11 @@ msgstr "Das waren alle."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Der Tag #0000 ist für Visionary-Abonnenten reserviert. Visionary kann nicht mehr erworben werden."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "Die API hat einen anderen Ursprung als diese Seite, daher werden Setup-Anfragen ohne deine Sitzung gesendet. Überprüfe den öffentlichen Ursprung und Port, mit dem diese Instanz konfiguriert ist, und lade dann neu."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Die App ist abgestürzt"
@@ -34049,7 +34049,7 @@ msgstr "Unbekannter Nutzer"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Unbekannter Nutzer"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Anruf ansehen"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Anrufsteuerung anzeigen"
@@ -37928,12 +37928,12 @@ msgstr "Gesendete Nachrichten können nach dem Löschen deines Accounts nicht me
msgid "You will still need to finish the email step."
msgstr "Du musst den E-Mail-Schritt noch abschließen."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Du erhältst keine Benachrichtigungen auf dem Desktop"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Du bist offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# σελιδοδείκτη} other {# σελιδοδ
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# κοινότητα βρέθηκε} other {# κοινότητες βρέθηκαν}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# κοινότητα είναι προσωρινά μη διαθέσιμη λόγω δυσλειτουργίας του πυκνωτή ροής.} other {# κοινότητες είναι προσωρινά μη διαθέσιμες λόγω δυσλειτουργίας του πυκνωτή ροής.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# κοινή κοινότητα} other {# κοιν
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# άλλος} other {# άλλοι}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# συμμετέχων στην κλήση} other {# συμμετέχοντες στην κλήση}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Ανάπτυξη (# γραμμή)} other {Ανάπ
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Εμφάνιση (# γραμμής)} other {Εμφάνιση (# γραμμών)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Ανάπτυξη # άλλης συσκευής} other {Ανάπτυξη # άλλων συσκευών}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Σε κλήση} other {# σε κλήση}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Συμμετοχή σε βιντεοκλήση (# συμμετέχων)} other {Συμμετοχή σε βιντεοκλήση (# συμμετέχοντες)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Συνέχισε να παρακολουθείς # ροή και πρόσθεσε αυτήν} other {Συνέχισε να παρακολουθείς # ροές και πρόσθεσε αυτήν}}"
@@ -2182,7 +2182,7 @@ msgstr "Ενέργειες"
msgid "Active"
msgstr "Ενεργό"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Ενεργός λογαριασμός"
@@ -4578,7 +4578,7 @@ msgstr "Εκτός τώρα"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Επιστροφή στο αυτοκόλλητο"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Επιστροφή στο κανάλι φωνής"
@@ -7497,7 +7497,7 @@ msgstr "Σύμπτυξη θέματος καναλιού"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Σύμπτυξη συσκευών"
@@ -8157,7 +8157,7 @@ msgstr "Συνδεδεμένοι στην ομιλία"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Σύνδεση..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Η σύνδεση καταργήθηκε"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Στατιστικά σύνδεσης"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Αντιγράφηκε"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Αντιγράφηκαν τα στατιστικά JSON στο πρόχειρο"
@@ -8499,11 +8499,6 @@ msgstr "Αντιγράφηκε η διεύθυνση URL στο πρόχειρο
msgid "Copy"
msgstr "Αντιγραφή"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Αντιγραφή ως JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Αντιγραφή URL banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Αντιγραφή πληροφοριών έκδοσης"
@@ -8743,8 +8738,8 @@ msgstr "Αντιγραφή κλειδιού εγκατάστασης"
msgid "Copy stack trace"
msgstr "Αντιγραφή ίχνους στοίβας"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Αντιγραφή στατιστικών JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Αντιγράψτε το κλειδί εγκατάστασης στην εφαρμογή ελέγχου ταυτότητας."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Αντιγραφή αναγνωριστικού χρήστη"
@@ -8797,7 +8792,7 @@ msgstr "Αντιγραφή βίντεο"
msgid "Copy video link"
msgstr "Αντιγραφή συνδέσμου βίντεο"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Αντιγραφή διαγνωστικών φωνής"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Δεν ήταν δυνατή η αποκωδικοποίηση αυτού του αρχείου ήχου."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Δεν ήταν δυνατή η φόρτωση της διαμόρφωσης της παρουσίας. Δοκιμάστε να ανανεώσετε τη σελίδα."
@@ -11424,7 +11419,7 @@ msgstr "Αποσύνδεση socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Αποσυνδέθηκε"
@@ -12256,7 +12251,7 @@ msgstr "Επεξεργασία ή διαγραφή emoji και αυτοκόλλ
msgid "Edit overwrites for roles and members in this channel."
msgstr "Επεξεργασία εξαιρέσεων για ρόλους και μέλη σε αυτό το κανάλι."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Εισαγωγή κωδικού"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Πλήρης οθόνη"
@@ -13277,7 +13272,7 @@ msgstr "Ολόκληρη η οθόνη"
msgid "Entire system"
msgstr "Ολόκληρο το σύστημα"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Ήχος ολόκληρου του συστήματος"
@@ -13478,7 +13473,7 @@ msgstr "Έξοδος"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Έξοδος από πλήρη οθόνη"
@@ -14387,7 +14382,7 @@ msgstr "Ολοκλήρωσε πρώτα τη ρύθμιση του λογαρι
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Ολοκλήρωση ρύθμισης"
@@ -16830,7 +16825,7 @@ msgstr "Στη λειτουργία \"Λειτουργικό σύστημα\",
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Σε ένα πρόγραμμα περιήγησης, η λειτουργία push-to-talk λειτουργεί μόνο όταν η καρτέλα {PRODUCT_NAME} είναι ενεργή. Εγκαταστήστε την εφαρμογή υπολογιστή για push-to-talk σε όλο το σύστημα."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Σε κλήση"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Φόρτωση προορισμών…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Φόρτωση διαμόρφωσης παρουσίας"
@@ -18885,7 +18880,7 @@ msgstr "Κακόβουλο λογισμικό, κλοπή διαπιστευτη
msgid "Manage"
msgstr "Διαχείριση"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Διαχείριση λογαριασμών"
@@ -21123,7 +21118,7 @@ msgstr "Πιο πρόσφατα πρώτα"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Μη κινούμενα emoji ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Καμία"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Η επανασύνδεση ήταν επιτυχής. Επιλέξτε ξανά μια οθόνη, αν θέλετε να συνεχίσετε την προηγούμενη ροή σας."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Επανασύνδεση..."
@@ -25097,7 +25092,7 @@ msgstr "Αντιγράφηκε η αναφορά."
msgid "Referral parameters"
msgstr "Παράμετροι παραπομπής"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Ανανέωση πηγών ήχου"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Αυτοτραυματισμός ή αυτοκτονία"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Ρύθμιση αυτόνομης φιλοξενίας"
@@ -28220,7 +28215,7 @@ msgstr "Συνδέσεις"
msgid "Set {fieldNode} to {0}."
msgstr "Ορίστηκε το {fieldNode} σε {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Ορισμός προσαρμοσμένης κατάστασης"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Αναβολή αυτού του ελέγχου;"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Ρύθμιση του {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Σουηδικά"
msgid "Switch account"
msgstr "Αλλαγή λογαριασμού"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Εναλλαγή λογαριασμών"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Αυτό το αίτημα φιλίας δεν είναι πλέον διαθέσιμο. Ανανεώστε και δοκιμάστε ξανά."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Αυτή η εικόνα δεν μπορούσε να χρησιμοποιηθεί. Δοκιμάστε ένα διαφορετικό αρχείο."
@@ -31617,6 +31612,11 @@ msgstr "Αυτά ήταν όλα."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Το tag #0000 είναι δεσμευμένο για τους συνδρομητές Visionary. Το Visionary δεν είναι πλέον διαθέσιμο για αγορά."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "Το API βρίσκεται σε διαφορετική προέλευση από αυτήν τη σελίδα, οπότε τα αιτήματα ρύθμισης αποστέλλονται χωρίς τη συνεδρία σας. Ελέγξτε την δημόσια προέλευση και τη θύρα με την οποία έχει ρυθμιστεί αυτή η παρουσία, και στη συνέχεια κάντε επανεκκίνηση."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Η εφαρμογή έκλεισε απροσδόκητα"
@@ -34049,7 +34049,7 @@ msgstr "άγνωστος χρήστης"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Άγνωστος χρήστης"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Προβολή κλήσης"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Προβολή στοιχείων κλήσης"
@@ -37928,12 +37928,12 @@ msgstr "Δεν θα μπορείτε να διαγράψετε τα απεστα
msgid "You will still need to finish the email step."
msgstr "Θα χρειαστεί να ολοκληρώσεις ακόμα το βήμα του email."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Δεν θα λαμβάνεις ειδοποιήσεις στην επιφάνεια εργασίας"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Θα εμφανίζεστε εκτός σύνδεσης"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# bookmark} other {# bookmarks}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# community found} other {# communities found}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# mutual community} other {# mutual communities}}"
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# other} other {# others}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# participant in call} other {# participants in call}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Expand (# line)} other {Expand (# lines)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Expand # other device} other {Expand # other devices}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {In call} other {# in call}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
@@ -2182,7 +2182,7 @@ msgstr "Actions"
msgid "Active"
msgstr "Active"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Active account"
@@ -4578,7 +4578,7 @@ msgstr "Away right now"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Back to sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Back to voice channel"
@@ -7497,7 +7497,7 @@ msgstr "Collapse channel topic"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Collapse devices"
@@ -8157,7 +8157,7 @@ msgstr "Connected to voice"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Connecting..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Connection removed"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Connection stats"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Copied"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Copied stats JSON to clipboard"
@@ -8499,11 +8499,6 @@ msgstr "URL copied to clipboard"
msgid "Copy"
msgstr "Copy"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copy as JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Copy banner URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copy build info"
@@ -8743,8 +8738,8 @@ msgstr "Copy setup key"
msgid "Copy stack trace"
msgstr "Copy stack trace"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copy stats JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copy the setup key into your authenticator app."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copy user ID"
@@ -8797,7 +8792,7 @@ msgstr "Copy video"
msgid "Copy video link"
msgstr "Copy video link"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copy voice diagnostics"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Could not decode this audio file."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Could not load the instance configuration. Try reloading the page."
@@ -11424,7 +11419,7 @@ msgstr "Disconnect socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Disconnected"
@@ -12256,7 +12251,7 @@ msgstr "Edit or delete emoji and stickers created by other members."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edit overwrites for roles and members in this channel."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Enter code"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Enter full screen"
@@ -13277,7 +13272,7 @@ msgstr "Entire screen"
msgid "Entire system"
msgstr "Entire system"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Entire system audio"
@@ -13478,7 +13473,7 @@ msgstr "Exit"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Exit full screen"
@@ -14387,7 +14382,7 @@ msgstr "Finish account setup first"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Finish setup"
@@ -16830,7 +16825,7 @@ msgstr "In \"Operating system\" mode, the dictionaries listed above are advisory
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "In a call"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Loading destinations…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Loading instance configuration"
@@ -18885,7 +18880,7 @@ msgstr "Malware, credential theft, or harmful files."
msgid "Manage"
msgstr "Manage"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Manage accounts"
@@ -21123,7 +21118,7 @@ msgstr "Newest first"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Non-animated emoji ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "None"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Reconnect successful. Pick a screen again if you want to resume your previous stream."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Reconnecting..."
@@ -25097,7 +25092,7 @@ msgstr "Reference copied."
msgid "Referral parameters"
msgstr "Referral parameters"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Refresh audio sources"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Self-harm or suicide"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Self-host setup"
@@ -28220,7 +28215,7 @@ msgstr "Sessions"
msgid "Set {fieldNode} to {0}."
msgstr "Set {fieldNode} to {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Set a custom status"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Set this check aside?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Set up {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Swedish"
msgid "Switch account"
msgstr "Switch account"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Switch accounts"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "That friend request is no longer available. Refresh and try again."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "That image could not be used. Try a different file."
@@ -31617,6 +31612,11 @@ msgstr "That's all of them."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "The API is on a different origin to this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "The app crashed"
@@ -34049,7 +34049,7 @@ msgstr "Unknown user"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Unknown user"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "View call"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "View call controls"
@@ -37219,7 +37219,6 @@ msgstr "With error"
msgid "Withdraw"
msgstr "Withdraw"
# auto-i18n: reviewed unchanged
#. Permission description in the channel-scoped permissions editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in this voice channel.
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:295
msgid "Without this permission, push-to-talk is required in this channel."
@@ -37929,12 +37928,12 @@ msgstr "You won't be able to delete your sent messages after your account is del
msgid "You will still need to finish the email step."
msgstr "You'll still need to finish the email step."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "You won't get notifications on desktop"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "You'll appear offline"
@@ -356,7 +356,7 @@ msgstr "{count, plural, one {# bookmark} other {# bookmarks}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# community found} other {# communities found}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
@@ -405,7 +405,7 @@ msgstr "{count, plural, one {# mutual community} other {# mutual communities}}"
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# other} other {# others}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# participant in call} other {# participants in call}}"
@@ -451,7 +451,7 @@ msgstr "{count, plural, one {Expand (# line)} other {Expand (# lines)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Expand # other device} other {Expand # other devices}}"
@@ -472,7 +472,7 @@ msgstr "{count, plural, one {In call} other {# in call}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
@@ -2183,7 +2183,7 @@ msgstr "Actions"
msgid "Active"
msgstr "Active"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Active account"
@@ -4579,7 +4579,7 @@ msgstr "Away right now"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4643,7 +4643,7 @@ msgid "Back to sticker"
msgstr "Back to sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Back to voice channel"
@@ -7498,7 +7498,7 @@ msgstr "Collapse channel topic"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Collapse devices"
@@ -8158,7 +8158,7 @@ msgstr "Connected to voice"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Connecting..."
@@ -8219,7 +8219,7 @@ msgid "Connection removed"
msgstr "Connection removed"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Connection stats"
@@ -8467,7 +8467,7 @@ msgid "Copied"
msgstr "Copied"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Copied stats JSON to clipboard"
@@ -8500,11 +8500,6 @@ msgstr "Copied URL to clipboard"
msgid "Copy"
msgstr "Copy"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copy as JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8541,7 +8536,7 @@ msgid "Copy banner URL"
msgstr "Copy banner URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copy build info"
@@ -8744,8 +8739,8 @@ msgstr "Copy setup key"
msgid "Copy stack trace"
msgstr "Copy stack trace"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copy stats JSON"
@@ -8773,7 +8768,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copy the setup key into your authenticator app."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copy user ID"
@@ -8798,7 +8793,7 @@ msgstr "Copy video"
msgid "Copy video link"
msgstr "Copy video link"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copy voice diagnostics"
@@ -8828,7 +8823,7 @@ msgid "Could not decode this audio file."
msgstr "Could not decode this audio file."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Could not load the instance configuration. Try reloading the page."
@@ -11425,7 +11420,7 @@ msgstr "Disconnect socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Disconnected"
@@ -12257,7 +12252,7 @@ msgstr "Edit or delete emoji and stickers created by other members."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edit overwrites for roles and members in this channel."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13110,7 +13105,7 @@ msgstr "Enter code"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Enter fullscreen"
@@ -13278,7 +13273,7 @@ msgstr "Entire screen"
msgid "Entire system"
msgstr "Entire system"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Entire system audio"
@@ -13479,7 +13474,7 @@ msgstr "Exit"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Exit fullscreen"
@@ -14388,7 +14383,7 @@ msgstr "Finish account setup first"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Finish setup"
@@ -16831,7 +16826,7 @@ msgstr "In \"Operating system\" mode, dictionaries listed above are advisory. {P
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "In a call"
@@ -18593,7 +18588,7 @@ msgid "Loading destinations…"
msgstr "Loading destinations…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Loading instance configuration"
@@ -18886,7 +18881,7 @@ msgstr "Malware, credential theft, or harmful files."
msgid "Manage"
msgstr "Manage"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Manage accounts"
@@ -21124,7 +21119,7 @@ msgstr "Newest first"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21800,7 +21795,7 @@ msgstr "Non-animated emoji ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "None"
@@ -24957,7 +24952,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Reconnect succeeded. Pick a screen again if you want to resume your previous stream."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Reconnecting..."
@@ -25098,7 +25093,7 @@ msgstr "Reference copied."
msgid "Referral parameters"
msgstr "Referral parameters"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Refresh audio sources"
@@ -27872,7 +27867,7 @@ msgid "Self-harm or suicide"
msgstr "Self-harm or suicide"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Self-host setup"
@@ -28221,7 +28216,7 @@ msgstr "Sessions"
msgid "Set {fieldNode} to {0}."
msgstr "Set {fieldNode} to {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Set a custom status"
@@ -28420,7 +28415,7 @@ msgid "Set this check aside?"
msgstr "Set this check aside?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Set up {productName}"
@@ -30930,7 +30925,7 @@ msgstr "Swedish"
msgid "Switch account"
msgstr "Switch account"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Switch accounts"
@@ -31587,7 +31582,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "That friend request is no longer available. Refresh and try again."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "That image could not be used. Try a different file."
@@ -31618,6 +31613,11 @@ msgstr "That's all of them."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "The app crashed"
@@ -34050,7 +34050,7 @@ msgstr "unknown user"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Unknown user"
@@ -35962,7 +35962,7 @@ msgid "View call"
msgstr "View call"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "View call controls"
@@ -37929,12 +37929,12 @@ msgstr "You will not be able to delete your sent messages after your account is
msgid "You will still need to finish the email step."
msgstr "You will still need to finish the email step."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "You won't receive notifications on desktop"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "You'll appear offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# marcador} other {# marcadores}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# comunidad encontrada} other {# comunidades encontradas}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# comunidad no está disponible temporalmente debido a una falla en el condensador de flujo.} other {# comunidades no están disponibles temporalmente debido a una falla en el condensador de flujo.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# comunidad en común} other {# comunidades en com
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# más} other {# más}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# participante en la llamada} other {# participantes en la llamada}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Expandir (# línea)} other {Expandir (# líneas)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Mostrar (# fila)} other {Mostrar (# filas)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Expandir # otro dispositivo} other {Expandir # otros dispositivos}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {En llamada} other {# en llamada}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Unirse a videollamada (# participante)} other {Unirse a videollamada (# participantes)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {seguir viendo # transmisión y agregar esta} other {seguir viendo # transmisiones y agregar esta}}"
@@ -2182,7 +2182,7 @@ msgstr "Acciones"
msgid "Active"
msgstr "Activa"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Cuenta activa"
@@ -4578,7 +4578,7 @@ msgstr "Ausente en este momento"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Volver al sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Volver al canal de voz"
@@ -7497,7 +7497,7 @@ msgstr "Contraer tema del canal"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Contraer dispositivos"
@@ -8157,7 +8157,7 @@ msgstr "Conectado a la llamada"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Conectando..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Conexión eliminada"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Estadísticas de conexión"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Copiado"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Se copió el JSON de estadísticas al portapapeles"
@@ -8499,11 +8499,6 @@ msgstr "URL copiada al portapapeles"
msgid "Copy"
msgstr "Copiar"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copiar como JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Copiar URL del banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copiar información de la versión"
@@ -8743,8 +8738,8 @@ msgstr "Copiar clave de configuración"
msgid "Copy stack trace"
msgstr "Copiar seguimiento de pila"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copiar JSON de estadísticas"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copia la clave de configuración en tu aplicación de autenticación."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copiar ID de usuario"
@@ -8797,7 +8792,7 @@ msgstr "Copiar video"
msgid "Copy video link"
msgstr "Copiar enlace del video"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copiar diagnóstico de voz"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "No se pudo decodificar este archivo de audio."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "No se pudo cargar la configuración de la instancia. Intenta recargar la página."
@@ -11424,7 +11419,7 @@ msgstr "Desconectar socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Desconectado"
@@ -12256,7 +12251,7 @@ msgstr "Editar o eliminar emojis y stickers creados por otros miembros."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edita los permisos de roles y miembros en este canal."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Ingresa el código"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Entrar a pantalla completa"
@@ -13277,7 +13272,7 @@ msgstr "Toda la pantalla"
msgid "Entire system"
msgstr "Sistema completo"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Audio de todo el sistema"
@@ -13478,7 +13473,7 @@ msgstr "Salir"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Salir de pantalla completa"
@@ -14387,7 +14382,7 @@ msgstr "Termina de configurar tu cuenta primero"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Finalizar configuración"
@@ -16830,7 +16825,7 @@ msgstr "En el modo \"Sistema operativo\", los diccionarios que se muestran arrib
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "En un navegador, la función pulsar para hablar solo funciona mientras la pestaña de {PRODUCT_NAME} esté activa. Instala la aplicación de escritorio para usar pulsar para hablar en todo el sistema."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "En una llamada"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Cargando destinos…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Cargando configuración de la instancia"
@@ -18885,7 +18880,7 @@ msgstr "Malware, robo de credenciales o archivos dañinos."
msgid "Manage"
msgstr "Administrar"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Administrar cuentas"
@@ -21123,7 +21118,7 @@ msgstr "Más recientes primero"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Emojis no animados ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Ninguno"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Reconexión exitosa. Elige una pantalla de nuevo si quieres reanudar tu transmisión anterior."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Reconectando..."
@@ -25097,7 +25092,7 @@ msgstr "Referencia copiada."
msgid "Referral parameters"
msgstr "Parámetros de referencia"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Actualizar fuentes de audio"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Autolesiones o suicidio"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Configuración de autoalojamiento"
@@ -28220,7 +28215,7 @@ msgstr "Sesiones"
msgid "Set {fieldNode} to {0}."
msgstr "Establecer {fieldNode} en {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Establecer un estado personalizado"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "¿Dejar esta verificación en espera?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Configura {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Sueco"
msgid "Switch account"
msgstr "Cambiar de cuenta"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Cambiar de cuenta"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Esa solicitud de amistad ya no está disponible. Actualiza y vuelve a intentarlo."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Esa imagen no se pudo usar. Intenta con otro archivo."
@@ -31617,6 +31612,11 @@ msgstr "Eso es todo."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "La etiqueta #0000 está reservada para suscriptores Visionary. Visionary ya no está disponible para comprar."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "La API está en un origen diferente al de esta página, por lo que las solicitudes de configuración se envían sin tu sesión. Verifica el origen público y el puerto con los que está configurada esta instancia, y luego recarga."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "La aplicación falló"
@@ -34049,7 +34049,7 @@ msgstr "usuario desconocido"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Usuario desconocido"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Ver llamada"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Ver controles de llamada"
@@ -37928,12 +37928,12 @@ msgstr "No podrás eliminar los mensajes que enviaste después de que se elimine
msgid "You will still need to finish the email step."
msgstr "Aún necesitarás completar el paso del correo electrónico."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "No recibirás notificaciones en la computadora"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Aparecerás como desconectado"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# marcador} other {# marcadores}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# comunidad encontrada} other {# comunidades encontradas}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# comunidad no está disponible temporalmente debido a un fallo en el condensador de flujo.} other {# comunidades no están disponibles temporalmente debido a un fallo en el condensador de flujo.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# comunidad en común} other {# comunidades en com
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# más} other {# más}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# participante en la llamada} other {# participantes en la llamada}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Expandir (# línea)} other {Expandir (# líneas)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Mostrar (# fila)} other {Mostrar (# filas)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Expandir # otro dispositivo} other {Expandir # otros dispositivos}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {En llamada} other {# en llamada}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Unirse a la videollamada (# participante)} other {Unirse a la videollamada (# participantes)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Seguir viendo # retransmisión y añadir esta} other {Seguir viendo # retransmisiones y añadir esta}}"
@@ -2182,7 +2182,7 @@ msgstr "Acciones"
msgid "Active"
msgstr "Activa"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Cuenta activa"
@@ -4578,7 +4578,7 @@ msgstr "Ausente ahora mismo"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Volver al sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Volver al canal de voz"
@@ -7497,7 +7497,7 @@ msgstr "Contraer tema del canal"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Contraer dispositivos"
@@ -8157,7 +8157,7 @@ msgstr "Conectado a la voz"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Conectando..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Conexión eliminada"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Estadísticas de conexión"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Copiado"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "JSON de estadísticas copiado al portapapeles"
@@ -8499,11 +8499,6 @@ msgstr "URL copiada al portapapeles"
msgid "Copy"
msgstr "Copiar"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copiar como JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Copiar URL del banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copiar información de la compilación"
@@ -8743,8 +8738,8 @@ msgstr "Copiar la clave de configuración"
msgid "Copy stack trace"
msgstr "Copiar seguimiento de pila"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copiar JSON de estadísticas"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copia la clave de configuración en tu aplicación de autenticación."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copiar ID de usuario"
@@ -8797,7 +8792,7 @@ msgstr "Copiar vídeo"
msgid "Copy video link"
msgstr "Copiar enlace del vídeo"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copiar diagnóstico de voz"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "No se pudo descodificar este archivo de audio."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "No se ha podido cargar la configuración de la instancia. Intenta recargar la página."
@@ -11424,7 +11419,7 @@ msgstr "Desconectar socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Desconectado"
@@ -12256,7 +12251,7 @@ msgstr "Editar o eliminar emojis y stickers creados por otros miembros."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edita las anulaciones para roles y miembros en este canal."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Introducir código"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Entrar en pantalla completa"
@@ -13277,7 +13272,7 @@ msgstr "Toda la pantalla"
msgid "Entire system"
msgstr "Todo el sistema"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Audio de todo el sistema"
@@ -13478,7 +13473,7 @@ msgstr "Salir"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Salir de pantalla completa"
@@ -14387,7 +14382,7 @@ msgstr "Termina primero de configurar la cuenta"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Finalizar configuración"
@@ -16830,7 +16825,7 @@ msgstr "En el modo \"Sistema operativo\", los diccionarios indicados anteriormen
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "En un navegador, la función pulsar para hablar solo funciona si la pestaña de {PRODUCT_NAME} está activa. Instala la aplicación de escritorio para usar la función pulsar para hablar en todo el sistema."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "En una llamada"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Cargando destinos…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Cargando configuración de la instancia"
@@ -18885,7 +18880,7 @@ msgstr "Malware, robo de credenciales o archivos dañinos."
msgid "Manage"
msgstr "Administrar"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Gestionar cuentas"
@@ -21123,7 +21118,7 @@ msgstr "Más recientes primero"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Emojis no animados ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Ninguno"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Reconexión correcta. Elige una pantalla de nuevo si quieres reanudar tu transmisión anterior."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Reconectando..."
@@ -25097,7 +25092,7 @@ msgstr "Referencia copiada."
msgid "Referral parameters"
msgstr "Parámetros de referencia"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Actualizar fuentes de audio"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Autolesiones o suicidio"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Configuración de autoalojamiento"
@@ -28220,7 +28215,7 @@ msgstr "Sesiones"
msgid "Set {fieldNode} to {0}."
msgstr "Establecer {fieldNode} en {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Establecer un estado personalizado"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "¿Dejar esta verificación en suspenso?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Configura {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Sueco"
msgid "Switch account"
msgstr "Cambiar de cuenta"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Cambiar de cuenta"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Esa solicitud de amistad ya no está disponible. Actualiza y vuelve a intentarlo."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Esa imagen no se ha podido usar. Prueba con otro archivo."
@@ -31617,6 +31612,11 @@ msgstr "Eso es todo."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "La etiqueta #0000 está reservada para los suscriptores Visionary. Visionary ya no está disponible para su compra."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "La API está en un origen diferente al de esta página, por lo que las solicitudes de configuración se envían sin tu sesión. Comprueba el origen público y el puerto con los que está configurada esta instancia y, a continuación, recarga."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "La aplicación se ha bloqueado"
@@ -34049,7 +34049,7 @@ msgstr "usuario desconocido"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Usuario desconocido"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Ver llamada"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Ver controles de llamada"
@@ -37928,12 +37928,12 @@ msgstr "No podrás eliminar los mensajes que hayas enviado después de que se el
msgid "You will still need to finish the email step."
msgstr "Todavía tendrás que completar el paso del correo electrónico."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "No recibirás notificaciones en el ordenador"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Aparecerás como desconectado"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# kirjanmerkki} other {# kirjanmerkkiä}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# yhteisö löytyi} other {# yhteisöä löytyi}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# yhteisö on tilapäisesti pois käytöstä toimintahäiriön vuoksi.} other {# yhteisöä on tilapäisesti pois käytöstä toimintahäiriön vuoksi.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# yhteinen yhteisö} other {# yhteistä yhteisöä}
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# muu} other {# muuta}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# osallistuja puhelussa} other {# osallistujaa puhelussa}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Laajenna (1 rivi)} other {Laajenna (# riviä)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Näytä lisää (# rivi)} other {Näytä lisää (# riviä)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Laajenna # muu laite} other {Laajenna # muuta laitetta}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Puhelussa} other {# puhelussa}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Liity videopuheluun (1 osallistuja)} other {Liity videopuheluun (# osallistujaa)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "Jatka # {count, plural, one {striimin} other {striimien}} katsomista ja lisää tämä"
@@ -2182,7 +2182,7 @@ msgstr "Toiminnot"
msgid "Active"
msgstr "Aktiivinen"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktiivinen tili"
@@ -4578,7 +4578,7 @@ msgstr "Poissa juuri nyt"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Takaisin tarraan"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Takaisin äänikanavalle"
@@ -7497,7 +7497,7 @@ msgstr "Tiivistä kanavan aihe"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Tiivistä laitteet"
@@ -8157,7 +8157,7 @@ msgstr "Yhdistetty puheluun"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Yhdistetään..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Yhteys poistettu"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Yhteyden tila"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Kopioitu"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Tilastojen JSON-tiedot kopioitu leikepöydälle"
@@ -8499,11 +8499,6 @@ msgstr "URL kopioitu leikepöydälle"
msgid "Copy"
msgstr "Kopioi"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopioi JSON-muodossa"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopioi bannerin URL-osoite"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopioi koontiversion tiedot"
@@ -8743,8 +8738,8 @@ msgstr "Kopioi asennusavain"
msgid "Copy stack trace"
msgstr "Kopioi pinon jäljitys"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopioi tilastojen JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopioi asennusavain autentikointisovellukseesi."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopioi käyttäjätunnus"
@@ -8797,7 +8792,7 @@ msgstr "Kopioi video"
msgid "Copy video link"
msgstr "Kopioi videolinkki"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopioi puhediagnostiikka"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Äänitiedoston dekoodaus epäonnistui."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Konfiguraatiota ei voitu ladata. Yritä ladata sivu uudelleen."
@@ -11424,7 +11419,7 @@ msgstr "Katkaise yhteys"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Yhteys katkaistu"
@@ -12256,7 +12251,7 @@ msgstr "Muokkaa tai poista muiden jäsenten luomia emojeita ja tarroja."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Muokkaa roolien ja jäsenten ohituksia tällä kanavalla."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Syötä koodi"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Koko näyttö"
@@ -13277,7 +13272,7 @@ msgstr "Koko näyttö"
msgid "Entire system"
msgstr "Koko järjestelmä"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Koko järjestelmän ääni"
@@ -13478,7 +13473,7 @@ msgstr "Poistu"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Poistu koko näytöstä"
@@ -14387,7 +14382,7 @@ msgstr "Viimeistele ensin tilin määritys"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Viimeistele asennus"
@@ -16830,7 +16825,7 @@ msgstr "Käyttöjärjestelmä-tilassa yllä luetellut sanakirjat ovat ohjeellisi
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Selaimessa paina ja puhu -toiminto toimii vain, kun {PRODUCT_NAME}-välilehti on aktiivinen. Asenna työpöytäsovellus, jos haluat käyttää paina ja puhu -toimintoa koko järjestelmässä."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Puhelussa"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Ladataan kohteita…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Ladataan instanssin asetuksia"
@@ -18885,7 +18880,7 @@ msgstr "Haittaohjelmat, tunnusten kalastelu tai haitalliset tiedostot."
msgid "Manage"
msgstr "Hallitse"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Hallinnoi tilejä"
@@ -21123,7 +21118,7 @@ msgstr "Uusimmat ensin"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Ei-animoidut emojit ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Ei mitään"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Yhteys palautettu. Valitse näyttö uudelleen, jos haluat jatkaa edellistä lähetystäsi."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Yhdistetään uudelleen..."
@@ -25097,7 +25092,7 @@ msgstr "Viite kopioitu."
msgid "Referral parameters"
msgstr "Suositusparametrit"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Päivitä äänilähteet"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Itsensä vahingoittaminen tai itsemurha"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Itseisännöinnin asennus"
@@ -28220,7 +28215,7 @@ msgstr "Istunnot"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} asetettu arvoon {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Aseta mukautettu tila"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Siirretäänkö tämä tarkistus sivuun?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Määritä {productName}"
@@ -30929,7 +30924,7 @@ msgstr "ruotsi"
msgid "Switch account"
msgstr "Vaihda tiliä"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Vaihda tiliä"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Ystäväpyyntö ei ole enää saatavilla. Päivitä sivu ja yritä uudelleen."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Kuvaa ei voitu käyttää. Kokeile toista tiedostoa."
@@ -31617,6 +31612,11 @@ msgstr "Siinä kaikki."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Tunniste #0000 on varattu Visionary-tilaajille. Visionary ei ole enää ostettavissa."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API on eri alkuperää kuin tämä sivu, joten asetuspyynnöt lähetetään ilman istuntoasi. Tarkista tämän instanssin julkinen alkuperä ja portti, ja lataa sitten uudelleen."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Sovellus kaatui"
@@ -34049,7 +34049,7 @@ msgstr "tuntematon käyttäjä"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Tuntematon käyttäjä"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Näytä puhelu"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Näytä puhelun hallinta"
@@ -37928,12 +37928,12 @@ msgstr "Et voi poistaa lähettämiäsi viestejä tilin poistamisen jälkeen"
msgid "You will still need to finish the email step."
msgstr "Sinun täytyy vielä suorittaa sähköpostivaihe."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Et saa ilmoituksia työpöytäsovellukseen"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Näytät offline-tilassa"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# signet} other {# signets}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# communauté trouvée} other {# communautés trouvées}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# communauté est temporairement indisponible en raison d'un dysfonctionnement du condensateur de flux.} other {# communautés sont temporairement indisponibles en raison d'un dysfonctionnement du condensateur de flux.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# communauté en commun} other {# communautés en c
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# autre} other {# autres}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# participant à l'appel} other {# participants à l'appel}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Développer (# ligne)} other {Développer (# lignes
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Afficher (# ligne)} other {Afficher (# lignes)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Afficher # autre appareil} other {Afficher # autres appareils}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {En appel} other {# en appel}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Rejoindre l'appel vidéo (1 participant)} other {Rejoindre l'appel vidéo (# participants)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Continuer à regarder # stream et ajouter celui-ci} other {Continuer à regarder # streams et ajouter celui-ci}}"
@@ -2182,7 +2182,7 @@ msgstr "Actions"
msgid "Active"
msgstr "Actif"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Compte actif"
@@ -4578,7 +4578,7 @@ msgstr "Absent(e) pour le moment"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Retour à l’autocollant"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Retour à l'appel vocal"
@@ -7497,7 +7497,7 @@ msgstr "Réduire le sujet du salon"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Réduire les appareils"
@@ -8157,7 +8157,7 @@ msgstr "Connecté à l'audio"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Connexion..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Connexion supprimée"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Statistiques de connexion"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Copié"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "JSON des statistiques copié dans le presse-papiers"
@@ -8499,11 +8499,6 @@ msgstr "URL copiée dans le presse-papiers"
msgid "Copy"
msgstr "Copier"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copier au format JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Copier l'URL de la bannière"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copier les infos de build"
@@ -8743,8 +8738,8 @@ msgstr "Copier la clé de configuration"
msgid "Copy stack trace"
msgstr "Copier la trace de la pile"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copier les statistiques JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copiez la clé de configuration dans votre application d’authentification."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copier l'identifiant de l'utilisateur"
@@ -8797,7 +8792,7 @@ msgstr "Copier la vidéo"
msgid "Copy video link"
msgstr "Copier le lien de la vidéo"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copier les diagnostics vocaux"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Impossible de décoder ce fichier audio."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Impossible de charger la configuration de l'instance. Essayez de recharger la page."
@@ -11424,7 +11419,7 @@ msgstr "Déconnecter le socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Déconnecté"
@@ -12256,7 +12251,7 @@ msgstr "Modifier ou supprimer les émojis et autocollants créés par d'autres m
msgid "Edit overwrites for roles and members in this channel."
msgstr "Modifier les remplacements pour les rôles et les membres dans ce salon."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Saisir le code"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Passer en plein écran"
@@ -13277,7 +13272,7 @@ msgstr "Écran entier"
msgid "Entire system"
msgstr "Tout le système"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Audio du système entier"
@@ -13478,7 +13473,7 @@ msgstr "Quitter"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Quitter le mode plein écran"
@@ -14387,7 +14382,7 @@ msgstr "Terminez d'abord la configuration du compte"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Terminer la configuration"
@@ -16830,7 +16825,7 @@ msgstr "En mode \" Système d'exploitation \", les dictionnaires listés ci-dess
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Dans un navigateur, la fonction \" Appuyer pour parler \" ne fonctionne que lorsque l'onglet {PRODUCT_NAME} est actif. Installez l'application de bureau pour utiliser cette fonction à l'échelle du système."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "En appel"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Chargement des destinations…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Chargement de la configuration de l'instance"
@@ -18885,7 +18880,7 @@ msgstr "Logiciels malveillants, vol d'identifiants ou fichiers nuisibles."
msgid "Manage"
msgstr "Gérer"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Gérer les comptes"
@@ -21123,7 +21118,7 @@ msgstr "Du plus récent au plus ancien"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Émojis non animés ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Aucun"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Reconnexion réussie. Choisissez un écran à nouveau si vous souhaitez reprendre votre précédent flux."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Reconnexion..."
@@ -25097,7 +25092,7 @@ msgstr "Référence copiée."
msgid "Referral parameters"
msgstr "Paramètres de parrainage"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Actualiser les sources audio"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Automutilation ou suicide"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Configuration auto-hébergée"
@@ -28220,7 +28215,7 @@ msgstr "Sessions"
msgid "Set {fieldNode} to {0}."
msgstr "Définir {fieldNode} sur {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Définir un statut personnalisé"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Mettre cette vérification de côté ?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Configurer {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Suédois"
msgid "Switch account"
msgstr "Changer de compte"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Changer de compte"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Cette demande d’ami n’est plus disponible. Actualisez la page et réessayez."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Cette image n'a pas pu être utilisée. Essayez un autre fichier."
@@ -31617,6 +31612,11 @@ msgstr "C'est tout."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Le tag #0000 est réservé aux abonnés Visionary. L'abonnement Visionary n'est plus disponible à l'achat."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "L'API est sur une origine différente de celle de cette page, les requêtes de configuration sont donc envoyées sans votre session. Vérifiez l'origine publique et le port configurés pour cette instance, puis rechargez."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "L'application a planté"
@@ -34049,7 +34049,7 @@ msgstr "utilisateur inconnu"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Utilisateur inconnu"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Voir l'appel"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Afficher les commandes d'appel"
@@ -37928,12 +37928,12 @@ msgstr "Vous ne pourrez plus supprimer les messages envoyés après la suppressi
msgid "You will still need to finish the email step."
msgstr "Vous devrez toujours terminer l'étape de l'e-mail."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Vous ne recevrez pas de notifications sur ordinateur"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Vous apparaîtrez hors ligne"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# סימנייה} other {# סימניות}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# קהילה נמצאה} other {# קהילות נמצאו}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# קהילה אינה זמינה באופן זמני עקב תקלה בקבלן השטף.} other {# קהילות אינן זמינות באופן זמני עקב תקלה בקבלן השטף.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# קהילה משותפת} other {# קהילות מ
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# אחר} other {# אחרים}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# משתתף בשיחה} other {# משתתפים בשיחה}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {הרחב (שורה אחת)} other {הרחב (# שו
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {הצג (# שורה)} other {הצג (# שורות)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {הרחב מכשיר אחד נוסף} other {הרחב # מכשירים נוספים}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {בשיחה} other {# בשיחה}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {הצטרף לשיחת וידאו (משתתף אחד)} other {הצטרף לשיחת וידאו (# משתתפים)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {המשך/המשיכי לצפות בסטרים # והוסף/הוסיפי את זה} other {המשך/המשיכי לצפות בסטרימים # והוסף/הוסיפי את זה}}"
@@ -2182,7 +2182,7 @@ msgstr "פעולות"
msgid "Active"
msgstr "פעיל"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "חשבון פעיל"
@@ -4578,7 +4578,7 @@ msgstr "מחוץ למשרד כרגע"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "חזרה למדבקה"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "חזרה לערוץ הקולי"
@@ -7497,7 +7497,7 @@ msgstr "כיווץ נושא הערוץ"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "כיווץ מכשירים"
@@ -8157,7 +8157,7 @@ msgstr "מחובר לשיחה הקולית"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "מתחבר..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "החיבור הוסר"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "נתוני חיבור"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "הועתק"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "נתוני JSON הועתקו ללוח הגזירים"
@@ -8499,11 +8499,6 @@ msgstr "הקישור הועתק ללוח"
msgid "Copy"
msgstr "העתקה"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "העתקה כ-JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "העתקת כתובת ה-URL של הבאנר"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "העתקת פרטי בנייה"
@@ -8743,8 +8738,8 @@ msgstr "העתק את מפתח ההגדרה"
msgid "Copy stack trace"
msgstr "העתקת מעקב מחסנית"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "העתקת נתוני JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "העתק את מפתח ההגדרה לאפליקציית האימות שלך."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "העתקת מזהה משתמש"
@@ -8797,7 +8792,7 @@ msgstr "העתק סרטון"
msgid "Copy video link"
msgstr "העתקת קישור לסרטון"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "העתקת אבחון קולי"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "לא ניתן לפענח את קובץ השמע הזה."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "לא ניתן לטעון את תצורת המופע. נסה לטעון מחדש את הדף."
@@ -11424,7 +11419,7 @@ msgstr "נתק שקע"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "מנותק"
@@ -12256,7 +12251,7 @@ msgstr "עריכה או מחיקה של אימוג'י ומדבקות שנוצר
msgid "Edit overwrites for roles and members in this channel."
msgstr "ערוך עקיפות עבור תפקידים וחברים בערוץ זה."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "הזן קוד"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "הצג במסך מלא"
@@ -13277,7 +13272,7 @@ msgstr "כל המסך"
msgid "Entire system"
msgstr "כל המערכת"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "כל צלילי המערכת"
@@ -13478,7 +13473,7 @@ msgstr "יציאה"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "יציאה ממסך מלא"
@@ -14387,7 +14382,7 @@ msgstr "יש לסיים קודם את הגדרת החשבון"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "סיים הגדרה"
@@ -16830,7 +16825,7 @@ msgstr "במצב \"מערכת הפעלה\", המילונים המפורטים ל
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "בדפדפן, דיבור בלחיצה (push-to-talk) פועל רק כשהכרטיסייה של {PRODUCT_NAME} ממוקדת. התקן את אפליקציית המחשב כדי להשתמש בדיבור בלחיצה בכל המערכת."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "בשיחה"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "טוען יעדים…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "טוען את הגדרות המופע"
@@ -18885,7 +18880,7 @@ msgstr "תוכנות זדוניות, גניבת פרטי כניסה או קבצ
msgid "Manage"
msgstr "נהל"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "ניהול חשבונות"
@@ -21123,7 +21118,7 @@ msgstr "החדשים ביותר ראשונים"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "אמוג׳י לא מונפשים ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "ללא"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "החיבור מחדש הצליח. בחר/י מסך שוב אם ברצונך להמשיך את השידור הקודם שלך."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "מתחבר מחדש..."
@@ -25097,7 +25092,7 @@ msgstr "ההפניה הועתקה."
msgid "Referral parameters"
msgstr "פרמטרים של הפניה"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "רענון מקורות שמע"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "פגיעה עצמית או התאבדות"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "הגדרת אירוח עצמי"
@@ -28220,7 +28215,7 @@ msgstr "הפעלות"
msgid "Set {fieldNode} to {0}."
msgstr "הגדר/י את {fieldNode} ל- {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "הגדר סטטוס מותאם אישית"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "להניח לבדיקה זו בצד?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "הגדרת {productName}"
@@ -30929,7 +30924,7 @@ msgstr "שוודית"
msgid "Switch account"
msgstr "החלף חשבון"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "החלף חשבונות"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "בקשת החברות הזו כבר לא זמינה. רענן ונסה שוב."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "התמונה הזו לא ניתנת לשימוש. נסה קובץ אחר."
@@ -31617,6 +31612,11 @@ msgstr "זה הכל."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "התגית #0000 שמורה למנויי Visionary. מינוי Visionary אינו זמין עוד לרכישה."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "ה-API נמצא במקור שונה מהדף הזה, לכן בקשות ההגדרה נשלחות ללא הסשן שלך. בדוק את המקור והפורט הציבוריים שהאינסטנס הזה מוגדר איתם, ואז טען מחדש."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "האפליקציה קרסה"
@@ -34049,7 +34049,7 @@ msgstr "משתמש לא ידוע"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "משתמש לא ידוע"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "הצגת שיחה"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "הצגת פקדי שיחה"
@@ -37928,12 +37928,12 @@ msgstr "לא תוכל/י למחוק את ההודעות ששלחת לאחר מח
msgid "You will still need to finish the email step."
msgstr "עדיין תצטרך להשלים את שלב האימייל."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "לא תקבל התראות בשולחן העבודה"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "תופיע/י במצב לא מקוון"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# बुकमार्क} other {# बुकम
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# समुदाय मिला} other {# समुदाय मिले}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# समुदाय फ्लक्स कैपेसिटर में खराबी के कारण अस्थायी रूप से अनुपलब्ध है।} other {# समुदाय फ्लक्स कैपेसिटर में खराबी के कारण अस्थायी रूप से अनुपलब्ध हैं।}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# साझा समुदाय} other {# सा
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# अन्य} other {# अन्य}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# प्रतिभागी कॉल में है} other {# प्रतिभागी कॉल में हैं}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {विस्तार करें (# लाइन)
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {# पंक्तियाँ खोलें} other {# पंक्तियों को खोलें}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {अन्य # डिवाइस को बड़ा करें} other {अन्य # डिवाइस को बड़ा करें}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {कॉल पर} other {# लोग कॉल प
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {वीडियो कॉल में शामिल हों (# प्रतिभागी)} other {वीडियो कॉल में शामिल हों (# प्रतिभागी)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {# स्ट्रीम देखना जारी रखें और इसे जोड़ें} other {# स्ट्रीम देखना जारी रखें और इसे जोड़ें}}"
@@ -2182,7 +2182,7 @@ msgstr "कार्यवाहियां"
msgid "Active"
msgstr "सक्रिय"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "सक्रिय खाता"
@@ -4578,7 +4578,7 @@ msgstr "अभी दूर हैं"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "स्टिकर पर वापस जाएँ"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "वॉइस चैनल पर वापस जाएँ"
@@ -7497,7 +7497,7 @@ msgstr "चैनल विषय छोटा करें"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "डिवाइसों को छोटा करें"
@@ -8157,7 +8157,7 @@ msgstr "वॉइस से कनेक्ट किया गया"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "कनेक्ट हो रहा है..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "कनेक्शन हटाया गया"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "कनेक्शन के आँकड़े"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "कॉपी किया गया"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "आँकड़ों का JSON क्लिपबोर्ड पर कॉपी किया गया"
@@ -8499,11 +8499,6 @@ msgstr "यूआरएल क्लिपबोर्ड पर कॉपी
msgid "Copy"
msgstr "कॉपी करें"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "JSON के रूप में कॉपी करें"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "बैनर यूआरएल कॉपी करें"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "बिल्ड की जानकारी कॉपी करें"
@@ -8743,8 +8738,8 @@ msgstr "सेटअप कुंजी कॉपी करें"
msgid "Copy stack trace"
msgstr "स्टैक ट्रेस कॉपी करें"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "आँकड़ों का JSON कॉपी करें"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "अपनी ऑथेंटिकेटर ऐप में सेटअप कुंजी कॉपी करें।"
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "यूज़र आईडी कॉपी करें"
@@ -8797,7 +8792,7 @@ msgstr "वीडियो कॉपी करें"
msgid "Copy video link"
msgstr "वीडियो लिंक कॉपी करें"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "वॉइस डाइग्नोस्टिक्स कॉपी करें"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "इस ऑडियो फ़ाइल को डीकोड नहीं किया जा सका."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "इंस्टेंस कॉन्फ़िगरेशन लोड नहीं हो सका। पेज को रीलोड करने का प्रयास करें।"
@@ -11424,7 +11419,7 @@ msgstr "सॉकेट डिस्कनेक्ट करें"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "डिस्कनेक्ट किया गया"
@@ -12256,7 +12251,7 @@ msgstr "दूसरे सदस्यों द्वारा बनाए
msgid "Edit overwrites for roles and members in this channel."
msgstr "इस चैनल में भूमिकाओं और सदस्यों के लिए ओवरराइट संपादित करें।"
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "कोड डालें"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "फ़ुलस्क्रीन पर जाएं"
@@ -13277,7 +13272,7 @@ msgstr "पूरी स्क्रीन"
msgid "Entire system"
msgstr "पूरा सिस्टम"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "पूरे सिस्टम की ऑडियो"
@@ -13478,7 +13473,7 @@ msgstr "बाहर निकलें"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "फ़ुलस्क्रीन से बाहर निकलें"
@@ -14387,7 +14382,7 @@ msgstr "पहले अकाउंट सेटअप पूरा करे
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "सेटअप पूरा करें"
@@ -16830,7 +16825,7 @@ msgstr "\"ऑपरेटिंग सिस्टम\" मोड में, ऊ
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "ब्राउज़र में, पुश-टू-टॉक तभी काम करता है जब {PRODUCT_NAME} टैब फ़ोकस में हो। सिस्टम-वाइड पुश-टू-टॉक के लिए डेस्कटॉप ऐप इंस्टॉल करें।"
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "कॉल पर हैं"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "गंतव्य लोड हो रहे हैं…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "इंस्टेंस कॉन्फ़िगरेशन लोड हो रहा है"
@@ -18885,7 +18880,7 @@ msgstr "मैलवेयर, क्रेडेंशियल चोरी
msgid "Manage"
msgstr "प्रबंधित करें"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "खाते प्रबंधित करें"
@@ -21123,7 +21118,7 @@ msgstr "सबसे नया पहले"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "गैर-एनिमेटेड इमोजी ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "कोई नहीं"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "फिर से कनेक्ट हो गया है। अगर आप अपनी पिछली स्ट्रीम फिर से शुरू करना चाहते हैं, तो कोई दूसरी स्क्रीन चुनें।"
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "फिर से कनेक्ट हो रहा है..."
@@ -25097,7 +25092,7 @@ msgstr "रेफरेंस कॉपी किया गया."
msgid "Referral parameters"
msgstr "रेफरल पैरामीटर"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "ऑडियो स्रोत रीफ़्रेश करें"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "खुद को नुकसान पहुँचाना या आत्महत्या"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "सेल्फ-होस्ट सेटअप"
@@ -28220,7 +28215,7 @@ msgstr "सेशन"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} को {0} पर सेट करें।"
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "कस्टम स्टेटस सेट करें"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "इस जाँच को अलग रख दें?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "{productName} सेट अप करें"
@@ -30929,7 +30924,7 @@ msgstr "स्वीडिश"
msgid "Switch account"
msgstr "खाता बदलें"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "खाते बदलें"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "वह फ्रेंड रिक्वेस्ट अब उपलब्ध नहीं है। रीफ़्रेश करें और फिर से कोशिश करें।"
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "वह इमेज इस्तेमाल नहीं की जा सकी। कोई दूसरी फ़ाइल आज़माएँ।"
@@ -31617,6 +31612,11 @@ msgstr "बस इतना ही था।"
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "#0000 टैग विजनरी सब्सक्राइबर के लिए रिज़र्व है। विजनरी अब खरीदने के लिए उपलब्ध नहीं है।"
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API इस पेज से अलग ओरिजिन पर है, इसलिए सेटअप अनुरोध आपके सेशन के बिना भेजे जा रहे हैं। इस इंस्टेंस के लिए कॉन्फ़िगर किए गए पब्लिक ओरिजिन और पोर्ट की जाँच करें, फिर रीलोड करें।"
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "ऐप क्रैश हो गया"
@@ -34049,7 +34049,7 @@ msgstr "अज्ञात यूज़र"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "अज्ञात यूज़र"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "कॉल देखें"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "कॉल नियंत्रण देखें"
@@ -37928,12 +37928,12 @@ msgstr "आपका अकाउंट डिलीट होने के ब
msgid "You will still need to finish the email step."
msgstr "आपको अभी भी ईमेल वाला चरण पूरा करना होगा।"
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "आपको डेस्कटॉप पर सूचनाएं नहीं मिलेंगी"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "आप ऑफ़लाइन दिखेंगे"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# oznaka} other {# oznake}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# zajednica pronađena} few {# zajednice pronađene} other {# zajednica pronađeno}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# zajednica privremeno nije dostupna zbog kvara na protočnom kondenzatoru.} other {# zajednice privremeno nisu dostupne zbog kvara na protočnom kondenzatoru.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# zajednička zajednica} other {# zajedničke zajed
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# drugi} other {# ostalih}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# sudionik u pozivu} few {# sudionika u pozivu} other {# sudionika u pozivu}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Proširi (# redak)} other {Proširi (# redaka)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Prikaži (# red)} other {Prikaži (# redova)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Proširi # drugi uređaj} other {Proširi # druga uređaja}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {U pozivu} other {# u pozivu}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Pridruži se videopozivu (# sudionik)} other {Pridruži se videopozivu (# sudionika)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Nastavi gledati # stream i dodaj ovaj} other {Nastavi gledati # streama i dodaj ovaj}}"
@@ -2182,7 +2182,7 @@ msgstr "Radnje"
msgid "Active"
msgstr "Aktivno"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktivan račun"
@@ -4578,7 +4578,7 @@ msgstr "Trenutno odsutan"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Natrag na naljepnicu"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Natrag na glasovni kanal"
@@ -7497,7 +7497,7 @@ msgstr "Sažmi temu kanala"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Sažmi uređaje"
@@ -8157,7 +8157,7 @@ msgstr "Povezano s glasovnim chatom"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Povezivanje..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Veza uklonjena"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Statistika veze"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Kopirano"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistike JSON kopirane u međuspremnik"
@@ -8499,11 +8499,6 @@ msgstr "URL kopiran u međuspremnik"
msgid "Copy"
msgstr "Kopiraj"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopiraj kao JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopiraj URL naslovne slike"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopiraj podatke o verziji"
@@ -8743,8 +8738,8 @@ msgstr "Kopiraj ključ za postavljanje"
msgid "Copy stack trace"
msgstr "Kopiraj trag stoga"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopiraj JSON statistike"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopirajte ključ za postavljanje u svoju aplikaciju za autentifikaciju."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopiraj korisnički ID"
@@ -8797,7 +8792,7 @@ msgstr "Kopiraj videozapis"
msgid "Copy video link"
msgstr "Kopiraj poveznicu videozapisa"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopiraj dijagnostiku glasa"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Nije moguće dekodirati ovu audio datoteku."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Nije moguće učitati konfiguraciju instance. Pokušajte ponovno učitati stranicu."
@@ -11424,7 +11419,7 @@ msgstr "Prekini vezu sa socketom"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Prekinuto"
@@ -12256,7 +12251,7 @@ msgstr "Uređivanje ili brisanje emojija i naljepnica koje su izradili drugi čl
msgid "Edit overwrites for roles and members in this channel."
msgstr "Uredite nadjačavanja za uloge i članove u ovom kanalu."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Unesite kod"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Prikaz preko cijelog zaslona"
@@ -13277,7 +13272,7 @@ msgstr "Cijeli zaslon"
msgid "Entire system"
msgstr "Cijeli sustav"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Zvuk cijelog sustava"
@@ -13478,7 +13473,7 @@ msgstr "Izlaz"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Izađi iz prikaza preko cijelog zaslona"
@@ -14387,7 +14382,7 @@ msgstr "Prvo dovršite postavljanje računa"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Završi postavljanje"
@@ -16830,7 +16825,7 @@ msgstr "U načinu rada \"Operativni sustav\" gore navedeni rječnici su savjetod
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "U pregledniku, pritisni za razgovor radi samo dok je kartica {PRODUCT_NAME} aktivna. Instalirajte desktop aplikaciju za pritisni za razgovor na cijelom sustavu."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "U pozivu"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Učitavanje odredišta…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Učitavanje konfiguracije instance"
@@ -18885,7 +18880,7 @@ msgstr "Zlonamjerni softver, krađa vjerodajnica ili štetne datoteke."
msgid "Manage"
msgstr "Upravljanje"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Upravljanje računima"
@@ -21123,7 +21118,7 @@ msgstr "Prvo najnovije"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Neanimirani emotikoni ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Ništa"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Ponovno povezivanje uspješno. Ponovno odaberite zaslon ako želite nastaviti prethodni prijenos."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Ponovno povezivanje..."
@@ -25097,7 +25092,7 @@ msgstr "Referenca kopirana."
msgid "Referral parameters"
msgstr "Parametri preporuke"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Osvježi izvore zvuka"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Samoozljeđivanje ili samoubojstvo"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Postavljanje samostalnog hostinga"
@@ -28220,7 +28215,7 @@ msgstr "Sesije"
msgid "Set {fieldNode} to {0}."
msgstr "Postavljeno {fieldNode} na {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Postavi prilagođeni status"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Ostaviti ovu provjeru po strani?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Postavite {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Švedski"
msgid "Switch account"
msgstr "Prebaci račun"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Promijeni račun"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Taj zahtjev za prijateljstvo više nije dostupan. Osvježite i pokušajte ponovno."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Ta se slika nije mogla koristiti. Isprobajte drugu datoteku."
@@ -31617,6 +31612,11 @@ msgstr "To je sve."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Oznaka #0000 rezervirana je za pretplatnike Visionary. Visionary više nije dostupan za kupnju."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API je na drugom podrijetlu od ove stranice, pa se zahtjevi za postavljanje šalju bez vaše sesije. Provjerite javno podrijetlo i priključak s kojima je ova instanca konfigurirana, a zatim ponovno učitajte."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Aplikacija se srušila"
@@ -34049,7 +34049,7 @@ msgstr "nepoznat korisnik"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Nepoznat korisnik"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Prikaži poziv"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Prikaži kontrole poziva"
@@ -37928,12 +37928,12 @@ msgstr "Nećete moći izbrisati poslane poruke nakon što izbrišete račun"
msgid "You will still need to finish the email step."
msgstr "Još uvijek ćete morati dovršiti korak s e-poštom."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Nećete primati obavijesti na računalu"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Prikazivat ćete se izvan mreže"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# könyvjelző} other {# könyvjelző}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# közösség található} other {# közösség található}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# közösség átmenetileg nem elérhető egy \"fluxuskondenzátor\" meghibásodása miatt.} other {# közösség átmenetileg nem elérhető egy \"fluxuskondenzátor\" meghibásodása miatt.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# közös közösség} other {# közös közösség
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# másik} other {# többiek}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# résztvevő a hívásban} other {# résztvevő a hívásban}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Kibontás (# sor)} other {Kibontás (# sor)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Bontsd ki (# sor)} other {Bontsd ki (# sorok)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Kibontás: # további eszköz} other {Kibontás: # további eszköz}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Hívásban} other {#-en hívásban}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Csatlakozás videóhíváshoz (1 résztvevő)} other {Csatlakozás videóhíváshoz (# résztvevő)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Folytasd a(z) # stream nézését, és add hozzá ezt} other {Folytasd a(z) # stream nézését, és add hozzá ezt}}"
@@ -2182,7 +2182,7 @@ msgstr "Műveletek"
msgid "Active"
msgstr "Aktív"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktív fiók"
@@ -4578,7 +4578,7 @@ msgstr "Jelenleg távol"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Vissza a matricához"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Vissza a hangcsatornára"
@@ -7497,7 +7497,7 @@ msgstr "Csatornatéma összecsukása"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Eszközök összecsukása"
@@ -8157,7 +8157,7 @@ msgstr "Csatlakozva a hangcsevegéshez"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Kapcsolódás..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Kapcsolat eltávolítva"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Kapcsolat statisztikái"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Másolva"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "A statisztikai JSON kimásolva a vágólapra"
@@ -8499,11 +8499,6 @@ msgstr "URL kimásolva a vágólapra"
msgid "Copy"
msgstr "Másolás"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Másolás JSON-ként"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Banner URL másolása"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Buildinformációk másolása"
@@ -8743,8 +8738,8 @@ msgstr "Másold a beállítási kulcsot"
msgid "Copy stack trace"
msgstr "Veremkövetés másolása"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Statisztika JSON másolása"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Másold a beállítási kulcsot az autentikátor alkalmazásodba."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Felhasználói azonosító másolása"
@@ -8797,7 +8792,7 @@ msgstr "Videó másolása"
msgid "Copy video link"
msgstr "Videólink másolása"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Hangdiagnosztika másolása"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Nem sikerült dekódolni ezt a hangfájlt."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Nem sikerült betölteni az instanciakonfigurációt. Próbáld meg újra betölteni az oldalt."
@@ -11424,7 +11419,7 @@ msgstr "Szétkapcsolás"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Kapcsolat megszakadt"
@@ -12256,7 +12251,7 @@ msgstr "Más tagok által létrehozott hangulatjelek és matricák szerkesztése
msgid "Edit overwrites for roles and members in this channel."
msgstr "A szerepkörök és tagok felülírásainak szerkesztése ebben a csatornában."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Kód megadása"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Teljes képernyőre váltás"
@@ -13277,7 +13272,7 @@ msgstr "Teljes képernyő"
msgid "Entire system"
msgstr "Teljes rendszer"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Teljes rendszerhang"
@@ -13478,7 +13473,7 @@ msgstr "Kilépés"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Kilépés a teljes képernyős módból"
@@ -14387,7 +14382,7 @@ msgstr "Előbb fejezd be a fiók beállítását"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "A beállítás befejezése"
@@ -16830,7 +16825,7 @@ msgstr "\"Operációs rendszer\" módban a fent felsorolt szótárak tájékozta
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Böngészőben a nyomva tartva beszélés csak akkor működik, ha a {PRODUCT_NAME} lap aktív. Telepítse az asztali alkalmazást a rendszer egészére kiterjedő nyomva tartva beszéléshez."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Hívásban"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Célok betöltése…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Példánykonfiguráció betöltése"
@@ -18885,7 +18880,7 @@ msgstr "Kártevő, hitelesítő adatok lopása vagy káros fájlok."
msgid "Manage"
msgstr "Kezelés"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Fiókok kezelése"
@@ -21123,7 +21118,7 @@ msgstr "Legújabb elöl"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Nem animált hangulatjelek ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Nincs"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Az újracsatlakozás sikeres. Ha folytatni szeretnéd az előző streamet, válassz újra egy képernyőt."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Újracsatlakozás..."
@@ -25097,7 +25092,7 @@ msgstr "Hivatkozás másolva."
msgid "Referral parameters"
msgstr "Ajánlási paraméterek"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Hangforrások frissítése"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Önsértés vagy öngyilkosság"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Önkiszolgáló beállítás"
@@ -28220,7 +28215,7 @@ msgstr "Munkamenetek"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} beállítása {0} értékre."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Egyéni állapot beállítása"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Elhalasztod ezt az ellenőrzést?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Állítsd be a(z) {productName}"
@@ -30929,7 +30924,7 @@ msgstr "svéd"
msgid "Switch account"
msgstr "Fiók váltása"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Fiókváltás"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Ez a barátkérelem már nem elérhető. Frissítsd az oldalt, és próbáld újra."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Nem sikerült felhasználni ezt a képet. Próbálkozzon egy másik fájllal."
@@ -31617,6 +31612,11 @@ msgstr "Ennyi volt az összes."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "A #0000 címke a Visionary előfizetők számára van fenntartva. A Visionary már nem vásárolható meg."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "Az API és ez az oldal eltérő eredetűek, ezért a beállítási kérések a munkameneted nélkül kerülnek elküldésre. Ellenőrizd az ehhez az instanciához konfigurált nyilvános eredetet és portot, majd töltsd újra az oldalt."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Az alkalmazás összeomlott"
@@ -34049,7 +34049,7 @@ msgstr "ismeretlen felhasználó"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Ismeretlen felhasználó"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Hívás megtekintése"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Hívásvezérlők megtekintése"
@@ -37928,12 +37928,12 @@ msgstr "Fiókja törlése után már nem tudja törölni az elküldött üzenete
msgid "You will still need to finish the email step."
msgstr "Még be kell fejezned az e-mail lépést."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Nem fogsz értesítéseket kapni az asztali gépen"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Offline állapotban fogsz megjelenni"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# markah} other {# markah}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# komunitas ditemukan} other {# komunitas ditemukan}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# komunitas sementara tidak tersedia karena kerusakan kapasitor fluks.} other {# komunitas sementara tidak tersedia karena kerusakan kapasitor fluks.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# komunitas bersama} other {# komunitas bersama}}"
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# lainnya} other {# lainnya}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# peserta dalam panggilan} other {# peserta dalam panggilan}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Perluas (# baris)} other {Perluas (# baris)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Tampilkan (# baris)} other {Tampilkan (# baris)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Perluas # perangkat lain} other {Perluas # perangkat lain}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Dalam panggilan} other {# dalam panggilan}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Gabung panggilan video (# peserta)} other {Gabung panggilan video (# peserta)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Tetap tonton # stream dan tambahkan yang ini} other {Tetap tonton # stream dan tambahkan yang ini}}"
@@ -2182,7 +2182,7 @@ msgstr "Tindakan"
msgid "Active"
msgstr "Aktif"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Akun aktif"
@@ -4578,7 +4578,7 @@ msgstr "Sedang tidak di tempat"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Kembali ke stiker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Kembali ke saluran suara"
@@ -7497,7 +7497,7 @@ msgstr "Ciutkan topik saluran"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Ciutkan perangkat"
@@ -8157,7 +8157,7 @@ msgstr "Terhubung ke obrolan suara"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Menghubungkan..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Koneksi dihapus"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Statistik koneksi"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Disalin"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistik JSON disalin ke papan klip"
@@ -8499,11 +8499,6 @@ msgstr "URL disalin ke papan klip"
msgid "Copy"
msgstr "Salin"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Salin sebagai JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Salin URL banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Salin info build"
@@ -8743,8 +8738,8 @@ msgstr "Salin kunci pengaturan"
msgid "Copy stack trace"
msgstr "Salin jejak tumpukan"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Salin statistik JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Salin kunci pengaturan ke aplikasi autentikator Anda."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Salin ID pengguna"
@@ -8797,7 +8792,7 @@ msgstr "Salin video"
msgid "Copy video link"
msgstr "Salin tautan video"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Salin diagnostik suara"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Tidak dapat mendekode file audio ini."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Konfigurasi instance tidak dapat dimuat. Coba muat ulang halaman."
@@ -11424,7 +11419,7 @@ msgstr "Putuskan sambungan soket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Terputus"
@@ -12256,7 +12251,7 @@ msgstr "Edit atau hapus emoji dan stiker yang dibuat oleh anggota lain."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edit penimpaan untuk peran dan anggota di saluran ini."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Masukkan kode"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Masuk mode layar penuh"
@@ -13277,7 +13272,7 @@ msgstr "Seluruh layar"
msgid "Entire system"
msgstr "Seluruh sistem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Seluruh audio sistem"
@@ -13478,7 +13473,7 @@ msgstr "Keluar"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Keluar dari layar penuh"
@@ -14387,7 +14382,7 @@ msgstr "Selesaikan penyiapan akun dulu"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Selesaikan penyiapan"
@@ -16830,7 +16825,7 @@ msgstr "Dalam mode \"Sistem operasi\", kamus yang tercantum di atas bersifat sar
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Di browser, push-to-talk hanya berfungsi saat tab {PRODUCT_NAME} sedang aktif. Instal aplikasi desktop untuk push-to-talk di seluruh sistem."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Dalam panggilan"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Memuat tujuan…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Memuat konfigurasi instance"
@@ -18885,7 +18880,7 @@ msgstr "Malware, pencurian kredensial, atau file berbahaya."
msgid "Manage"
msgstr "Kelola"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Kelola akun"
@@ -21123,7 +21118,7 @@ msgstr "Terbaru dulu"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Emoji non-animasi ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Tidak ada"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Sambung ulang berhasil. Pilih layar lagi jika Anda ingin melanjutkan streaming sebelumnya."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Menghubungkan ulang..."
@@ -25097,7 +25092,7 @@ msgstr "Referensi disalin."
msgid "Referral parameters"
msgstr "Parameter rujukan"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Segarkan sumber audio"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Melukai diri sendiri atau bunuh diri"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Penyiapan hosting mandiri"
@@ -28220,7 +28215,7 @@ msgstr "Sesi"
msgid "Set {fieldNode} to {0}."
msgstr "Atur {fieldNode} ke {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Atur status kustom"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Singkirkan pemeriksaan ini?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Siapkan {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Swedia"
msgid "Switch account"
msgstr "Ganti akun"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Ganti akun"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Permintaan pertemanan itu tidak lagi tersedia. Segarkan dan coba lagi."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Gambar itu tidak dapat digunakan. Coba file lain."
@@ -31617,6 +31612,11 @@ msgstr "Itu saja semuanya."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Tag #0000 dicadangkan untuk pelanggan Visionary. Visionary tidak lagi tersedia untuk pembelian."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API berada di origin yang berbeda dari halaman ini, sehingga permintaan penyiapan dikirim tanpa sesi Anda. Periksa origin publik dan port yang dikonfigurasi untuk instance ini, lalu muat ulang."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Aplikasi mengalami error"
@@ -34049,7 +34049,7 @@ msgstr "pengguna tidak dikenal"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Pengguna tidak dikenal"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Lihat panggilan"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Lihat kontrol panggilan"
@@ -37928,12 +37928,12 @@ msgstr "Anda tidak akan bisa menghapus pesan terkirim setelah akun Anda dihapus"
msgid "You will still need to finish the email step."
msgstr "Anda masih perlu menyelesaikan langkah email."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Anda tidak akan menerima notifikasi di desktop"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Anda akan terlihat offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# segnalibro} other {# segnalibri}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# community trovata} other {# community trovate}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# community è temporaneamente non disponibile a causa di un malfunzionamento del condensatore di flusso.} other {# community sono temporaneamente non disponibili a causa di un malfunzionamento del condensatore di flusso.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# community in comune} other {# community in comune
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# altro} other {# altri}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# partecipante alla chiamata} other {# partecipanti alla chiamata}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Espandi (# riga)} other {Espandi (# righe)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Espandi (# riga)} other {Espandi (# righe)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Espandi # altro dispositivo} other {Espandi # altri dispositivi}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {In chiamata} other {# in chiamata}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Partecipa alla videochiamata (# partecipante)} other {Partecipa alla videochiamata (# partecipanti)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Continua a guardare # stream e aggiungi questo} other {Continua a guardare # stream e aggiungi questo}}"
@@ -2182,7 +2182,7 @@ msgstr "Azioni"
msgid "Active"
msgstr "Attiva"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Account attivo"
@@ -4578,7 +4578,7 @@ msgstr "Assente in questo momento"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Torna all'adesivo"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Torna al canale vocale"
@@ -7497,7 +7497,7 @@ msgstr "Comprimi l'argomento del canale"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Comprimi dispositivi"
@@ -8157,7 +8157,7 @@ msgstr "Connesso alla chat vocale"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Connessione..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Connessione rimossa"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Statistiche connessione"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Copiato"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistiche JSON copiate negli appunti"
@@ -8499,11 +8499,6 @@ msgstr "URL copiato negli appunti"
msgid "Copy"
msgstr "Copia"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copia come JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Copia URL banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copia info build"
@@ -8743,8 +8738,8 @@ msgstr "Copia la chiave di configurazione"
msgid "Copy stack trace"
msgstr "Copia stack trace"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copia JSON statistiche"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copia la chiave di configurazione nell'app di autenticazione."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copia ID utente"
@@ -8797,7 +8792,7 @@ msgstr "Copia video"
msgid "Copy video link"
msgstr "Copia link video"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copia diagnostica vocale"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Impossibile decodificare questo file audio."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Impossibile caricare la configurazione dell'istanza. Riprova a ricaricare la pagina."
@@ -11424,7 +11419,7 @@ msgstr "Disconnetti socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Disconnesso"
@@ -12256,7 +12251,7 @@ msgstr "Modifica o elimina emoji e sticker creati da altri membri."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Modifica le sovrascritture per ruoli e membri in questo canale."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Inserisci codice"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Attiva schermo intero"
@@ -13277,7 +13272,7 @@ msgstr "Schermo intero"
msgid "Entire system"
msgstr "Intero sistema"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Audio di sistema"
@@ -13478,7 +13473,7 @@ msgstr "Esci"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Esci dalla modalità a schermo intero"
@@ -14387,7 +14382,7 @@ msgstr "Completa prima la configurazione dell'account"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Completa la configurazione"
@@ -16830,7 +16825,7 @@ msgstr "In modalità \"Sistema operativo\", i dizionari elencati sopra sono indi
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "In un browser, la funzione \"Premi per parlare\" funziona solo quando la scheda di {PRODUCT_NAME} è attiva. Installa l'app desktop per usare la funzione \"Premi per parlare\" a livello di sistema."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "In chiamata"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Caricamento destinazioni…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Caricamento configurazione istanza"
@@ -18885,7 +18880,7 @@ msgstr "Malware, furto di credenziali o file dannosi."
msgid "Manage"
msgstr "Gestisci"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Gestisci account"
@@ -21123,7 +21118,7 @@ msgstr "Più recenti prima"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Emoji non animate ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Nessuno"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Riconnessione riuscita. Scegli di nuovo uno schermo se vuoi riprendere il tuo stream precedente."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Riconnessione..."
@@ -25097,7 +25092,7 @@ msgstr "Riferimento copiato."
msgid "Referral parameters"
msgstr "Parametri di riferimento"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Aggiorna sorgenti audio"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Autolesionismo o suicidio"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Configurazione self-hosted"
@@ -28220,7 +28215,7 @@ msgstr "Sessioni"
msgid "Set {fieldNode} to {0}."
msgstr "Imposta {fieldNode} su {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Imposta uno stato personalizzato"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Mettere da parte questo controllo?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Configura {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Svedese"
msgid "Switch account"
msgstr "Cambia account"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Cambia account"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "La richiesta di amicizia non è più disponibile. Aggiorna e riprova."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Impossibile utilizzare quell'immagine. Prova con un file diverso."
@@ -31617,6 +31612,11 @@ msgstr "Questo è tutto."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Il tag #0000 è riservato agli abbonati Visionary. Visionary non è più disponibile per l'acquisto."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "L'API si trova su un'origine diversa da questa pagina, quindi le richieste di configurazione vengono inviate senza la tua sessione. Controlla l'origine pubblica e la porta con cui è configurata questa istanza, quindi ricarica."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "L'app si è bloccata"
@@ -34049,7 +34049,7 @@ msgstr "utente sconosciuto"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Utente sconosciuto"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Visualizza chiamata"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Mostra i controlli della chiamata"
@@ -37928,12 +37928,12 @@ msgstr "Non potrai eliminare i messaggi inviati dopo l'eliminazione del tuo acco
msgid "You will still need to finish the email step."
msgstr "Dovrai comunque completare il passaggio dell'email."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Non riceverai notifiche sul desktop"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Risulterai offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {#件のブックマーク} other {#件のブック
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {#件のコミュニティが見つかりました} other {#件のコミュニティが見つかりました}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {#件のコミュニティはフラックスキャパシタの不具合により一時的に利用できません。} other {#件のコミュニティはフラックスキャパシタの不具合により一時的に利用できません。}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {#つの共通コミュニティ} other {#つの共
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {#人} other {#人}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {#人が通話中} other {#人が通話中}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {展開(#行)} other {展開(#行)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {#行を展開} other {#行を展開}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {#件の他のデバイスを展開} other {#件の他のデバイスを展開}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {通話中} other {#人が通話中}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {ビデオ通話に参加(#人)} other {ビデオ通話に参加(#人)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {#件のストリームを視聴し続け、これを追加} other {#件のストリームを視聴し続け、これを追加}}"
@@ -2182,7 +2182,7 @@ msgstr "アクション"
msgid "Active"
msgstr "有効"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "使用中のアカウント"
@@ -4578,7 +4578,7 @@ msgstr "現在離席中"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "ステッカーに戻る"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "音声チャンネルに戻る"
@@ -7497,7 +7497,7 @@ msgstr "チャンネルのトピックを折りたたむ"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "デバイスを折りたたむ"
@@ -8157,7 +8157,7 @@ msgstr "ボイスに接続中"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "接続中..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "接続を削除しました"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "接続状況"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "コピーしました"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "統計情報JSONをクリップボードにコピーしました"
@@ -8499,11 +8499,6 @@ msgstr "URLをクリップボードにコピーしました"
msgid "Copy"
msgstr "コピー"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "JSONとしてコピー"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "バナーURLをコピー"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "ビルド情報をコピー"
@@ -8743,8 +8738,8 @@ msgstr "設定キーをコピー"
msgid "Copy stack trace"
msgstr "スタックトレースをコピー"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "統計情報をJSONでコピー"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "認証アプリに設定キーをコピーしてください。"
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "ユーザーIDをコピー"
@@ -8797,7 +8792,7 @@ msgstr "動画をコピー"
msgid "Copy video link"
msgstr "動画のリンクをコピー"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "音声診断をコピー"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "この音声ファイルをデコードできませんでした。"
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "インスタンスの設定を読み込めませんでした。ページを再読み込みしてください。"
@@ -11424,7 +11419,7 @@ msgstr "ソケットを切断"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "切断されました"
@@ -12256,7 +12251,7 @@ msgstr "他のメンバーが作成した絵文字やスタンプを編集また
msgid "Edit overwrites for roles and members in this channel."
msgstr "このチャンネルでのロールとメンバーの上書き設定を編集."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "コードを入力"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "全画面表示"
@@ -13277,7 +13272,7 @@ msgstr "画面全体"
msgid "Entire system"
msgstr "システム全体"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "システム全体の音声"
@@ -13478,7 +13473,7 @@ msgstr "終了"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "フルスクリーンを終了"
@@ -14387,7 +14382,7 @@ msgstr "まずアカウント設定を完了してください"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "セットアップを完了"
@@ -16830,7 +16825,7 @@ msgstr "「OSの設定に従う」モードでは、上記の辞書は推奨と
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "ブラウザでは、プッシュトゥトークは{PRODUCT_NAME}タブがフォーカスされている間のみ機能します。システム全体でプッシュトゥトークを使用するには、デスクトップアプリをインストールしてください。"
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "通話中"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "送信先を読み込み中…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "インスタンス設定を読み込み中"
@@ -18885,7 +18880,7 @@ msgstr "マルウェア、認証情報窃盗、または有害なファイル。
msgid "Manage"
msgstr "管理"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "アカウントを管理"
@@ -21123,7 +21118,7 @@ msgstr "新しい順"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "非アニメーション絵文字 ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "なし"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "再接続しました。以前のストリームを再開したい場合は、もう一度画面を選択してください。"
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "再接続中..."
@@ -25097,7 +25092,7 @@ msgstr "参照をコピーしました。"
msgid "Referral parameters"
msgstr "紹介パラメーター"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "音声ソースを更新"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "自傷行為または自殺"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "セルフホスト設定"
@@ -28220,7 +28215,7 @@ msgstr "セッション"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode}を{0}に設定."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "カスタムステータスを設定"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "このチェックをスキップしますか?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "{productName} を設定する"
@@ -30929,7 +30924,7 @@ msgstr "スウェーデン語"
msgid "Switch account"
msgstr "アカウントを切り替える"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "アカウントを切り替える"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "この友達リクエストは利用できなくなりました。画面を更新してもう一度お試しください。"
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "その画像は使用できませんでした。別のファイルをお試しください。"
@@ -31617,6 +31612,11 @@ msgstr "ブックマークは以上です。"
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "#0000タグはVisionary登録者専用です。Visionaryは現在購入できません。"
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "APIがこのページと異なるオリジンにあるため、セットアップリクエストはセッションなしで送信されます。このインスタンスで設定されているパブリックオリジンとポートを確認してから、再読み込みしてください。"
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "アプリがクラッシュしました"
@@ -34049,7 +34049,7 @@ msgstr "不明なユーザー"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "不明なユーザー"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "通話を表示"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "通話コントロールを表示"
@@ -37928,12 +37928,12 @@ msgstr "アカウント削除後、送信済みのメッセージを削除する
msgid "You will still need to finish the email step."
msgstr "メールでの確認も完了させる必要があります。"
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "デスクトップでは通知を受け取りません"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "オフラインと表示されます"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {#개 북마크} other {#개 북마크}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {#개 커뮤니티 찾음} other {#개 커뮤니티 찾음}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {#개 커뮤니티가 플럭스 캐패시터 오작동으로 인해 일시적으로 이용할 수 없습니다.} other {#개 커뮤니티가 플럭스 캐패시터 오작동으로 인해 일시적으로 이용할 수 없습니다.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {#개의 공통 커뮤니티} other {#개의 공통
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {#명 외} other {#명 외}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {#명 통화 중} other {#명 통화 중}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {펼치기 (#줄)} other {펼치기 (#줄)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {# 행 확장} other {# 행 확장}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {#개의 다른 기기 확장} other {#개의 다른 기기 확장}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {통화 중} other {#명 통화 중}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {영상 통화 참여 (참여자 #명)} other {영상 통화 참여 (참여자 #명)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {#개의 스트림을 계속 시청하고 이 스트림을 추가합니다} other {#개의 스트림을 계속 시청하고 이 스트림을 추가합니다}}"
@@ -2182,7 +2182,7 @@ msgstr "작업"
msgid "Active"
msgstr "활성"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "사용 중인 계정"
@@ -4578,7 +4578,7 @@ msgstr "지금은 부재중"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "스티커로 돌아가기"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "음성 채널로 돌아가기"
@@ -7497,7 +7497,7 @@ msgstr "채널 주제 접기"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "기기 접기"
@@ -8157,7 +8157,7 @@ msgstr "음성 연결됨"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "연결 중..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "연결 삭제됨"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "연결 상태"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "복사됨"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "통계 JSON을 클립보드에 복사했습니다"
@@ -8499,11 +8499,6 @@ msgstr "URL이 클립보드에 복사되었습니다"
msgid "Copy"
msgstr "복사"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "JSON으로 복사"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "배너 URL 복사"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "빌드 정보 복사"
@@ -8743,8 +8738,8 @@ msgstr "설정 키 복사"
msgid "Copy stack trace"
msgstr "스택 트레이스 복사"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "통계 JSON 복사"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "인증 앱에 설정 키를 복사하세요."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "사용자 ID 복사"
@@ -8797,7 +8792,7 @@ msgstr "동영상 복사"
msgid "Copy video link"
msgstr "동영상 링크 복사"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "음성 진단 복사"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "이 오디오 파일을 디코딩할 수 없습니다."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "인스턴스 구성을 불러올 수 없습니다. 페이지를 새로고침해 보세요."
@@ -11424,7 +11419,7 @@ msgstr "소켓 연결 해제"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "연결 끊김"
@@ -12256,7 +12251,7 @@ msgstr "다른 멤버가 만든 이모티콘 및 스티커를 수정하거나
msgid "Edit overwrites for roles and members in this channel."
msgstr "이 채널의 역할 및 멤버 권한을 수정합니다."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "코드 입력"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "전체 화면으로 보기"
@@ -13277,7 +13272,7 @@ msgstr "전체 화면"
msgid "Entire system"
msgstr "시스템 전체"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "시스템 오디오 전체"
@@ -13478,7 +13473,7 @@ msgstr "나가기"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "전체 화면 종료"
@@ -14387,7 +14382,7 @@ msgstr "먼저 계정 설정을 완료하세요"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "설정 완료"
@@ -16830,7 +16825,7 @@ msgstr "'운영체제' 모드에서는 위에 나열된 사전은 권장 사항
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "브라우저에서는 {PRODUCT_NAME} 탭이 활성화된 경우에만 PTT(Push-to-Talk)가 작동합니다. 시스템 전체에서 PTT를 사용하려면 데스크톱 앱을 설치하세요."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "통화 중"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "대상 불러오는 중…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "인스턴스 구성을 불러오는 중"
@@ -18885,7 +18880,7 @@ msgstr "악성코드, 개인 정보 도용 또는 유해 파일."
msgid "Manage"
msgstr "관리"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "계정 관리"
@@ -21123,7 +21118,7 @@ msgstr "최신순"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "움직이지 않는 이모티콘 ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "없음"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "재연결되었습니다. 이전 스트림을 다시 시작하려면 화면을 다시 선택하세요."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "다시 연결 중..."
@@ -25097,7 +25092,7 @@ msgstr "참조가 복사되었습니다."
msgid "Referral parameters"
msgstr "추천 매개변수"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "오디오 소스 새로고침"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "자해 또는 자살"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "셀프 호스팅 설정"
@@ -28220,7 +28215,7 @@ msgstr "세션"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode}을(를) {0}(으)로 설정했습니다."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "맞춤 상태 설정"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "이 확인을 건너뛸까요?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "{productName} 설정"
@@ -30929,7 +30924,7 @@ msgstr "스웨덴어"
msgid "Switch account"
msgstr "계정 전환"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "계정 전환"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "친구 요청을 더 이상 사용할 수 없습니다. 새로고침 후 다시 시도해 주세요."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "해당 이미지를 사용할 수 없습니다. 다른 파일을 시도해 보세요."
@@ -31617,6 +31612,11 @@ msgstr "모두 불러왔습니다."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "#0000 태그는 Visionary 구독자 전용입니다. Visionary는 더 이상 구매할 수 없습니다."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API가 이 페이지와 다른 출처에 있으므로 세션 없이 설정 요청이 전송됩니다. 구성된 공개 출처 및 포트를 확인한 후 새로고침하세요."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "앱이 비정상적으로 종료되었습니다"
@@ -34049,7 +34049,7 @@ msgstr "알 수 없는 사용자"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "알 수 없는 사용자"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "통화 보기"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "통화 제어 보기"
@@ -37928,12 +37928,12 @@ msgstr "계정 삭제 후에는 보낸 메시지를 삭제할 수 없습니다"
msgid "You will still need to finish the email step."
msgstr "이메일 단계를 완료해야 합니다."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "데스크톱에서는 알림을 받지 않습니다"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "오프라인으로 표시됩니다"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# žymė} other {# žymės}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# bendrija rasta} other {# bendrijų rasta}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# bendruomenė laikinai nepasiekiama dėl srauto kondensatoriaus gedimo.} other {# bendruomenės laikinai nepasiekiamos dėl srauto kondensatoriaus gedimo.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# bendra bendruomenė} other {# bendros bendruomen
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# kitas} other {# kiti}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# dalyvis skambutyje} other {# dalyviai skambutyje}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Išskleisti (# eilutę)} other {Išskleisti (# eilu
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Rodyti (# eilutę)} other {Rodyti (# eilutes)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Išskleisti # kitą įrenginį} other {Išskleisti # kitus įrenginius}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {skambina} other {# skambina}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Prisijungti prie vaizdo skambučio (# dalyvis)} other {Prisijungti prie vaizdo skambučio (# dalyviai)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Toliau žiūrėti # srautą ir pridėti šį} other {Toliau žiūrėti # srautus ir pridėti šį}}"
@@ -2182,7 +2182,7 @@ msgstr "Veiksmai"
msgid "Active"
msgstr "Aktyvus"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktyvi paskyra"
@@ -4578,7 +4578,7 @@ msgstr "Šiuo metu nesu prie kompiuterio"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Grįžti prie lipduko"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Grįžti į balso kanalą"
@@ -7497,7 +7497,7 @@ msgstr "Sutraukti kanalo temą"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Sutraukti įrenginius"
@@ -8157,7 +8157,7 @@ msgstr "Prisijungta prie balso pokalbio"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Jungiamasi..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Ryšys pašalintas"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Ryšio statistika"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Nukopijuota"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistikos JSON nukopijuotas į iškarpinę"
@@ -8499,11 +8499,6 @@ msgstr "URL nukopijuotas į iškarpinę"
msgid "Copy"
msgstr "Kopijuoti"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopijuoti kaip JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopijuoti reklamjuostės URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopijuoti versijos informaciją"
@@ -8743,8 +8738,8 @@ msgstr "Nukopijuokite nustatymo raktą"
msgid "Copy stack trace"
msgstr "Kopijuoti steko atsekimą"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopijuoti statistikos JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Nukopijuokite nustatymo raktą į savo autentifikavimo programėlę."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopijuoti vartotojo ID"
@@ -8797,7 +8792,7 @@ msgstr "Kopijuoti vaizdo įrašą"
msgid "Copy video link"
msgstr "Kopijuoti vaizdo įrašo nuorodą"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopijuoti balso diagnostiką"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Nepavyko iššifruoti šio garso failo."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Nepavyko įkelti instancijos konfigūracijos. Pabandykite perkrauti puslapį."
@@ -11424,7 +11419,7 @@ msgstr "Atjungti lizdą"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Atjungta"
@@ -12256,7 +12251,7 @@ msgstr "Redaguoti arba ištrinti kitų narių sukurtus jaustukus ir lipdukus."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Redaguoti šio kanalo vaidmenų ir narių perrašymus."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Įvesti kodą"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Įjungti viso ekrano režimą"
@@ -13277,7 +13272,7 @@ msgstr "Visas ekranas"
msgid "Entire system"
msgstr "Visa sistema"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Visos sistemos garsas"
@@ -13478,7 +13473,7 @@ msgstr "Išeiti"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Išeiti iš viso ekrano režimo"
@@ -14387,7 +14382,7 @@ msgstr "Pirmiausia užbaikite paskyros nustatymą"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Baigti sąranką"
@@ -16830,7 +16825,7 @@ msgstr "\"Operacinės sistemos\" režimu aukščiau išvardyti žodynai yra pata
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Naršyklėje \"push-to-talk\" veikia tik tada, kai \"{PRODUCT_NAME}\" skirtukas yra aktyvus. Įdiekite darbalaukio programą, kad \"push-to-talk\" veiktų visoje sistemoje."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Skambučio metu"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Įkeliamos paskirties vietos…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Įkeliama instancijos konfigūracija"
@@ -18885,7 +18880,7 @@ msgstr "Kenkėjiškos programos, prisijungimo duomenų vagystė arba žalingi fa
msgid "Manage"
msgstr "Tvarkyti"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Tvarkyti paskyras"
@@ -21123,7 +21118,7 @@ msgstr "Pirmiausia naujausi"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Neanimuoti jaustukai ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Nėra"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Prisijungimas sėkmingas. Jei norite tęsti ankstesnę transliaciją, pasirinkite ekraną dar kartą."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Jungiamasi iš naujo..."
@@ -25097,7 +25092,7 @@ msgstr "Nuoroda nukopijuota."
msgid "Referral parameters"
msgstr "Nuorodos parametrai"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Atnaujinti garso šaltinius"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Savižala ar savižudybė"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Savarankiško prieglobos sąranka"
@@ -28220,7 +28215,7 @@ msgstr "Seansai"
msgid "Set {fieldNode} to {0}."
msgstr "Nustatyti \"{fieldNode}\" į \"{0}\"."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Nustatyti pasirinktinę būseną"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Atidėti šį patikrinimą?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Nustatykite {productName}"
@@ -30929,7 +30924,7 @@ msgstr "švedų"
msgid "Switch account"
msgstr "Perjungti paskyrą"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Keisti paskyras"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Šis draugo užklausimas nebegalimas. Atnaujinkite ir bandykite dar kartą."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Šio paveikslėlio naudoti nepavyko. Pabandykite kitą."
@@ -31617,6 +31612,11 @@ msgstr "Tai viskas."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Žyma #0000 yra rezervuota \"Visionary\" prenumeratoriams. \"Visionary\" nebepasiekiama įsigyti."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API yra kitos kilmės nei šis puslapis, todėl sąrankos užklausos siunčiamos be jūsų sesijos. Patikrinkite viešąją kilmę ir prievadą, su kuriais sukonfigūruota ši instancija, tada perkraukite."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Programa sudužo"
@@ -34049,7 +34049,7 @@ msgstr "nežinomas naudotojas"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Nežinomas naudotojas"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Peržiūrėti skambutį"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Peržiūrėti skambučio valdiklius"
@@ -37928,12 +37928,12 @@ msgstr "Ištrynus paskyrą, išsiųstų žinučių ištrinti nebegalėsite"
msgid "You will still need to finish the email step."
msgstr "Vis tiek turėsite užbaigti el. pašto patvirtinimą."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Pranešimų darbalaukyje negausite"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Atrodysite neprisijungęs"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# bladwijzer} other {# bladwijzers}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# community gevonden} other {# communities gevonden}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# community is tijdelijk niet beschikbaar door een storing in de fluxcondensator.} other {# communities zijn tijdelijk niet beschikbaar door een storing in de fluxcondensator.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# gemeenschappelijke community} other {# gemeenscha
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# ander} other {# anderen}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# deelnemer aan gesprek} other {# deelnemers aan gesprek}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Uitvouwen (# regel)} other {Uitvouwen (# regels)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Toon (# rij)} other {Toon (# rijen)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Vouw # ander apparaat uit} other {Vouw # andere apparaten uit}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {In gesprek} other {# in gesprek}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Deelnemen aan videogesprek (# deelnemer)} other {Deelnemen aan videogesprek (# deelnemers)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Blijf # stream bekijken en voeg deze toe} other {Blijf # streams bekijken en voeg deze toe}}"
@@ -2182,7 +2182,7 @@ msgstr "Acties"
msgid "Active"
msgstr "Actief"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Actief account"
@@ -4578,7 +4578,7 @@ msgstr "Nu afwezig"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Terug naar sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Terug naar spraakkanaal"
@@ -7497,7 +7497,7 @@ msgstr "Kanaalonderwerp inklappen"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Apparaten samenvouwen"
@@ -8157,7 +8157,7 @@ msgstr "Verbonden met spraak"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Verbinden..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Verbinding verwijderd"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Verbindingsstatistieken"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Gekopieerd"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistieken-JSON naar klembord gekopieerd"
@@ -8499,11 +8499,6 @@ msgstr "URL gekopieerd naar klembord"
msgid "Copy"
msgstr "Kopiëren"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopiëren als JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Banner-URL kopiëren"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Buildinformatie kopiëren"
@@ -8743,8 +8738,8 @@ msgstr "Kopieer de installatiecode"
msgid "Copy stack trace"
msgstr "Stacktrace kopiëren"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Statistieken-JSON kopiëren"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopieer de installatiecode naar je authenticatie-app."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Gebruikers-ID kopiëren"
@@ -8797,7 +8792,7 @@ msgstr "Video kopiëren"
msgid "Copy video link"
msgstr "Videolink kopiëren"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Spraakdiagnose kopiëren"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Kan dit audiobestand niet decoderen."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Kon de instantieconfiguratie niet laden. Probeer de pagina opnieuw te laden."
@@ -11424,7 +11419,7 @@ msgstr "Socket verbreken"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Verbinding verbroken"
@@ -12256,7 +12251,7 @@ msgstr "Emoji en stickers bewerken of verwijderen die door andere leden zijn gem
msgid "Edit overwrites for roles and members in this channel."
msgstr "Overschrijvingen voor rollen en leden in dit kanaal bewerken."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Code invoeren"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Volledig scherm"
@@ -13277,7 +13272,7 @@ msgstr "Hele scherm"
msgid "Entire system"
msgstr "Hele systeem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Volledige systeemaudio"
@@ -13478,7 +13473,7 @@ msgstr "Verlaten"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Volledig scherm afsluiten"
@@ -14387,7 +14382,7 @@ msgstr "Maak eerst je account aan"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Setup voltooien"
@@ -16830,7 +16825,7 @@ msgstr "In de modus \"Besturingssysteem\" zijn de hierboven vermelde woordenboek
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "In een browser werkt push-to-talk alleen als het tabblad van {PRODUCT_NAME} actief is. Installeer de desktop-app voor push-to-talk voor het hele systeem."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "In gesprek"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Bestemmingen laden…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Instanceconfiguratie laden"
@@ -18885,7 +18880,7 @@ msgstr "Malware, diefstal van inloggegevens of schadelijke bestanden."
msgid "Manage"
msgstr "Beheren"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Accounts beheren"
@@ -21123,7 +21118,7 @@ msgstr "Nieuwste eerst"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Niet-geanimeerde emoji ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Geen"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Opnieuw verbinden gelukt. Kies opnieuw een scherm als je je vorige stream wilt hervatten."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Opnieuw verbinden..."
@@ -25097,7 +25092,7 @@ msgstr "Referentie gekopieerd."
msgid "Referral parameters"
msgstr "Verwijzingsparameters"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Audiobronnen vernieuwen"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Zelfbeschadiging of zelfmoord"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Zelf hosten instellen"
@@ -28220,7 +28215,7 @@ msgstr "Sessies"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} ingesteld op {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Aangepaste status instellen"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Zet deze controle opzij?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Stel {productName} in"
@@ -30929,7 +30924,7 @@ msgstr "Zweeds"
msgid "Switch account"
msgstr "Ander account"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Van account wisselen"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Dat vriendschapsverzoek is niet meer beschikbaar. Vernieuw de pagina en probeer het opnieuw."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Die afbeelding kon niet worden gebruikt. Probeer een ander bestand."
@@ -31617,6 +31612,11 @@ msgstr "Dat waren ze allemaal."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "De tag #0000 is gereserveerd voor Visionary-abonnees. Visionary is niet langer beschikbaar voor aankoop."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "De API bevindt zich op een ander domein dan deze pagina, dus setup-verzoeken worden zonder je sessie verzonden. Controleer het openbare domein en de poort waarmee dit exemplaar is geconfigureerd, en laad vervolgens opnieuw."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "De app is gecrasht"
@@ -34049,7 +34049,7 @@ msgstr "onbekende gebruiker"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Onbekende gebruiker"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Oproep bekijken"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Oproepbediening bekijken"
@@ -37928,12 +37928,12 @@ msgstr "Verzonden berichten kunnen niet meer worden verwijderd nadat je account
msgid "You will still need to finish the email step."
msgstr "Je moet de e-mailstap nog steeds afronden."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Je ontvangt geen meldingen op je desktop"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Je verschijnt als offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# bokmerke} other {# bokmerker}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# fellesskap funnet} other {# fellesskap funnet}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# fellesskap er midlertidig utilgjengelig på grunn av en feil i flukskondensatoren.} other {# fellesskap er midlertidig utilgjengelige på grunn av en feil i flukskondensatoren.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# felles fellesskap} other {# felles fellesskap}}"
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# annen} other {# andre}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# deltaker i samtalen} other {# deltakere i samtalen}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Vis (# linje)} other {Vis (# linjer)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Vis flere (# rad)} other {Vis flere (# rader)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Vis # annen enhet} other {Vis # andre enheter}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {I samtale} other {# i samtale}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Bli med i videosamtale (# deltaker)} other {Bli med i videosamtale (# deltakere)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Fortsett å se # strøm og legg til denne} other {Fortsett å se # strømmer og legg til denne}}"
@@ -2182,7 +2182,7 @@ msgstr "Handlinger"
msgid "Active"
msgstr "Aktiv"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktiv konto"
@@ -4578,7 +4578,7 @@ msgstr "Borte akkurat nå"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Tilbake til klistremerke"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Tilbake til talekanal"
@@ -7497,7 +7497,7 @@ msgstr "Skjul kanalemne"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Skjul enheter"
@@ -8157,7 +8157,7 @@ msgstr "Koblet til tale"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Kobler til..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Tilkobling fjernet"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Tilkoblingsstatistikk"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Kopiert"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistikk-JSON kopiert til utklippstavlen"
@@ -8499,11 +8499,6 @@ msgstr "URL kopiert til utklippstavlen"
msgid "Copy"
msgstr "Kopier"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopier som JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopier banner-URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopier byggeinformasjon"
@@ -8743,8 +8738,8 @@ msgstr "Kopier oppsett-nøkkelen"
msgid "Copy stack trace"
msgstr "Kopier stakksporing"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopier statistikk (JSON)"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopier oppsett-nøkkelen inn i autentiseringsappen din."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopier bruker-ID"
@@ -8797,7 +8792,7 @@ msgstr "Kopier video"
msgid "Copy video link"
msgstr "Kopier videolenke"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopier talediagnostikk"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Kunne ikke dekode denne lydfilen."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Kunne ikke laste inn instanskonfigurasjonen. Prøv å laste inn siden på nytt."
@@ -11424,7 +11419,7 @@ msgstr "Koble fra socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Frakoblet"
@@ -12256,7 +12251,7 @@ msgstr "Rediger eller slett emojier og klistremerker som er laget av andre medle
msgid "Edit overwrites for roles and members in this channel."
msgstr "Rediger overstyringer for roller og medlemmer i denne kanalen."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Skriv inn kode"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Gå til fullskjerm"
@@ -13277,7 +13272,7 @@ msgstr "Hele skjermen"
msgid "Entire system"
msgstr "Hele systemet"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Hele systemlyden"
@@ -13478,7 +13473,7 @@ msgstr "Avslutt"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Avslutt fullskjerm"
@@ -14387,7 +14382,7 @@ msgstr "Fullfør kontooppsettet først"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Fullfør oppsett"
@@ -16830,7 +16825,7 @@ msgstr "I \"Operativsystem\"-modus er ordbøkene ovenfor veiledende. {PRODUCT_NA
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "I en nettleser fungerer push-to-talk bare når {PRODUCT_NAME}-fanen er fokusert. Installer skrivebordsappen for push-to-talk på hele systemet."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "I en samtale"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Laster destinasjoner …"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Laster inn instanskonfigurasjon"
@@ -18885,7 +18880,7 @@ msgstr "Skadelig programvare, stjeling av innloggingsinformasjon eller skadelige
msgid "Manage"
msgstr "Administrer"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Administrer kontoer"
@@ -21123,7 +21118,7 @@ msgstr "Nyeste først"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Ikke-animert emoji ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Ingen"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Tilkoblingen er gjenopprettet. Velg en skjerm på nytt hvis du vil fortsette den forrige strømmen din."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Kobler til på nytt..."
@@ -25097,7 +25092,7 @@ msgstr "Referanse kopiert."
msgid "Referral parameters"
msgstr "Henvisningsparametere"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Oppdater lydkilder"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Selvskading eller selvmord"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Selv-vert-oppsett"
@@ -28220,7 +28215,7 @@ msgstr "Økter"
msgid "Set {fieldNode} to {0}."
msgstr "Satte {fieldNode} til {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Angi en egendefinert status"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Legg denne sjekken til side?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Sett opp {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Svensk"
msgid "Switch account"
msgstr "Bytt konto"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Bytt konto"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Den venneforespørselen er ikke lenger tilgjengelig. Oppdater og prøv igjen."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Det bildet kunne ikke brukes. Prøv en annen fil."
@@ -31617,6 +31612,11 @@ msgstr "Det var alle."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Taggen #0000 er reservert for Visionary-abonnenter. Visionary er ikke lenger tilgjengelig for kjøp."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API-en er på et annet opprinnelsessted enn denne siden, så oppsettsforespørsler sendes uten økten din. Sjekk det offentlige opprinnelsesstedet og porten denne instansen er konfigurert med, og last deretter inn på nytt."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Appen krasjet"
@@ -34049,7 +34049,7 @@ msgstr "ukjent bruker"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Ukjent bruker"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Vis samtale"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Vis samtalekontroller"
@@ -37928,12 +37928,12 @@ msgstr "Du kan ikke slette sendte meldinger etter at kontoen din er slettet"
msgid "You will still need to finish the email step."
msgstr "Du må fortsatt fullføre e-poststeget."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Du mottar ikke varsler på datamaskinen"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Du vises som frakoblet"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# zakładka} few {# zakładki} many {# zakładek} o
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# społeczność znaleziona} few {# społeczności znalezione} many {# społeczności znalezionych} other {# społeczności znalezionych}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# społeczność jest tymczasowo niedostępna z powodu awarii \"kondensatora strumienia\".} few {# społeczności są tymczasowo niedostępne z powodu awarii \"kondensatora strumienia\".} many {# społeczności jest tymczasowo niedostępnych z powodu awarii \"kondensatora strumienia\".} other {# społeczności są tymczasowo niedostępne z powodu awarii \"kondensatora strumienia\".}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# wspólna społeczność} few {# wspólne społecz
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# inna osoba} few {# inne osoby} many {# innych osób} other {# innych osób}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# uczestnik w rozmowie} few {# uczestników w rozmowie} many {# uczestników w rozmowie} other {# uczestnika w rozmowie}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Rozwiń (1 wiersz)} few {Rozwiń (# wiersze)} many
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Rozwiń (# wiersz)} other {Rozwiń (# wiersze)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Rozwiń # inne urządzenie} other {Rozwiń # inne urządzenia}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {W rozmowie} few {# w rozmowie} many {# w rozmowie}
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Dołącz do rozmowy wideo (# uczestnik)} few {Dołącz do rozmowy wideo (# uczestników)} many {Dołącz do rozmowy wideo (# uczestników)} other {Dołącz do rozmowy wideo (# uczestników)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "Kontynuuj oglądanie {count, plural, one {# transmisji} few {# transmisji} many {# transmisji} other {# transmisji}} i dodaj tę"
@@ -2182,7 +2182,7 @@ msgstr "Działania"
msgid "Active"
msgstr "Aktywna"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktywne konto"
@@ -4578,7 +4578,7 @@ msgstr "Teraz jestem niedostępny(-a)"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Wróć do naklejki"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Wróć do kanału głosowego"
@@ -7497,7 +7497,7 @@ msgstr "Zwiń temat kanału"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Zwiń urządzenia"
@@ -8157,7 +8157,7 @@ msgstr "Połączono z czatem głosowym"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Łączenie..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Połączenie usunięte"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Statystyki połączenia"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Skopiowano"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Skopiowano statystyki JSON do schowka"
@@ -8499,11 +8499,6 @@ msgstr "Skopiowano URL do schowka"
msgid "Copy"
msgstr "Kopiuj"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopiuj jako JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopiuj URL banera"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopiuj informacje o kompilacji"
@@ -8743,8 +8738,8 @@ msgstr "Skopiuj klucz konfiguracji"
msgid "Copy stack trace"
msgstr "Kopiuj ślad stosu"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopiuj statystyki JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Skopiuj klucz konfiguracji do aplikacji uwierzytelniającej."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopiuj ID użytkownika"
@@ -8797,7 +8792,7 @@ msgstr "Kopiuj wideo"
msgid "Copy video link"
msgstr "Kopiuj link do wideo"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopiuj diagnostykę głosową"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Nie można zdekodować tego pliku audio."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Nie udało się załadować konfiguracji instancji. Spróbuj ponownie załadować stronę."
@@ -11424,7 +11419,7 @@ msgstr "Odłącz gniazdo"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Rozłączono"
@@ -12256,7 +12251,7 @@ msgstr "Edytuj lub usuwaj emoji i naklejki utworzone przez innych członków."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edytuj nadpisania dla ról i członków na tym kanale."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Wpisz kod"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Przejdź do trybu pełnoekranowego"
@@ -13277,7 +13272,7 @@ msgstr "Cały ekran"
msgid "Entire system"
msgstr "Cały system"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Dźwięk z całego systemu"
@@ -13478,7 +13473,7 @@ msgstr "Wyjdź"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Wyjdź z trybu pełnoekranowego"
@@ -14387,7 +14382,7 @@ msgstr "Najpierw dokończ konfigurację konta"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Zakończ konfigurację"
@@ -16830,7 +16825,7 @@ msgstr "W trybie \"System operacyjny\" słowniki wymienione powyżej mają chara
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "W przeglądarce funkcja \"naciśnij i mów\" działa tylko wtedy, gdy karta {PRODUCT_NAME} jest aktywna. Zainstaluj aplikację komputerową, aby korzystać z funkcji \"naciśnij i mów\" w całym systemie."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Na rozmowie"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Ładowanie miejsc docelowych…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Ładowanie konfiguracji instancji"
@@ -18885,7 +18880,7 @@ msgstr "Złośliwe oprogramowanie, kradzież danych uwierzytelniających lub szk
msgid "Manage"
msgstr "Zarządzaj"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Zarządzaj kontami"
@@ -21123,7 +21118,7 @@ msgstr "Najpierw najnowsze"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Nieruchome emoji ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Brak"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Ponowne połączenie udane. Wybierz ponownie ekran, jeśli chcesz wznowić poprzedni strumień."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Ponowne łączenie..."
@@ -25097,7 +25092,7 @@ msgstr "Skopiowano odniesienie."
msgid "Referral parameters"
msgstr "Parametry polecenia"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Odśwież źródła dźwięku"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Samookaleczenie lub samobójstwo"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Konfiguracja samodzielnego hostingu"
@@ -28220,7 +28215,7 @@ msgstr "Sesje"
msgid "Set {fieldNode} to {0}."
msgstr "Ustawiono {fieldNode} na {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Ustaw status niestandardowy"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Odłożyć to sprawdzenie?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Skonfiguruj {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Szwedzki"
msgid "Switch account"
msgstr "Zmień konto"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Przełącz konta"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "To zaproszenie do znajomych jest już niedostępne. Odśwież i spróbuj ponownie."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Ten obraz nie mógł zostać użyty. Spróbuj użyć innego pliku."
@@ -31617,6 +31612,11 @@ msgstr "To już wszystkie."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Tag #0000 jest zarezerwowany dla subskrybentów Visionary. Subskrypcja Visionary nie jest już dostępna w sprzedaży."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API znajduje się w innej domenie niż ta strona, więc żądania konfiguracji są wysyłane bez Twojej sesji. Sprawdź publiczną domenę i port, z którymi skonfigurowano tę instancję, a następnie przeładuj."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Aplikacja uległa awarii"
@@ -34049,7 +34049,7 @@ msgstr "nieznany użytkownik"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Nieznany użytkownik"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Wyświetl połączenie"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Wyświetl elementy sterujące połączenia"
@@ -37928,12 +37928,12 @@ msgstr "Nie będzie można usunąć wysłanych wiadomości po usunięciu konta"
msgid "You will still need to finish the email step."
msgstr "Nadal musisz ukończyć krok z e-mailem."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Nie będziesz otrzymywać powiadomień na komputerze"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Będziesz widoczny(-a) jako offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# item salvo} other {# itens salvos}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# comunidade encontrada} other {# comunidades encontradas}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# comunidade está temporariamente indisponível devido a um defeito no capacitor de fluxo.} other {# comunidades estão temporariamente indisponíveis devido a um defeito no capacitor de fluxo.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# comunidade em comum} other {# comunidades em comu
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# outro} other {# outros}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# participante na chamada} other {# participantes na chamada}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Expandir (# linha)} other {Expandir (# linhas)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Expandir (# linha)} other {Expandir (# linhas)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Expandir mais # dispositivo} other {Expandir mais # dispositivos}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Em chamada} other {# em chamada}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Entrar na chamada de vídeo (# participante)} other {Entrar na chamada de vídeo (# participantes)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Continuar assistindo a # transmissão e adicionar esta} other {Continuar assistindo a # transmissões e adicionar esta}}"
@@ -2182,7 +2182,7 @@ msgstr "Ações"
msgid "Active"
msgstr "Ativa"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Conta ativa"
@@ -4578,7 +4578,7 @@ msgstr "Ausente no momento"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Voltar para o sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Voltar para o canal de voz"
@@ -7497,7 +7497,7 @@ msgstr "Recolher tópico do canal"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Recolher dispositivos"
@@ -8157,7 +8157,7 @@ msgstr "Conectado ao áudio"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Conectando..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Conexão removida"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Estatísticas da conexão"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Copiado"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "JSON de estatísticas copiado para a área de transferência"
@@ -8499,11 +8499,6 @@ msgstr "URL copiada para a área de transferência"
msgid "Copy"
msgstr "Copiar"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copiar como JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Copiar URL do banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copiar informações da versão"
@@ -8743,8 +8738,8 @@ msgstr "Copiar chave de configuração"
msgid "Copy stack trace"
msgstr "Copiar rastreamento de pilha"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copiar JSON de estatísticas"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copie a chave de configuração para o seu aplicativo autenticador."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copiar ID de usuário"
@@ -8797,7 +8792,7 @@ msgstr "Copiar vídeo"
msgid "Copy video link"
msgstr "Copiar link do vídeo"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copiar diagnóstico de voz"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Não foi possível decodificar este arquivo de áudio."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Não foi possível carregar a configuração da instância. Tente recarregar a página."
@@ -11424,7 +11419,7 @@ msgstr "Desconectar socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Desconectado"
@@ -12256,7 +12251,7 @@ msgstr "Editar ou apagar figurinhas e emojis criados por outros membros."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Editar permissões de cargos e membros neste canal."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Inserir código"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Entrar em tela cheia"
@@ -13277,7 +13272,7 @@ msgstr "Tela inteira"
msgid "Entire system"
msgstr "Sistema inteiro"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Áudio do sistema inteiro"
@@ -13478,7 +13473,7 @@ msgstr "Sair"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Sair da tela cheia"
@@ -14387,7 +14382,7 @@ msgstr "Conclua a configuração da conta primeiro"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Concluir configuração"
@@ -16830,7 +16825,7 @@ msgstr "No modo \"Sistema operacional\", os dicionários listados acima são ape
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "No navegador, o push-to-talk só funciona enquanto a aba do {PRODUCT_NAME} estiver em foco. Instale o aplicativo para desktop para usar o push-to-talk em todo o sistema."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Em uma chamada"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Carregando destinos…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Carregando configuração da instância"
@@ -18885,7 +18880,7 @@ msgstr "Malware, roubo de credenciais ou arquivos prejudiciais."
msgid "Manage"
msgstr "Gerenciar"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Gerenciar contas"
@@ -21123,7 +21118,7 @@ msgstr "Mais recentes primeiro"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Emojis não animados ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Nenhum"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Reconexão bem-sucedida. Escolha uma tela novamente se quiser retomar sua transmissão anterior."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Reconectando..."
@@ -25097,7 +25092,7 @@ msgstr "Referência copiada."
msgid "Referral parameters"
msgstr "Parâmetros de indicação"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Atualizar fontes de áudio"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Automutilação ou suicídio"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Configuração de auto-hospedagem"
@@ -28220,7 +28215,7 @@ msgstr "Sessões"
msgid "Set {fieldNode} to {0}."
msgstr "Definir {fieldNode} como {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Definir um recado personalizado"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Adiar esta verificação?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Configurar {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Sueco"
msgid "Switch account"
msgstr "Mudar de conta"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Trocar de conta"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Essa solicitação de amizade não está mais disponível. Atualize e tente novamente."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Essa imagem não pôde ser usada. Tente um arquivo diferente."
@@ -31617,6 +31612,11 @@ msgstr "É tudo."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "A tag #0000 é reservada para assinantes Visionary. O Visionary não está mais disponível para compra."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "A API está em uma origem diferente desta página, então as solicitações de configuração são enviadas sem sua sessão. Verifique a origem pública e a porta com as quais esta instância está configurada e recarregue."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "O app travou"
@@ -34049,7 +34049,7 @@ msgstr "usuário desconhecido"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Usuário desconhecido"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Ver chamada"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Ver controles da chamada"
@@ -37928,12 +37928,12 @@ msgstr "Você não poderá apagar as mensagens enviadas depois que sua conta for
msgid "You will still need to finish the email step."
msgstr "Você ainda precisará concluir a etapa do e-mail."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Você não receberá notificações no computador"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Você aparecerá offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# marcaj} other {# marcaje}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# comunitate găsită} other {# comunități găsite}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# comunitate este temporar indisponibilă din cauza unei defecțiuni a condensatorului de flux.} other {# comunități sunt temporar indisponibile din cauza unei defecțiuni a condensatorului de flux.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# comunitate comună} other {# comunități comune}
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# altul} other {# alții}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# participant în apel} other {# participanți în apel}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Extinde (o linie)} other {Extinde (# linii)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Extindeți (# rândul)} other {Extindeți (# rânduri)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Extinde încă un dispozitiv} other {Extinde încă # dispozitive}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {În apel} other {# în apel}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Alăturați-vă apelului video (un participant)} other {Alăturați-vă apelului video (# participanți)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Continuă să urmărești # stream și adaugă-l pe acesta} other {Continuă să urmărești # streamuri și adaugă-l pe acesta}}"
@@ -2182,7 +2182,7 @@ msgstr "Acțiuni"
msgid "Active"
msgstr "Activ"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Cont activ"
@@ -4578,7 +4578,7 @@ msgstr "Plecat(ă) acum"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Înapoi la sticker"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Înapoi la canalul vocal"
@@ -7497,7 +7497,7 @@ msgstr "Restrânge subiectul canalului"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Restrânge dispozitivele"
@@ -8157,7 +8157,7 @@ msgstr "Conectat la apelul vocal"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Se conectează..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Conexiune eliminată"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Statistici conexiune"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Copiat"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statisticile JSON au fost copiate în clipboard"
@@ -8499,11 +8499,6 @@ msgstr "URL copiat în clipboard"
msgid "Copy"
msgstr "Copiază"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Copiază ca JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Copiază adresa URL a bannerului"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copiază informațiile despre versiune"
@@ -8743,8 +8738,8 @@ msgstr "Copiază cheia de configurare"
msgid "Copy stack trace"
msgstr "Copiază istoricul erorilor"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Copiază statisticile JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copiază cheia de configurare în aplicația ta de autentificare."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copiază ID utilizator"
@@ -8797,7 +8792,7 @@ msgstr "Copiază videoclipul"
msgid "Copy video link"
msgstr "Copiază linkul videoclipului"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Copiază diagnosticele vocale"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Fișierul audio nu a putut fi decodificat."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Nu am putut încărca configurația instanței. Încearcă să reîncarci pagina."
@@ -11424,7 +11419,7 @@ msgstr "Deconectare socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Deconectat"
@@ -12256,7 +12251,7 @@ msgstr "Editează sau șterge emoji și stickere create de alți membri."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Editează suprascrierile pentru roluri și membri în acest canal."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Introdu codul"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Intră în ecran complet"
@@ -13277,7 +13272,7 @@ msgstr "Întregul ecran"
msgid "Entire system"
msgstr "Întregul sistem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Întregul sunet al sistemului"
@@ -13478,7 +13473,7 @@ msgstr "Ieșire"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Ieși din ecran complet"
@@ -14387,7 +14382,7 @@ msgstr "Finalizează mai întâi configurarea contului"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Finalizează configurarea"
@@ -16830,7 +16825,7 @@ msgstr "În modul \"Sistem de operare\", dicționarele enumerate mai sus sunt co
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Într-un browser, funcția push-to-talk funcționează doar când fila {PRODUCT_NAME} este activă. Instalează aplicația desktop pentru push-to-talk la nivel de sistem."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Într-un apel"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Se încarcă destinațiile…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Se încarcă configurația instanței"
@@ -18885,7 +18880,7 @@ msgstr "Programe malware, furt de date de conectare sau fișiere dăunătoare."
msgid "Manage"
msgstr "Gestionare"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Gestionează conturile"
@@ -21123,7 +21118,7 @@ msgstr "Cele mai noi primele"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Emoji non-animate ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Niciunul"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Reconectare reușită. Alege din nou un ecran dacă vrei să reiei transmisiunea anterioară."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Se reconectează..."
@@ -25097,7 +25092,7 @@ msgstr "Referință copiată."
msgid "Referral parameters"
msgstr "Parametri de recomandare"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Reîmprospătați sursele audio"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Auto-vătămare sau sinucidere"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Configurare auto-găzduire"
@@ -28220,7 +28215,7 @@ msgstr "Sesiuni"
msgid "Set {fieldNode} to {0}."
msgstr "S-a setat {fieldNode} la {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Setează o stare personalizată"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Pui deoparte această verificare?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Configurați {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Suedeză"
msgid "Switch account"
msgstr "Schimbă contul"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Schimbă conturile"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Această cerere de prietenie nu mai este disponibilă. Reîmprospătează și încearcă din nou."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Imaginea respectivă nu a putut fi utilizată. Încearcă un alt fișier."
@@ -31617,6 +31612,11 @@ msgstr "Asta-i tot."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Eticheta #0000 este rezervată abonaților Visionary. Abonamentul Visionary nu mai este disponibil pentru achiziție."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API-ul este pe un alt domeniu decât această pagină, așa că cererile de configurare sunt trimise fără sesiunea ta. Verifică domeniul public și portul cu care este configurată această instanță, apoi reîncarcă."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Aplicația s-a închis neașteptat"
@@ -34049,7 +34049,7 @@ msgstr "utilizator necunoscut"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Utilizator necunoscut"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Vezi apelul"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Vezi comenzile apelului"
@@ -37928,12 +37928,12 @@ msgstr "Nu vei putea șterge mesajele trimise după ce îți ștergi contul"
msgid "You will still need to finish the email step."
msgstr "Va trebui în continuare să finalizezi pasul cu emailul."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Nu vei primi notificări pe desktop"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Vei apărea offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# закладка} few {# закладки} many {
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# сообщество найдено} few {# сообщества найдено} many {# сообществ найдено} other {# сообществ найдено}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# сообщество временно недоступно из-за неисправности потокового накопителя.} few {# сообщества временно недоступны из-за неисправности потокового накопителя.} many {# сообществ временно недоступны из-за неисправности потокового накопителя.} other {# сообществ временно недоступны из-за неисправности потокового накопителя.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# общее сообщество} few {# общи
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# другой} other {# других}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# участник звонка} few {# участника звонка} many {# участников звонка} other {# участника звонка}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Развернуть (# строка)} few {Раз
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Развернуть (# строку)} other {Развернуть (# строки)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Развернуть ещё # устройство} other {Развернуть ещё # устройства}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {В звонке} few {# в звонке} many {# в
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Присоединиться к видеозвонку (1 участник)} few {Присоединиться к видеозвонку ({count} участника)} many {Присоединиться к видеозвонку ({count} участников)} other {Присоединиться к видеозвонку ({count} участников)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Продолжить смотреть # трансляцию и добавить эту} few {Продолжить смотреть # трансляции и добавить эту} many {Продолжить смотреть # трансляций и добавить эту} other {Продолжить смотреть # трансляций и добавить эту}}"
@@ -2182,7 +2182,7 @@ msgstr "Действия"
msgid "Active"
msgstr "Активна"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Активный аккаунт"
@@ -4578,7 +4578,7 @@ msgstr "Сейчас нет на месте"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Назад к стикеру"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Вернуться в голосовой канал"
@@ -7497,7 +7497,7 @@ msgstr "Свернуть тему канала"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Свернуть устройства"
@@ -8157,7 +8157,7 @@ msgstr "Подключено к голосовому чату"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Подключение..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Соединение удалено"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Статистика соединения"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Скопировано"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Статистика JSON скопирована в буфер обмена"
@@ -8499,11 +8499,6 @@ msgstr "Ссылка скопирована"
msgid "Copy"
msgstr "Копировать"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Копировать как JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Скопировать ссылку баннера"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Скопировать информацию о сборке"
@@ -8743,8 +8738,8 @@ msgstr "Скопировать ключ настройки"
msgid "Copy stack trace"
msgstr "Скопировать стек вызовов"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Копировать статистику (JSON)"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Скопируйте ключ настройки в приложение-аутентификатор."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Скопировать ID пользователя"
@@ -8797,7 +8792,7 @@ msgstr "Скопировать видео"
msgid "Copy video link"
msgstr "Скопировать ссылку на видео"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Скопировать диагностику голоса"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Не удалось декодировать этот аудиофайл."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Не удалось загрузить конфигурацию экземпляра. Попробуйте перезагрузить страницу."
@@ -11424,7 +11419,7 @@ msgstr "Отключить сокет"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Отключено"
@@ -12256,7 +12251,7 @@ msgstr "Редактировать или удалять эмодзи и сти
msgid "Edit overwrites for roles and members in this channel."
msgstr "Изменить разрешения для ролей и участников в этом канале."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Ввести код"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "На весь экран"
@@ -13277,7 +13272,7 @@ msgstr "Весь экран"
msgid "Entire system"
msgstr "Вся система"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Весь звук системы"
@@ -13478,7 +13473,7 @@ msgstr "Выйти"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Выйти из полноэкранного режима"
@@ -14387,7 +14382,7 @@ msgstr "Сначала завершите настройку аккаунта"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Завершить настройку"
@@ -16830,7 +16825,7 @@ msgstr "В режиме \"Операционная система\" перечи
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "В браузере функция \"Нажми и говори\" работает только тогда, когда вкладка {PRODUCT_NAME} активна. Установите десктопное приложение для использования функции \"Нажми и говори\" во всей системе."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "В звонке"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Загрузка получателей…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Загрузка конфигурации экземпляра"
@@ -18885,7 +18880,7 @@ msgstr "Вредоносное ПО, кража учетных данных ил
msgid "Manage"
msgstr "Управление"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Управление аккаунтами"
@@ -21123,7 +21118,7 @@ msgstr "Сначала новые"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Неанимированные эмодзи ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Нет"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Подключение восстановлено. Выберите экран ещё раз, если хотите возобновить предыдущую трансляцию."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Повторное подключение..."
@@ -25097,7 +25092,7 @@ msgstr "Ссылка скопирована."
msgid "Referral parameters"
msgstr "Параметры приглашения"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Обновить источники звука"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Причинение вреда себе или суицид"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Настройка собственного сервера"
@@ -28220,7 +28215,7 @@ msgstr "Сеансы"
msgid "Set {fieldNode} to {0}."
msgstr "Установить {fieldNode} на {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Задать свой статус"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Отложить эту проверку?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Настройте {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Шведский"
msgid "Switch account"
msgstr "Сменить аккаунт"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Сменить аккаунт"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Запрос на добавление в друзья больше недоступен. Обновите страницу и попробуйте снова."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Это изображение не удалось использовать. Попробуйте другой файл."
@@ -31617,6 +31612,11 @@ msgstr "Это все."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Тег #0000 зарезервирован для подписчиков Visionary. Подписка Visionary больше недоступна для покупки."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API находится на другом домене, отличном от этого, поэтому запросы на настройку отправляются без вашей сессии. Проверьте общедоступный домен и порт, с которыми настроен этот экземпляр, затем перезагрузите страницу."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Приложение вылетело"
@@ -34049,7 +34049,7 @@ msgstr "неизвестный пользователь"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Неизвестный пользователь"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Посмотреть звонок"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Показать элементы управления вызовом"
@@ -37928,12 +37928,12 @@ msgstr "Вы не сможете удалить отправленные соо
msgid "You will still need to finish the email step."
msgstr "Вам всё ещё нужно будет завершить шаг с электронной почтой."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Вы не будете получать уведомления на компьютере"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Вы будете отображаться офлайн"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# bokmärke} other {# bokmärken}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# community hittades} other {# communities hittades}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# community är tillfälligt otillgänglig på grund av ett fel i flödeskondensatorn.} other {# communities är tillfälligt otillgängliga på grund av ett fel i flödeskondensatorn.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# gemensam community} other {# gemensamma communiti
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# annan} other {# andra}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# deltagare i samtalet} other {# deltagare i samtalet}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Visa fler (# rad)} other {Visa fler (# rader)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Visa (# rad)} other {Visa (# rader)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Visa # annan enhet} other {Visa # andra enheter}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {I samtal} other {# i samtal}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Gå med i videosamtal (# deltagare)} other {Gå med i videosamtal (# deltagare)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "Fortsätt titta på {count, plural, one {# stream} other {# streams}} och lägg till den här"
@@ -2182,7 +2182,7 @@ msgstr "Åtgärder"
msgid "Active"
msgstr "Aktiv"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktivt konto"
@@ -4578,7 +4578,7 @@ msgstr "Borta just nu"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Tillbaka till klistermärket"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Tillbaka till röstkanalen"
@@ -7497,7 +7497,7 @@ msgstr "Fäll ihop kanalämne"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Fäll ihop enheter"
@@ -8157,7 +8157,7 @@ msgstr "Ansluten till röstsamtal"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Ansluter..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Anslutning borttagen"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Anslutningsstatistik"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Kopierat"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Statistik-JSON kopierad till urklipp"
@@ -8499,11 +8499,6 @@ msgstr "URL kopierad till urklipp"
msgid "Copy"
msgstr "Kopiera"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Kopiera som JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Kopiera banner-URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopiera bygginfo"
@@ -8743,8 +8738,8 @@ msgstr "Kopiera installationsnyckeln"
msgid "Copy stack trace"
msgstr "Kopiera stackspårning"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Kopiera statistik-JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopiera installationsnyckeln till din autentiseringsapp."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopiera användar-ID"
@@ -8797,7 +8792,7 @@ msgstr "Kopiera video"
msgid "Copy video link"
msgstr "Kopiera videolänk"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Kopiera röstdiagnostik"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Kunde inte avkoda den här ljudfilen."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Kunde inte ladda instanskonfigurationen. Försök att ladda om sidan."
@@ -11424,7 +11419,7 @@ msgstr "Koppla från socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Nedkopplad"
@@ -12256,7 +12251,7 @@ msgstr "Redigera eller ta bort emoji och stickers som skapats av andra medlemmar
msgid "Edit overwrites for roles and members in this channel."
msgstr "Redigera åsidosättningar för roller och medlemmar i den här kanalen."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Ange kod"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Gå till helskärmsläge"
@@ -13277,7 +13272,7 @@ msgstr "Hela skärmen"
msgid "Entire system"
msgstr "Hela systemet"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Hela systemljudet"
@@ -13478,7 +13473,7 @@ msgstr "Avsluta"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Avsluta helskärm"
@@ -14387,7 +14382,7 @@ msgstr "Slutför kontoinställningen först"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Slutför installationen"
@@ -16830,7 +16825,7 @@ msgstr "I läget \"Operativsystem\" är ordlistorna ovan vägledande. {PRODUCT_N
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "I en webbläsare fungerar push-to-talk bara när fliken {PRODUCT_NAME} är i fokus. Installera datorappen för push-to-talk i hela systemet."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "I ett samtal"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Laddar destinationer…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Laddar inställningskonfiguration"
@@ -18885,7 +18880,7 @@ msgstr "Skadlig programvara, stöld av inloggningsuppgifter eller skadliga filer
msgid "Manage"
msgstr "Hantera"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Hantera konton"
@@ -21123,7 +21118,7 @@ msgstr "Nyast först"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Icke-animerade emojier ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Ingen"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Återanslutningen lyckades. Välj en skärm igen om du vill återuppta din tidigare stream."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Återansluter..."
@@ -25097,7 +25092,7 @@ msgstr "Referens kopierad."
msgid "Referral parameters"
msgstr "Värvningsparametrar"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Uppdatera ljudkällor"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Självskadebeteende eller självmord"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Självhostningsinstallation"
@@ -28220,7 +28215,7 @@ msgstr "Sessioner"
msgid "Set {fieldNode} to {0}."
msgstr "Ange {fieldNode} till {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Ange en anpassad status"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Lägg den här kontrollen åt sidan?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Konfigurera {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Svenska"
msgid "Switch account"
msgstr "Byt konto"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Byt konto"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Den vänförfrågan är inte längre tillgänglig. Uppdatera och försök igen."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Bilden kunde inte användas. Prova en annan fil."
@@ -31617,6 +31612,11 @@ msgstr "Det var alla."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Taggen #0000 är reserverad för Visionary-prenumeranter. Visionary kan inte längre köpas."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API:et har en annan ursprung än den här sidan, så installationsbegäranden skickas utan din session. Kontrollera det publika ursprunget och porten som den här instansen är konfigurerad med, och ladda sedan om."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Appen kraschade"
@@ -34049,7 +34049,7 @@ msgstr "okänd användare"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Okänd användare"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Visa samtal"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Visa samtalskontroller"
@@ -37928,12 +37928,12 @@ msgstr "Du kommer inte att kunna radera dina skickade meddelanden efter att ditt
msgid "You will still need to finish the email step."
msgstr "Du behöver fortfarande slutföra e-poststeget."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Du får inga aviseringar på datorn"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Du visas som offline"
@@ -355,7 +355,7 @@ msgstr "{count, plural, other {# รายการ}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# ชุมชนที่พบ} other {# ชุมชนที่พบ}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# ชุมชนไม่พร้อมใช้งานชั่วคราว เนื่องจากเครื่องฟลักซ์คาปาซิเตอร์ทำงานผิดปกติ} other {# ชุมชนไม่พร้อมใช้งานชั่วคราว เนื่องจากเครื่องฟลักซ์คาปาซิเตอร์ทำงานผิดปกติ}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# ชุมชนร่วมกัน} other {#
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# คนอื่น} other {# คนอื่น}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# คนในสาย} other {# คนในสาย}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {ขยาย (# บรรทัด)} other {ขย
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {ขยาย (# แถว)} other {ขยาย (# แถว)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {ขยายอุปกรณ์อื่น # เครื่อง} other {ขยายอุปกรณ์อื่น # เครื่อง}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {กำลังคุยสาย} other {# คน
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {เข้าร่วมวิดีโอคอล (# ผู้เข้าร่วม)} other {เข้าร่วมวิดีโอคอล (# ผู้เข้าร่วม)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "ดูสตรีม # {count, plural, one {} other {อื่นๆ }}ต่อไปและเพิ่มสตรีมนี้"
@@ -2182,7 +2182,7 @@ msgstr "การดำเนินการ"
msgid "Active"
msgstr "ใช้งานอยู่"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "บัญชีที่ใช้งานอยู่"
@@ -4578,7 +4578,7 @@ msgstr "ไม่อยู่ตอนนี้"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "กลับไปที่สติกเกอร์"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "กลับสู่ช่องเสียง"
@@ -7497,7 +7497,7 @@ msgstr "ยุบหัวข้อช่อง"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "ยุบอุปกรณ์"
@@ -8157,7 +8157,7 @@ msgstr "เชื่อมต่อกับเสียงแล้ว"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "กำลังเชื่อมต่อ..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "ลบการเชื่อมต่อแล้ว"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "สถานะการเชื่อมต่อ"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "คัดลอกแล้ว"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "คัดลอก JSON สถิติไปยังคลิปบอร์ดแล้ว"
@@ -8499,11 +8499,6 @@ msgstr "คัดลอก URL ไปยังคลิปบอร์ดแล
msgid "Copy"
msgstr "คัดลอก"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "คัดลอกเป็น JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "คัดลอก URL แบนเนอร์"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "คัดลอกข้อมูลบิลด์"
@@ -8743,8 +8738,8 @@ msgstr "คัดลอกคีย์สำหรับการตั้งค
msgid "Copy stack trace"
msgstr "คัดลอก Stack Trace"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "คัดลอก JSON สถิติ"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "คัดลอกคีย์สำหรับการตั้งค่าลงในแอปยืนยันตัวตนของคุณ"
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "คัดลอก ID ผู้ใช้"
@@ -8797,7 +8792,7 @@ msgstr "คัดลอกวิดีโอ"
msgid "Copy video link"
msgstr "คัดลอกลิงก์วิดีโอ"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "คัดลอกข้อมูลการวินิจฉัยเสียง"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "ไม่สามารถถอดรหัสไฟล์เสียงนี้ได้"
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "ไม่สามารถโหลดการกำหนดค่าอินสแตนซ์ได้ ลองโหลดหน้าใหม่"
@@ -11424,7 +11419,7 @@ msgstr "ยกเลิกการเชื่อมต่อซ็อกเก
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "ตัดการเชื่อมต่อแล้ว"
@@ -12256,7 +12251,7 @@ msgstr "แก้ไขหรือลบอิโมจิและสติก
msgid "Edit overwrites for roles and members in this channel."
msgstr "แก้ไขการตั้งค่าสำหรับบทบาทและสมาชิกในช่องนี้"
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "ป้อนรหัส"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "เข้าสู่โหมดเต็มหน้าจอ"
@@ -13277,7 +13272,7 @@ msgstr "ทั้งหน้าจอ"
msgid "Entire system"
msgstr "ทั้งระบบ"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "เสียงทั้งระบบ"
@@ -13478,7 +13473,7 @@ msgstr "ออก"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "ออกจากโหมดเต็มหน้าจอ"
@@ -14387,7 +14382,7 @@ msgstr "ตั้งค่าบัญชีให้เสร็จก่อน
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "เสร็จสิ้นการตั้งค่า"
@@ -16830,7 +16825,7 @@ msgstr "ในโหมด \"ระบบปฏิบัติการ\" พจ
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "ในเบราว์เซอร์ การกดเพื่อพูดจะทำงานเมื่อแท็บ {PRODUCT_NAME} โฟกัสอยู่เท่านั้น ติดตั้งแอปเดสก์ท็อปเพื่อใช้การกดเพื่อพูดได้ทั่วทั้งระบบ"
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "กำลังสนทนา"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "กำลังโหลดปลายทาง…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "กำลังโหลดการกำหนดค่าอินสแตนซ์"
@@ -18885,7 +18880,7 @@ msgstr "มัลแวร์, การขโมยข้อมูลประ
msgid "Manage"
msgstr "จัดการ"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "จัดการบัญชี"
@@ -21123,7 +21118,7 @@ msgstr "ใหม่สุดขึ้นก่อน"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "อิโมจิแบบไม่เคลื่อนไหว ({emo
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "ไม่มี"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "เชื่อมต่อสำเร็จ หากต้องการสตรีมต่อ ให้เลือกหน้าจออีกครั้ง"
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "กำลังเชื่อมต่อใหม่..."
@@ -25097,7 +25092,7 @@ msgstr "คัดลอกข้อมูลอ้างอิงแล้ว"
msgid "Referral parameters"
msgstr "พารามิเตอร์การแนะนำ"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "รีเฟรชแหล่งเสียง"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "ทำร้ายตัวเองหรือฆ่าตัวตาย"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "ตั้งค่าโฮสต์เอง"
@@ -28220,7 +28215,7 @@ msgstr "เซสชัน"
msgid "Set {fieldNode} to {0}."
msgstr "ตั้งค่า {fieldNode} เป็น {0}"
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "ตั้งสถานะกำหนดเอง"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "พักการตรวจสอบนี้ไว้ก่อนไหม?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "ตั้งค่า {productName}"
@@ -30929,7 +30924,7 @@ msgstr "สวีเดน"
msgid "Switch account"
msgstr "สลับบัญชี"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "สลับบัญชี"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "คำขอเป็นเพื่อนนั้นไม่พร้อมใช้งานแล้ว โปรดรีเฟรชแล้วลองอีกครั้ง"
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "รูปภาพนั้นไม่สามารถใช้งานได้ ลองใช้ไฟล์อื่น"
@@ -31617,6 +31612,11 @@ msgstr "ทั้งหมดมีเท่านี้"
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "แท็ก #0000 สงวนไว้สำหรับสมาชิก Visionary ซึ่ง Visionary ไม่มีให้ซื้อแล้ว"
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API อยู่คนละ origin กับหน้านี้ ทำให้คำขอตั้งค่าถูกส่งไปโดยไม่มีเซสชันของคุณ โปรดตรวจสอบ public origin และพอร์ตที่อินสแตนซ์นี้กำหนดค่าไว้ แล้วลองโหลดใหม่อีกครั้ง"
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "แอปขัดข้อง"
@@ -34049,7 +34049,7 @@ msgstr "ผู้ใช้ไม่ทราบชื่อ"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "ผู้ใช้ไม่รู้จัก"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "ดูการโทร"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "ดูการควบคุมการโทร"
@@ -37928,12 +37928,12 @@ msgstr "คุณจะไม่สามารถลบข้อความท
msgid "You will still need to finish the email step."
msgstr "คุณยังต้องดำเนินการยืนยันอีเมลให้เสร็จสิ้น"
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "คุณจะไม่ได้รับการแจ้งเตือนบนเดสก์ท็อป"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "คุณจะออฟไลน์"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# yer işareti} other {# yer işaretleri}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# topluluk bulundu} other {# topluluk bulundu}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# topluluk, bir \"flux kapasitörü\" arızası nedeniyle geçici olarak kullanılamıyor.} other {# topluluk, bir \"flux kapasitörü\" arızası nedeniyle geçici olarak kullanılamıyor.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# ortak topluluk} other {# ortak topluluk}}"
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# diğer} other {# diğerleri}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# katılımcı aramada} other {# katılımcı aramada}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Genişlet (# satır)} other {Genişlet (# satır)}}
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {(# satırı göster)} other {(# satırları göster)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Diğer cihazı genişlet} other {Diğer {count} cihazı genişlet}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Aramada} other {# aramada}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Görüntülü aramaya katıl (1 katılımcı)} other {Görüntülü aramaya katıl (# katılımcı)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {# akışı izlemeye devam et ve bunu ekle} other {# akışı izlemeye devam et ve bunu ekle}}"
@@ -2182,7 +2182,7 @@ msgstr "İşlemler"
msgid "Active"
msgstr "Aktif"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktif hesap"
@@ -4578,7 +4578,7 @@ msgstr "Şu an çevrimdışı"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Çıkartmaya geri dön"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Sesli kanala dön"
@@ -7497,7 +7497,7 @@ msgstr "Kanal konusunu daralt"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Cihazları daralt"
@@ -8157,7 +8157,7 @@ msgstr "Sese bağlandı"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Bağlanıyor..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Bağlantı kaldırıldı"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Bağlantı istatistikleri"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Kopyalandı"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "İstatistik JSON'ı panoya kopyalandı"
@@ -8499,11 +8499,6 @@ msgstr "URL panoya kopyalandı"
msgid "Copy"
msgstr "Kopyala"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "JSON olarak kopyala"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Banner URL'sini kopyala"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Derleme bilgilerini kopyala"
@@ -8743,8 +8738,8 @@ msgstr "Kurulum anahtarını kopyala"
msgid "Copy stack trace"
msgstr "Yığın izini kopyala"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "İstatistik JSON'ını kopyala"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kurulum anahtarını kimlik doğrulama uygulamanıza yapıştırın."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kullanıcı kimliğini kopyala"
@@ -8797,7 +8792,7 @@ msgstr "Videoyu kopyala"
msgid "Copy video link"
msgstr "Video bağlantısını kopyala"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Ses tanılama bilgilerini kopyala"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Bu ses dosyası çözülemedi."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Örnek yapılandırması yüklenemedi. Sayfayı yeniyi deneyin."
@@ -11424,7 +11419,7 @@ msgstr "Soket bağlantısını kes"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Bağlantı kesildi"
@@ -12256,7 +12251,7 @@ msgstr "Diğer üyeler tarafından oluşturulan emojileri ve çıkartmaları dü
msgid "Edit overwrites for roles and members in this channel."
msgstr "Bu kanaldaki roller ve üyeler için geçersiz kılmaları düzenle."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Kod girin"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Tam ekrana geç"
@@ -13277,7 +13272,7 @@ msgstr "Tüm ekran"
msgid "Entire system"
msgstr "Tüm sistem"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Tüm sistem sesi"
@@ -13478,7 +13473,7 @@ msgstr "Çık"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Tam ekrandan çık"
@@ -14387,7 +14382,7 @@ msgstr "Önce hesap kurulumunu tamamla"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Kurulumu tamamla"
@@ -16830,7 +16825,7 @@ msgstr "\"İşletim sistemi\" modunda, yukarıda listelenen sözlükler tavsiye
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Tarayıcıda bas-konuş özelliği yalnızca {PRODUCT_NAME} sekmesi odaklıyken çalışır. Sistem genelinde bas-konuş özelliğini kullanmak için masaüstü uygulamasını yükleyin."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Aramada"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Hedefler yükleniyor…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Örnek yapılandırması yükleniyor"
@@ -18885,7 +18880,7 @@ msgstr "Kötü amaçlı yazılım, kimlik bilgisi hırsızlığı veya zararlı
msgid "Manage"
msgstr "Yönet"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Hesapları yönet"
@@ -21123,7 +21118,7 @@ msgstr "En yeni önce"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Animasyonsuz emojiler ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Yok"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Yeniden bağlanma başarılı. Önceki akışınıza devam etmek isterseniz lütfen tekrar bir ekran seçin."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Yeniden bağlanıyor..."
@@ -25097,7 +25092,7 @@ msgstr "Referans kopyalandı."
msgid "Referral parameters"
msgstr "Yönlendirme parametreleri"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Ses kaynaklarını yenile"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Kendine zarar verme veya intihar"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Kendi kendine barındırma kurulumu"
@@ -28220,7 +28215,7 @@ msgstr "Oturumlar"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} şununla ayarlandı: {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Özel durum ayarla"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Bu denetimi erteleyelim mi?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "{productName} kurulumu"
@@ -30929,7 +30924,7 @@ msgstr "İsveççe"
msgid "Switch account"
msgstr "Hesap değiştir"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Hesap değiştir"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Bu arkadaşlık isteği artık mevcut değil. Sayfayı yenileyip tekrar dene."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Bu resim kullanılamadı. Farklı bir dosya deneyin."
@@ -31617,6 +31612,11 @@ msgstr "Hepsi bu kadar."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "#0000 etiketi Visionary abonelerine özeldir. Visionary artık satın alınamaz."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API, bu sayfadan farklı bir kaynaktan, bu nedenle kurulum istekleri oturumunuz olmadan gönderiliyor. Yapılandırılmış genel kaynağı ve bağlantı noktasını kontrol edin, ardından yeniden yükleyin."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Uygulama çöktü"
@@ -34049,7 +34049,7 @@ msgstr "Bilinmeyen kullanıcı"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Bilinmeyen kullanıcı"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Aramayı görüntüle"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Arama kontrollerini görüntüle"
@@ -37928,12 +37928,12 @@ msgstr "Hesabınız silindikten sonra gönderdiğiniz mesajları silemezsiniz"
msgid "You will still need to finish the email step."
msgstr "E-posta adımını da tamamlaman gerekecek."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Masaüstünde bildirim almazsın"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Çevrimdışı görünürsün"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# закладка} few {# закладки} many {
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# спільнота знайдена} few {# спільноти знайдені} many {# спільнот знайдено} other {# спільнот знайдено}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# спільнота тимчасово недоступна через несправність потокового накопичувача.} few {# спільноти тимчасово недоступні через несправність потокового накопичувача.} many {# спільнот тимчасово недоступні через несправність потокового накопичувача.} other {# спільнот тимчасово недоступні через несправність потокового накопичувача.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# спільна спільнота} few {# спі
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# інший} few {# інших} many {# інших} other {# інших}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# учасник у дзвінку} few {# учасники у дзвінку} many {# учасників у дзвінку} other {# учасника у дзвінку}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Розгорнути (# рядок)} few {Розг
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Розгорнути (# рядок)} other {Розгорнути (# рядки)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Розгорнути ще # пристрій} few {Розгорнути ще # пристрої} many {Розгорнути ще # пристроїв} other {Розгорнути ще # пристроїв}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {У дзвінку} other {# у дзвінку}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Приєднатися до відеодзвінка (# учасник)} few {Приєднатися до відеодзвінка (# учасники)} many {Приєднатися до відеодзвінка (# учасників)} other {Приєднатися до відеодзвінка (# учасників)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Продовжуйте дивитися # трансляцію та додайте цю} other {Продовжуйте дивитися # трансляції та додайте цю}}"
@@ -2182,7 +2182,7 @@ msgstr "Дії"
msgid "Active"
msgstr "Активна"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Активний обліковий запис"
@@ -4578,7 +4578,7 @@ msgstr "Зараз відсутній"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Назад до стікера"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Повернутися до голосового каналу"
@@ -7497,7 +7497,7 @@ msgstr "Згорнути тему каналу"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Згорнути пристрої"
@@ -8157,7 +8157,7 @@ msgstr "Підключено до голосового чату"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Підключення..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Звʼязок видалено"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Статистика з'єднання"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Скопійовано"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Статистику JSON скопійовано в буфер обміну"
@@ -8499,11 +8499,6 @@ msgstr "URL скопійовано в буфер обміну"
msgid "Copy"
msgstr "Копіювати"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Копіювати як JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Копіювати посилання на банер"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Копіювати інформацію про збірку"
@@ -8743,8 +8738,8 @@ msgstr "Скопіювати ключ налаштування"
msgid "Copy stack trace"
msgstr "Копіювати трасування стека"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Копіювати статистику JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Скопіюйте ключ налаштування у ваш додаток для автентифікації."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Копіювати ID користувача"
@@ -8797,7 +8792,7 @@ msgstr "Копіювати відео"
msgid "Copy video link"
msgstr "Копіювати посилання на відео"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Копіювати діагностику голосу"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Не вдалося декодувати цей аудіофайл."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Не вдалося завантажити конфігурацію інстансу. Спробуйте перезавантажити сторінку."
@@ -11424,7 +11419,7 @@ msgstr "Відключити сокет"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Відключено"
@@ -12256,7 +12251,7 @@ msgstr "Редагувати або видаляти емодзі та стік
msgid "Edit overwrites for roles and members in this channel."
msgstr "Редагувати дозволи для ролей і учасників у цьому каналі."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Введіть код"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "На весь екран"
@@ -13277,7 +13272,7 @@ msgstr "Увесь екран"
msgid "Entire system"
msgstr "Уся система"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Весь системний звук"
@@ -13478,7 +13473,7 @@ msgstr "Вийти"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Вийти з повноекранного режиму"
@@ -14387,7 +14382,7 @@ msgstr "Спершу завершіть налаштування обліков
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Завершити налаштування"
@@ -16830,7 +16825,7 @@ msgstr "У режимі \"Операційна система\" наведені
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "У браузері функція \"Натисни і говори\" працює лише тоді, коли вкладка {PRODUCT_NAME} активна. Установіть десктопний застосунок для використання функції \"Натисни і говори\" в усій системі."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "На дзвінку"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Завантаження місць призначення…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Завантаження конфігурації інстансу"
@@ -18885,7 +18880,7 @@ msgstr "Шкідливе програмне забезпечення, краді
msgid "Manage"
msgstr "Керувати"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Керувати обліковими записами"
@@ -21123,7 +21118,7 @@ msgstr "Спершу новіші"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Неанімовані емодзі ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Немає"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Повторне підключення успішне. Виберіть екран ще раз, якщо хочете відновити попередню трансляцію."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Повторне підключення..."
@@ -25097,7 +25092,7 @@ msgstr "Посилання скопійовано."
msgid "Referral parameters"
msgstr "Параметри запрошення"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Оновити джерела звуку"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Заподіяння собі шкоди або самогубство"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Налаштування самостійного розміщення"
@@ -28220,7 +28215,7 @@ msgstr "Сесії"
msgid "Set {fieldNode} to {0}."
msgstr "Встановлено {fieldNode} на {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Встановити власний статус"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Відкласти цю перевірку?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Налаштуйте {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Шведська"
msgid "Switch account"
msgstr "Змінити обліковий запис"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Змінити обліковий запис"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Цей запит на додавання в друзі більше недоступний. Оновіть сторінку та спробуйте ще раз."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Цей файл не вдалося використати. Спробуйте інший."
@@ -31617,6 +31612,11 @@ msgstr "Це всі повідомлення."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Тег #0000 зарезервовано для підписників Visionary. Підписка Visionary більше недоступна для придбання."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API знаходиться на іншому домені, ніж ця сторінка, тому запити на налаштування надсилаються без вашої сесії. Перевірте загальнодоступний домен і порт, з якими налаштовано цей екземпляр, а потім перезавантажте."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Сталася помилка в застосунку"
@@ -34049,7 +34049,7 @@ msgstr "невідомий користувач"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Невідомий користувач"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Переглянути дзвінок"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Переглянути елементи керування викликом"
@@ -37928,12 +37928,12 @@ msgstr "Ви не зможете видалити надіслані повід
msgid "You will still need to finish the email step."
msgstr "Вам все ще потрібно буде завершити крок з електронною поштою."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Ви не отримуватимете сповіщення на комп'ютері"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Ви будете офлайн"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# dấu trang} other {# dấu trang}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# cộng đồng được tìm thấy} other {# cộng đồng được tìm thấy}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# cộng đồng hiện không khả dụng do lỗi bộ biến đổi dòng chảy.} other {# cộng đồng hiện không khả dụng do lỗi bộ biến đổi dòng chảy.}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# cộng đồng chung} other {# cộng đồng chu
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# người khác} other {# người khác}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# người tham gia cuộc gọi} other {# người tham gia cuộc gọi}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {Mở rộng (# dòng)} other {Mở rộng (# dòng)
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {Mở rộng (# hàng)} other {Mở rộng (# hàng)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {Mở rộng # thiết bị khác} other {Mở rộng # thiết bị khác}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {Đang gọi} other {# người đang gọi}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {Tham gia cuộc gọi video (# người tham gia)} other {Tham gia cuộc gọi video (# người tham gia)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {Tiếp tục xem # luồng và thêm luồng này} other {Tiếp tục xem # luồng và thêm luồng này}}"
@@ -2182,7 +2182,7 @@ msgstr "Thao tác"
msgid "Active"
msgstr "Đang hoạt động"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Tài khoản đang hoạt động"
@@ -4578,7 +4578,7 @@ msgstr "Đang vắng mặt"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "Quay lại nhãn dán"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "Quay lại kênh thoại"
@@ -7497,7 +7497,7 @@ msgstr "Thu gọn chủ đề kênh"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "Thu gọn thiết bị"
@@ -8157,7 +8157,7 @@ msgstr "Đã kết nối thoại"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "Đang kết nối..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "Đã xóa kết nối"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "Thông số kết nối"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "Đã sao chép"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "Đã sao chép JSON thống kê vào bảng nhớ tạm"
@@ -8499,11 +8499,6 @@ msgstr "Đã sao chép URL vào bảng nhớ tạm"
msgid "Copy"
msgstr "Sao chép"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "Sao chép dưới dạng JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "Sao chép URL ảnh bìa"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Sao chép thông tin bản dựng"
@@ -8743,8 +8738,8 @@ msgstr "Sao chép khóa thiết lập"
msgid "Copy stack trace"
msgstr "Sao chép dấu vết ngăn xếp"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "Sao chép JSON thống kê"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Sao chép khóa thiết lập vào ứng dụng xác thực của bạn."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Sao chép ID người dùng"
@@ -8797,7 +8792,7 @@ msgstr "Sao chép video"
msgid "Copy video link"
msgstr "Sao chép liên kết video"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "Sao chép chẩn đoán giọng nói"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "Không thể giải mã tệp âm thanh này."
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "Không thể tải cấu hình phiên bản. Hãy thử tải lại trang."
@@ -11424,7 +11419,7 @@ msgstr "Ngắt kết nối socket"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "Đã ngắt kết nối"
@@ -12256,7 +12251,7 @@ msgstr "Chỉnh sửa hoặc xóa biểu tượng cảm xúc và nhãn dán do t
msgid "Edit overwrites for roles and members in this channel."
msgstr "Chỉnh sửa quyền của vai trò và thành viên trong kênh này."
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "Nhập mã"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "Vào chế độ toàn màn hình"
@@ -13277,7 +13272,7 @@ msgstr "Toàn bộ màn hình"
msgid "Entire system"
msgstr "Toàn bộ hệ thống"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "Toàn bộ âm thanh hệ thống"
@@ -13478,7 +13473,7 @@ msgstr "Thoát"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "Thoát chế độ toàn màn hình"
@@ -14387,7 +14382,7 @@ msgstr "Hoàn tất thiết lập tài khoản trước"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "Hoàn tất thiết lập"
@@ -16830,7 +16825,7 @@ msgstr "Ở chế độ \"Hệ điều hành\", các từ điển được liệ
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Trong trình duyệt, tính năng nhấn để nói chỉ hoạt động khi tab {PRODUCT_NAME} đang được lấy nét. Hãy cài đặt ứng dụng dành cho máy tính để bàn để sử dụng tính năng nhấn để nói trên toàn hệ thống."
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "Trong cuộc gọi"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "Đang tải điểm đến…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "Đang tải cấu hình phiên bản"
@@ -18885,7 +18880,7 @@ msgstr "Phần mềm độc hại, đánh cắp thông tin đăng nhập hoặc
msgid "Manage"
msgstr "Quản lý"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Quản lý tài khoản"
@@ -21123,7 +21118,7 @@ msgstr "Mới nhất trước"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "Biểu tượng cảm xúc tĩnh ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "Không"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "Đã kết nối lại thành công. Chọn lại màn hình nếu bạn muốn tiếp tục luồng trước đó."
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "Đang kết nối lại..."
@@ -25097,7 +25092,7 @@ msgstr "Đã sao chép liên kết."
msgid "Referral parameters"
msgstr "Thông số giới thiệu"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "Làm mới nguồn âm thanh"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "Tự làm hại bản thân hoặc tự tử"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "Thiết lập tự lưu trữ"
@@ -28220,7 +28215,7 @@ msgstr "Phiên hoạt động"
msgid "Set {fieldNode} to {0}."
msgstr "Đặt {fieldNode} thành {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "Đặt trạng thái tùy chỉnh"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "Tạm hoãn kiểm tra này?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "Thiết lập {productName}"
@@ -30929,7 +30924,7 @@ msgstr "Tiếng Thụy Điển"
msgid "Switch account"
msgstr "Chuyển tài khoản"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "Chuyển tài khoản"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "Lời mời kết bạn đó không còn khả dụng. Hãy làm mới và thử lại."
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "Ảnh đó không thể sử dụng được. Hãy thử một tệp khác."
@@ -31617,6 +31612,11 @@ msgstr "Đã hết tin nhắn lưu."
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "Thẻ #0000 được dành riêng cho người đăng ký Visionary. Visionary hiện không còn khả dụng để mua."
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API đang ở một nguồn khác với trang này, nên các yêu cầu thiết lập được gửi đi mà không có phiên của bạn. Hãy kiểm tra nguồn gốc và cổng công khai mà phiên bản này được cấu hình, sau đó tải lại."
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "Ứng dụng đã gặp sự cố"
@@ -34049,7 +34049,7 @@ msgstr "người dùng không xác định"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "Người dùng không xác định"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "Xem cuộc gọi"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "Xem điều khiển cuộc gọi"
@@ -37928,12 +37928,12 @@ msgstr "Bạn sẽ không thể xóa các tin nhắn đã gửi sau khi tài kho
msgid "You will still need to finish the email step."
msgstr "Bạn vẫn cần hoàn thành bước email."
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "Bạn sẽ không nhận được thông báo trên máy tính"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "Bạn sẽ hiện ở trạng thái ngoại tuyến"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# 条书签} other {# 条书签}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# 个社群} other {# 个社群}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# 个社群因时空穿梭器故障暂时不可用。} other {# 个社群因时空穿梭器故障暂时不可用。}}"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {#个共同社区} other {#个共同社区}}"
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# 位其他用户} other {# 位其他用户}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# 位参与者正在通话中} other {# 位参与者正在通话中}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {展开(# 行)} other {展开(# 行)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {展开(# 行)} other {展开(# 行)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {展开其他设备} other {展开其他设备}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {通话中} other {# 人正在通话}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {加入视频通话(#位参与者)} other {加入视频通话(#位参与者)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {继续观看 # 个直播并添加此直播} other {继续观看 # 个直播并添加此直播}}"
@@ -2182,7 +2182,7 @@ msgstr "操作"
msgid "Active"
msgstr "有效"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "当前账号"
@@ -4578,7 +4578,7 @@ msgstr "当前离开"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "返回贴纸"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "回到语音频道"
@@ -7497,7 +7497,7 @@ msgstr "收起频道话题"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "收起设备"
@@ -8157,7 +8157,7 @@ msgstr "已连接语音"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "正在连接..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "已移除连接"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "连接状态"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "已复制"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "已将统计数据 JSON 复制到剪贴板"
@@ -8499,11 +8499,6 @@ msgstr "已将网址复制到剪贴板"
msgid "Copy"
msgstr "复制"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "复制为 JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "复制横幅网址"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "复制版本信息"
@@ -8743,8 +8738,8 @@ msgstr "复制设置密钥"
msgid "Copy stack trace"
msgstr "复制堆栈跟踪"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "复制统计数据 JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "将设置密钥复制到您的身份验证器应用程序中。"
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "复制用户ID"
@@ -8797,7 +8792,7 @@ msgstr "复制视频"
msgid "Copy video link"
msgstr "复制视频链接"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "复制语音诊断"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "无法解码此音频文件。"
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "无法加载实例配置。请尝试重新加载页面。"
@@ -11424,7 +11419,7 @@ msgstr "断开连接"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "已断开连接"
@@ -12256,7 +12251,7 @@ msgstr "编辑或删除其他成员创建的表情和贴纸。"
msgid "Edit overwrites for roles and members in this channel."
msgstr "编辑此频道中角色和成员的覆盖权限。"
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "输入代码"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "进入全屏"
@@ -13277,7 +13272,7 @@ msgstr "整个屏幕"
msgid "Entire system"
msgstr "整个系统"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "整个系统音频"
@@ -13478,7 +13473,7 @@ msgstr "退出"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "退出全屏"
@@ -14387,7 +14382,7 @@ msgstr "请先完成账号设置"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "完成设置"
@@ -16830,7 +16825,7 @@ msgstr "在\"操作系统\"模式下,上方列出的词典仅供参考。如
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "在浏览器中,按住说话功能仅在 {PRODUCT_NAME} 标签页处于焦点时可用。请安装桌面应用以使用系统范围的按住说话功能。"
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "通话中"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "正在加载目标…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "正在加载实例配置"
@@ -18885,7 +18880,7 @@ msgstr "恶意软件、凭据盗窃或有害文件。"
msgid "Manage"
msgstr "管理"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "管理帐号"
@@ -21123,7 +21118,7 @@ msgstr "最新优先"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "非动态表情 ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "无"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "重新连接成功。如需恢复之前的屏幕共享,请重新选择屏幕。"
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "正在重新连接..."
@@ -25097,7 +25092,7 @@ msgstr "参考已复制."
msgid "Referral parameters"
msgstr "引荐参数"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "刷新音频设备"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "自残或自杀"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "自托管设置"
@@ -28220,7 +28215,7 @@ msgstr "会话"
msgid "Set {fieldNode} to {0}."
msgstr "将 {fieldNode} 设置为 {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "设置自定义状态"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "暂不处理此检查?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "设置 {productName}"
@@ -30929,7 +30924,7 @@ msgstr "瑞典语"
msgid "Switch account"
msgstr "切换账号"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "切换账号"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "该好友请求已失效。请刷新后重试。"
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "该图片无法使用。请尝试其他文件。"
@@ -31617,6 +31612,11 @@ msgstr "到底了。"
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "#0000 标签是 Visionary 订阅者专属。Visionary 已停止购买。"
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API 所在的域与此页面不同,因此设置请求将不带您的会话发送。请检查此实例配置的公共域和端口,然后重新加载。"
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "应用崩溃了"
@@ -34049,7 +34049,7 @@ msgstr "未知用户"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "未知用户"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "查看通话"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "查看通话控制"
@@ -37928,12 +37928,12 @@ msgstr "账号删除后,您将无法删除已发送的消息"
msgid "You will still need to finish the email step."
msgstr "您仍需完成邮箱验证步骤。"
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "你不会在桌面端收到通知"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "你将显示为离线状态"
@@ -355,7 +355,7 @@ msgstr "{count, plural, one {# 個書籤} other {# 個書籤}}"
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# 個社群} other {# 個社群}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1950
#: src/features/app/components/layout/GuildsLayout.tsx:1951
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# 個社群} other {# 個社群}}因時空電容器故障,暫時無法使用"
@@ -404,7 +404,7 @@ msgstr "{count, plural, one {# 個共同社群} other {# 個共同社群}}"
msgid "{count, plural, one {# other} other {# others}}"
msgstr "{count, plural, one {# 位} other {# 位}}"
#: src/features/voice/components/VoiceCallView.tsx:506
#: src/features/voice/components/VoiceCallView.tsx:507
msgid "{count, plural, one {# participant in call} other {# participants in call}}"
msgstr "{count, plural, one {# 位參與者在通話中} other {# 位參與者在通話中}}"
@@ -450,7 +450,7 @@ msgstr "{count, plural, one {展開(# 行)} other {展開(# 行)}}"
msgid "{count, plural, one {Expand (# row)} other {Expand (# rows)}}"
msgstr "{count, plural, one {展開 (# 列)} other {展開 (# 列)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:311
#: src/features/voice/components/VoiceParticipantTile.tsx:315
msgid "{count, plural, one {Expand # other device} other {Expand # other devices}}"
msgstr "{count, plural, one {展開其他 {count} 個裝置} other {展開其他 {count} 個裝置}}"
@@ -471,7 +471,7 @@ msgstr "{count, plural, one {通話中} other {# 人通話中}}"
msgid "{count, plural, one {Join video call (# participant)} other {Join video call (# participants)}}"
msgstr "{count, plural, one {加入視訊通話(#位參與者)} other {加入視訊通話(#位參與者)}}"
#: src/features/voice/components/VoiceParticipantTile.tsx:637
#: src/features/voice/components/VoiceParticipantTile.tsx:655
msgid "{count, plural, one {Keep watching # stream and add this one} other {Keep watching # streams and add this one}}"
msgstr "{count, plural, one {繼續觀看 # 個直播並新增這個} other {繼續觀看 # 個直播並新增這個}}"
@@ -2182,7 +2182,7 @@ msgstr "動作"
msgid "Active"
msgstr "啟用中"
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/app/components/floating/UserAreaPopout.tsx:356
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "使用中的帳號"
@@ -4578,7 +4578,7 @@ msgstr "目前不在線上"
#. Button that moves to the previous setup wizard step.
#. Footer button in the IAR modal that returns to the previous step.
#. OAuth authorization secondary button. Returns to the previous carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:75
#: 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/channel/components/channel_header/shared.ts:27
@@ -4642,7 +4642,7 @@ msgid "Back to sticker"
msgstr "返回貼圖"
#. Tooltip / aria label on the back button that returns from the call view to the voice channel view.
#: src/features/voice/components/VoiceCallView.tsx:114
#: src/features/voice/components/VoiceCallView.tsx:115
msgid "Back to voice channel"
msgstr "返回語音頻道"
@@ -7497,7 +7497,7 @@ msgstr "收合頻道主題"
#. Tooltip / aria label on a voice participant tile button that collapses expanded device tiles for one user.
#. Voice menu action that collapses expanded device tiles back into a single tile.
#: src/features/ui/action_menu/items/voice_participant_menu_data/shared.ts:122
#: src/features/voice/components/VoiceParticipantTile.tsx:173
#: src/features/voice/components/VoiceParticipantTile.tsx:176
msgid "Collapse devices"
msgstr "收合裝置"
@@ -8157,7 +8157,7 @@ msgstr "已連線到語音"
#. Action label state in the DM channel header pill while the join request is in flight. Trailing ASCII ellipsis is intentional.
#. Overlay status in the voice call view while joining. Trailing ellipsis indicates in-progress.
#: src/features/channel/components/channel_view/dm_channel_view/shared.ts:129
#: src/features/voice/components/VoiceCallView.tsx:93
#: src/features/voice/components/VoiceCallView.tsx:94
msgid "Connecting..."
msgstr "正在連線..."
@@ -8218,7 +8218,7 @@ msgid "Connection removed"
msgstr "已移除連結"
#. Tooltip / aria label on the connection-stats button in the voice call header. Opens the voice connection status popout.
#: src/features/voice/components/VoiceCallView.tsx:118
#: src/features/voice/components/VoiceCallView.tsx:119
msgid "Connection stats"
msgstr "連線狀態"
@@ -8466,7 +8466,7 @@ msgid "Copied"
msgstr "已複製"
#. Toast shown after copying stats for nerds JSON to clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:13
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
msgid "Copied stats JSON to clipboard"
msgstr "已將統計資料 JSON 複製到剪貼簿"
@@ -8499,11 +8499,6 @@ msgstr "已複製網址"
msgid "Copy"
msgstr "複製"
#. Aria label for a button that copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy as JSON"
msgstr "複製為 JSON"
#. Developer-mode action that copies the attachment ID to the clipboard.
#: src/features/ui/action_menu/MessageContextMenu.tsx:67
msgid "Copy attachment ID"
@@ -8540,7 +8535,7 @@ msgid "Copy banner URL"
msgstr "複製封面圖片網址"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/app/components/floating/UserAreaPopout.tsx:707
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "複製版本資訊"
@@ -8743,8 +8738,8 @@ msgstr "複製設定金鑰"
msgid "Copy stack trace"
msgstr "複製堆疊追蹤"
#. Button label in audio and video settings. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:9
#. Menu item label in the screen share menu. Copies stats for nerds data as JSON to the clipboard.
#: src/features/voice/components/StatsForNerdsCopyDescriptors.ts:5
msgid "Copy stats JSON"
msgstr "複製統計資料 JSON"
@@ -8772,7 +8767,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "將設定金鑰複製到您的驗證器應用程式。"
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/app/components/floating/UserAreaPopout.tsx:692
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "複製使用者 ID"
@@ -8797,7 +8792,7 @@ msgstr "複製影片"
msgid "Copy video link"
msgstr "複製影片連結"
#: src/features/app/components/floating/UserAreaPopout.tsx:727
#: src/features/app/components/floating/UserAreaPopout.tsx:720
msgid "Copy voice diagnostics"
msgstr "複製語音診斷資訊"
@@ -8827,7 +8822,7 @@ msgid "Could not decode this audio file."
msgstr "無法解碼此音訊檔案。"
#. Error shown when the setup wizard fails to load the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:91
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:93
msgid "Could not load the instance configuration. Try reloading the page."
msgstr "無法載入執行個體設定。請嘗試重新載入頁面。"
@@ -11424,7 +11419,7 @@ msgstr "中斷連線"
#. Overlay status in the voice call view when not connected.
#. Overlay status text in the compact / floating voice call tile when not connected.
#: src/features/voice/components/compact_voice_call_view/shared.ts:15
#: src/features/voice/components/VoiceCallView.tsx:102
#: src/features/voice/components/VoiceCallView.tsx:103
msgid "Disconnected"
msgstr "已中斷連線"
@@ -12256,7 +12251,7 @@ msgstr "編輯或刪除其他成員建立的表情符號和貼圖。"
msgid "Edit overwrites for roles and members in this channel."
msgstr "編輯此頻道中身分組和成員的覆寫權限。"
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/floating/UserAreaPopout.tsx:743
#: src/features/app/components/pages/YouPage.tsx:157
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
@@ -13109,7 +13104,7 @@ msgstr "輸入代碼"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (not in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:28
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:18
#: src/features/voice/components/VoiceCallView.tsx:110
#: src/features/voice/components/VoiceCallView.tsx:111
msgid "Enter fullscreen"
msgstr "進入全螢幕"
@@ -13277,7 +13272,7 @@ msgstr "整個畫面"
msgid "Entire system"
msgstr "整個系統"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:249
#: src/features/voice/components/AudioSourcePickerLinux.tsx:253
msgid "Entire system audio"
msgstr "整個系統音訊"
@@ -13478,7 +13473,7 @@ msgstr "離開"
#. Tooltip / aria label on the fullscreen toggle in the voice call view (currently in fullscreen).
#: src/features/voice/components/compact_voice_call_view/shared.ts:24
#: src/features/voice/components/media_player/components/MediaFullscreenButton.tsx:14
#: src/features/voice/components/VoiceCallView.tsx:106
#: src/features/voice/components/VoiceCallView.tsx:107
msgid "Exit fullscreen"
msgstr "結束全螢幕"
@@ -14387,7 +14382,7 @@ msgstr "請先完成帳號設定"
#. Button that saves the configuration and completes the setup wizard.
#. Setup wizard finish step title.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:83
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:85
#: src/features/app/components/setup/SetupWizardSteps.tsx:327
msgid "Finish setup"
msgstr "完成設定"
@@ -16830,7 +16825,7 @@ msgstr "在「作業系統」模式中,上方列出的字典僅供參考。如
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "在瀏覽器中,只有當「{PRODUCT_NAME}」分頁為焦點時,按下通話功能才能運作。請安裝桌面版應用程式以使用全系統的按下通話功能。"
#: src/features/app/components/floating/UserAreaPopout.tsx:728
#: src/features/app/components/floating/UserAreaPopout.tsx:721
msgid "In a call"
msgstr "通話中"
@@ -18592,7 +18587,7 @@ msgid "Loading destinations…"
msgstr "正在載入目的地…"
#. Accessible status while the setup wizard loads the instance configuration.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:87
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:89
msgid "Loading instance configuration"
msgstr "正在載入執行個體設定"
@@ -18885,7 +18880,7 @@ msgstr "惡意軟體、憑證竊盜或有害檔案。"
msgid "Manage"
msgstr "管理"
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/app/components/floating/UserAreaPopout.tsx:396
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "管理帳號"
@@ -21123,7 +21118,7 @@ msgstr "最新優先"
#. Button that moves to the next setup wizard step.
#. Generic primary or pagination action label that advances to the next step, page, or item.
#. Primary button in the required-action modal. Moves to the next carousel step.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:79
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:81
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:154
#: src/features/i18n/utils/CommonMessageDescriptors.ts:711
msgid "Next"
@@ -21799,7 +21794,7 @@ msgstr "非動態表情符號 ({emojiCount})"
#: src/features/user/components/modals/tabs/components/EntranceSoundSection.tsx:143
#: src/features/user/components/modals/tabs/privacy_safety_tab/data_request_modal/DataRequestModal.tsx:219
#: src/features/user/components/modals/tabs/UserVoiceTab.tsx:93
#: src/features/voice/components/AudioSourcePickerLinux.tsx:257
#: src/features/voice/components/AudioSourcePickerLinux.tsx:261
msgid "None"
msgstr "無"
@@ -24956,7 +24951,7 @@ msgid "Reconnect succeeded. Pick a screen again if you want to resume your previ
msgstr "重新連線成功。如要繼續上次的串流,請再選取一次螢幕。"
#. Overlay status in the voice call view while reconnecting after a drop. Trailing ellipsis indicates in-progress.
#: src/features/voice/components/VoiceCallView.tsx:97
#: src/features/voice/components/VoiceCallView.tsx:98
msgid "Reconnecting..."
msgstr "正在重新連線..."
@@ -25097,7 +25092,7 @@ msgstr "已複製參考資料。"
msgid "Referral parameters"
msgstr "推薦連結參數"
#: src/features/voice/components/AudioSourcePickerLinux.tsx:301
#: src/features/voice/components/AudioSourcePickerLinux.tsx:305
msgid "Refresh audio sources"
msgstr "重新整理音訊來源"
@@ -27871,7 +27866,7 @@ msgid "Self-harm or suicide"
msgstr "自殘或自殺"
#. Accessible label for the self-host setup wizard carousel.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:67
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:69
msgid "Self-host setup"
msgstr "自行代管設定"
@@ -28220,7 +28215,7 @@ msgstr "已登入裝置"
msgid "Set {fieldNode} to {0}."
msgstr "將 {fieldNode} 設定為 {0}。"
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/floating/UserAreaPopout.tsx:601
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:314
msgid "Set a custom status"
msgstr "設定自訂狀態"
@@ -28419,7 +28414,7 @@ msgid "Set this check aside?"
msgstr "暫停此檢查?"
#. Title for the self-host setup wizard modal.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:71
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:73
msgid "Set up {productName}"
msgstr "設定 {productName}"
@@ -30929,7 +30924,7 @@ msgstr "瑞典文"
msgid "Switch account"
msgstr "切換帳號"
#: src/features/app/components/floating/UserAreaPopout.tsx:684
#: src/features/app/components/floating/UserAreaPopout.tsx:677
msgid "Switch accounts"
msgstr "切換帳號"
@@ -31586,7 +31581,7 @@ msgid "That friend request is no longer available. Refresh and try again."
msgstr "該好友邀請已失效。請重新整理後再試一次。"
#. Error shown when a branding image fails to upload in the setup wizard.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:95
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:102
msgid "That image could not be used. Try a different file."
msgstr "該圖片無法使用。請嘗試其他檔案。"
@@ -31617,6 +31612,11 @@ msgstr "就這些了。"
msgid "The #0000 tag is reserved for Visionary subscribers. Visionary is no longer available for purchase."
msgstr "#0000 標籤保留給 Visionary 訂閱者。Visionary 已停止販售。"
#. Error shown when the setup wizard cannot load because the API origin differs from the page origin.
#: src/features/app/components/setup/SelfHostedSetupWizardGate.tsx:97
msgid "The API is on a different origin than this page, so setup requests are sent without your session. Check the public origin and port this instance is configured with, then reload."
msgstr "API 的網域與此頁面不同,因此設定要求將不含您的會話資訊。請檢查此執行個體設定的公開網域和埠號,然後重新載入。"
#: src/features/app/components/ErrorFallback.tsx:120
msgid "The app crashed"
msgstr "應用程式當機了"
@@ -34049,7 +34049,7 @@ msgstr "不明使用者"
#: src/features/devtools/utils/CommandUtils.ts:27
#: src/features/guild/components/modals/guild_tabs/GuildAuditLogTab.tsx:114
#: src/features/voice/components/VoiceParticipantAvatarList.tsx:44
#: src/features/voice/components/VoiceParticipantTile.tsx:169
#: src/features/voice/components/VoiceParticipantTile.tsx:172
#: src/features/webhook/components/WebhookListItem.tsx:30
msgid "Unknown user"
msgstr "不明使用者"
@@ -35961,7 +35961,7 @@ msgid "View call"
msgstr "檢視通話"
#. Aria label for the show-controls trigger when the call toolbar is auto-hidden.
#: src/features/voice/components/VoiceCallView.tsx:123
#: src/features/voice/components/VoiceCallView.tsx:124
msgid "View call controls"
msgstr "檢視通話控制選項"
@@ -37928,12 +37928,12 @@ msgstr "帳號刪除後,您將無法刪除已傳送的訊息"
msgid "You will still need to finish the email step."
msgstr "你還是需要完成電子郵件驗證步驟。"
#: src/features/app/components/floating/UserAreaPopout.tsx:94
#: src/features/app/components/floating/UserAreaPopout.tsx:92
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:40
msgid "You won't receive notifications on desktop"
msgstr "您將不會在電腦版收到通知"
#: src/features/app/components/floating/UserAreaPopout.tsx:95
#: src/features/app/components/floating/UserAreaPopout.tsx:93
#: src/features/user/components/modals/StatusChangeBottomSheet.tsx:41
msgid "You'll appear offline"
msgstr "您會顯示為離線"
@@ -84,6 +84,8 @@ interface OnlineWaiter {
onAbort: () => void;
}
const strippedAuthorizationOrigins = new Set<string>();
const onlineWaiters = new Set<OnlineWaiter>();
let onlineListenerActive = false;
@@ -167,6 +169,10 @@ export class RestClient {
this.state.globalIntercept = hooks.intercept;
}
carriesAuthorization(): boolean {
return !isOffOrigin(resolveUrl(this.state, '/', undefined));
}
dispatch<T = unknown>(method: HttpMethod, path: string, options: RestRequestOptions = {}): Promise<RestResponse<T>> {
return runWithSudoEscalation<T>(this.state, method, path, options, 'fresh');
}
@@ -319,7 +325,12 @@ function composePlan(
): Plan {
const url = resolveUrl(state, path, options.query);
const body = encodeBody(options);
const sameOrigin = !looksAbsolute(path) && !isOffOrigin(url);
const targetsApiBase = !looksAbsolute(path);
const apiOrigin = targetsApiBase ? originOf(url) : null;
const sameOrigin = targetsApiBase && (apiOrigin === null || apiOrigin === window.location.origin);
if (apiOrigin !== null && !sameOrigin) {
reportStrippedAuthorization(state, apiOrigin, options.auth);
}
const headers = assembleHeaders({
state,
callerHeaders: options.headers,
@@ -365,14 +376,26 @@ function looksAbsolute(path: string): boolean {
return path.startsWith('//') || /^[a-z][a-z0-9+.-]*:\/\//i.test(path);
}
function isOffOrigin(url: string): boolean {
function originOf(url: string): string | null {
try {
return new URL(url).origin !== window.location.origin;
return new URL(url).origin;
} catch {
return false;
return null;
}
}
function isOffOrigin(url: string): boolean {
const origin = originOf(url);
return origin !== null && origin !== window.location.origin;
}
function reportStrippedAuthorization(state: RuntimeState, apiOrigin: string, auth: RestAuthMode | undefined): void {
if (auth === 'none' || strippedAuthorizationOrigins.has(apiOrigin)) return;
if (!state.authProvider()) return;
strippedAuthorizationOrigins.add(apiOrigin);
log.warn(`authorization withheld from off-origin api base: ${apiOrigin} (page ${window.location.origin})`);
}
function encodeBody(options: RestRequestOptions): BodyShape {
if (options.multipart) {
return {tag: 'form', payload: buildFormData(options.multipart)};
+59 -7
View File
@@ -547,23 +547,26 @@ fn resolve_time_freeze_enabled_from_env() -> bool {
fn resolve_bootstrap_api_public_endpoint_from_env() -> Option<String> {
resolve_bootstrap_api_public_endpoint(|name| env::var(name).ok())
.unwrap_or_else(|error| panic!("{error}"))
}
fn resolve_bootstrap_api_public_endpoint<F>(mut read_var: F) -> Option<String>
fn resolve_bootstrap_api_public_endpoint<F>(mut read_var: F) -> anyhow::Result<Option<String>>
where
F: FnMut(&str) -> Option<String>,
{
let endpoint = read_var("PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT")
let (base_domain, public_port) = cfg::resolve_public_domain_and_port(&mut read_var)?;
let Some(endpoint) = read_var("PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT")
.map(|value| value.trim().to_owned())
.filter(|value| !value.is_empty())?;
let base_domain = read_var("FLUXER_BASE_DOMAIN").unwrap_or_default();
let public_port = read_var("FLUXER_PUBLIC_PORT").and_then(|port| port.trim().parse().ok());
.filter(|value| !value.is_empty())
else {
return Ok(None);
};
Some(cfg::normalize_public_endpoint(
Ok(Some(cfg::normalize_public_endpoint(
&endpoint,
&base_domain,
public_port,
))
)))
}
fn resolve_time_freeze_enabled<F>(mut read_var: F) -> bool
@@ -635,6 +638,12 @@ mod tests {
}
fn resolve_bootstrap_endpoint_from_pairs(pairs: &[(&str, &str)]) -> Option<String> {
try_resolve_bootstrap_endpoint_from_pairs(pairs).expect("the boot html endpoint resolves")
}
fn try_resolve_bootstrap_endpoint_from_pairs(
pairs: &[(&str, &str)],
) -> anyhow::Result<Option<String>> {
let env: HashMap<&str, &str> = pairs.iter().copied().collect();
resolve_bootstrap_api_public_endpoint(|name| env.get(name).map(|value| value.to_string()))
}
@@ -696,6 +705,49 @@ mod tests {
assert_eq!(resolve_bootstrap_endpoint_from_pairs(&[]), None);
}
#[test]
fn the_public_origin_supplies_the_boot_html_port() {
assert_eq!(
resolve_bootstrap_endpoint_from_pairs(&[
(
"PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT",
"https://fluxer.example/api",
),
("FLUXER_PUBLIC_ORIGIN", "https://fluxer.example:19080"),
("FLUXER_BASE_DOMAIN", "fluxer.example"),
("FLUXER_PUBLIC_PORT", "443"),
]),
Some("https://fluxer.example:19080/api".to_owned())
);
}
#[test]
fn a_malformed_public_port_is_loud() {
let error = try_resolve_bootstrap_endpoint_from_pairs(&[
(
"PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT",
"http://fluxer.example/api",
),
("FLUXER_BASE_DOMAIN", "fluxer.example"),
("FLUXER_PUBLIC_PORT", "not-a-port"),
])
.expect_err("a malformed port is refused");
assert!(error.to_string().contains("FLUXER_PUBLIC_PORT"));
}
#[test]
fn a_malformed_public_origin_is_loud() {
let error = try_resolve_bootstrap_endpoint_from_pairs(&[
(
"PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT",
"http://fluxer.example/api",
),
("FLUXER_PUBLIC_ORIGIN", "fluxer.example:19080"),
])
.expect_err("a malformed origin is refused");
assert!(error.to_string().contains("FLUXER_PUBLIC_ORIGIN"));
}
#[test]
fn csp_config_default_has_no_extra_sources() {
let c = CspConfig::default();
+223 -9
View File
@@ -207,9 +207,85 @@ fn strip_trailing_dot(host: &str) -> &str {
host.strip_suffix('.').unwrap_or(host)
}
fn canonicalize_domain(value: &str) -> String {
strip_trailing_dot(value.trim().to_lowercase().as_str()).to_owned()
}
fn default_port(scheme: &str) -> u16 {
if scheme == "https" { 443 } else { 80 }
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PublicOrigin {
pub scheme: String,
pub domain: String,
pub port: u16,
}
pub fn parse_public_origin(origin: &str) -> Option<PublicOrigin> {
let trimmed = origin.trim();
if trimmed.is_empty() {
return None;
}
let parsed = reqwest::Url::parse(trimmed).ok()?;
let scheme = parsed.scheme();
if scheme != "http" && scheme != "https" {
return None;
}
if parsed.path() != "/" || parsed.query().is_some() || parsed.fragment().is_some() {
return None;
}
if !parsed.username().is_empty() || parsed.password().is_some() {
return None;
}
let domain = canonicalize_domain(parsed.host_str()?);
if domain.is_empty() {
return None;
}
Some(PublicOrigin {
scheme: scheme.to_owned(),
domain,
port: parsed.port().unwrap_or_else(|| default_port(scheme)),
})
}
pub fn resolve_public_domain_and_port<F>(mut read_var: F) -> anyhow::Result<(String, Option<u16>)>
where
F: FnMut(&str) -> Option<String>,
{
let mut non_empty_var = |name: &str| {
read_var(name)
.map(|value| value.trim().to_owned())
.filter(|value| !value.is_empty())
};
let configured_port = match non_empty_var("FLUXER_PUBLIC_PORT") {
None => None,
Some(raw) => Some(
raw.parse::<u16>()
.ok()
.filter(|port| *port != 0)
.ok_or_else(|| {
anyhow::anyhow!(
"FLUXER_PUBLIC_PORT must be a port between 1 and 65535, got {raw}"
)
})?,
),
};
let configured_domain =
non_empty_var("FLUXER_BASE_DOMAIN").map(|value| canonicalize_domain(&value));
let Some(origin) = non_empty_var("FLUXER_PUBLIC_ORIGIN") else {
return Ok((configured_domain.unwrap_or_default(), configured_port));
};
let parsed = parse_public_origin(&origin).ok_or_else(|| {
anyhow::anyhow!(
"FLUXER_PUBLIC_ORIGIN must be a scheme, host and optional port such as https://chat.example.com:8443, got {origin}"
)
})?;
Ok((parsed.domain, Some(parsed.port)))
}
pub fn normalize_public_endpoint(url: &str, base_domain: &str, public_port: Option<u16>) -> String {
let domain = base_domain.trim().to_lowercase();
let domain = strip_trailing_dot(&domain);
let domain = canonicalize_domain(base_domain);
let Some(port) = public_port.filter(|port| *port != 0) else {
return url.to_owned();
};
@@ -219,8 +295,7 @@ pub fn normalize_public_endpoint(url: &str, base_domain: &str, public_port: Opti
let Ok(parsed) = reqwest::Url::parse(url) else {
return url.to_owned();
};
let host = parsed.host_str().unwrap_or_default().to_lowercase();
if strip_trailing_dot(&host) != domain {
if canonicalize_domain(parsed.host_str().unwrap_or_default()) != domain {
return url.to_owned();
}
if is_default_port(parsed.scheme(), port) {
@@ -244,12 +319,13 @@ pub fn normalize_public_endpoint(url: &str, base_domain: &str, public_port: Opti
format!("{}:{port}{}", &url[..authority_end], &url[authority_end..])
}
pub fn try_normalize_public_endpoint_from_env(url: &str) -> anyhow::Result<String> {
let (base_domain, public_port) = resolve_public_domain_and_port(|name| env::var(name).ok())?;
Ok(normalize_public_endpoint(url, &base_domain, public_port))
}
pub fn normalize_public_endpoint_from_env(url: &str) -> String {
normalize_public_endpoint(
url,
&read_env("FLUXER_BASE_DOMAIN", ""),
non_empty_env("FLUXER_PUBLIC_PORT").and_then(|port| port.parse().ok()),
)
try_normalize_public_endpoint_from_env(url).unwrap_or_else(|error| panic!("{error}"))
}
#[cfg(test)]
@@ -582,6 +658,144 @@ mod tests {
}
}
fn reader(vars: &[(&str, &str)]) -> impl FnMut(&str) -> Option<String> {
let vars: Vec<(String, String)> = vars
.iter()
.map(|(name, value)| ((*name).to_owned(), (*value).to_owned()))
.collect();
move |name: &str| {
vars.iter()
.find_map(|(key, value)| (key == name).then(|| value.clone()))
}
}
#[test]
fn parses_a_public_origin() {
assert_eq!(
Some(PublicOrigin {
scheme: "https".to_owned(),
domain: "chat.example.com".to_owned(),
port: 8443,
}),
parse_public_origin("https://chat.example.com:8443")
);
assert_eq!(
Some(PublicOrigin {
scheme: "http".to_owned(),
domain: "chat.example.com".to_owned(),
port: 80,
}),
parse_public_origin("http://chat.example.com")
);
assert_eq!(
Some(PublicOrigin {
scheme: "http".to_owned(),
domain: "[::1]".to_owned(),
port: 19080,
}),
parse_public_origin("http://[::1]:19080")
);
}
#[test]
fn an_explicit_default_port_normalizes_to_the_portless_form() {
let origin = parse_public_origin("https://chat.example.com:443").expect("origin parses");
assert_eq!(443, origin.port);
assert_eq!(
"https://chat.example.com/admin/oauth2_callback",
normalize_public_endpoint(
"https://chat.example.com/admin/oauth2_callback",
&origin.domain,
Some(origin.port)
)
);
assert_eq!(
80,
parse_public_origin("http://chat.example.com:80")
.expect("origin parses")
.port
);
}
#[test]
fn rejects_anything_that_is_not_a_bare_origin() {
for origin in [
"",
" ",
"not a url",
"chat.example.com:8443",
"wss://chat.example.com",
"https://chat.example.com/media",
"https://chat.example.com?a=1",
"https://user:[email protected]",
] {
assert_eq!(None, parse_public_origin(origin), "origin {origin}");
}
}
#[test]
fn the_origin_supplies_the_domain_and_the_port() {
let (domain, port) = resolve_public_domain_and_port(reader(&[(
"FLUXER_PUBLIC_ORIGIN",
"https://chat.example.com:29080",
)]))
.expect("origin resolves");
assert_eq!("chat.example.com", domain);
assert_eq!(Some(29080), port);
}
#[test]
fn the_origin_wins_over_the_named_variables() {
let (domain, port) = resolve_public_domain_and_port(reader(&[
("FLUXER_PUBLIC_ORIGIN", "https://chat.example.com:29080"),
("FLUXER_BASE_DOMAIN", "other.example.com"),
("FLUXER_PUBLIC_SCHEME", "http"),
("FLUXER_PUBLIC_PORT", "443"),
]))
.expect("the origin resolves");
assert_eq!("chat.example.com", domain);
assert_eq!(Some(29080), port);
}
#[test]
fn a_malformed_public_port_is_loud() {
for raw in ["abc", "0", "70000", "-1"] {
let error = resolve_public_domain_and_port(reader(&[
("FLUXER_BASE_DOMAIN", "chat.example.com"),
("FLUXER_PUBLIC_PORT", raw),
]))
.expect_err("a malformed port is refused");
assert!(
error.to_string().contains("FLUXER_PUBLIC_PORT"),
"port {raw}"
);
}
}
#[test]
fn a_malformed_public_origin_is_loud() {
let error = resolve_public_domain_and_port(reader(&[(
"FLUXER_PUBLIC_ORIGIN",
"https://chat.example.com/app",
)]))
.expect_err("a malformed origin is refused");
assert!(error.to_string().contains("FLUXER_PUBLIC_ORIGIN"));
}
#[test]
fn without_an_origin_the_named_variables_are_used_as_they_are() {
let (domain, port) = resolve_public_domain_and_port(reader(&[
("FLUXER_BASE_DOMAIN", "Chat.Example.com."),
("FLUXER_PUBLIC_PORT", "19080"),
]))
.expect("named variables resolve");
assert_eq!("chat.example.com", domain);
assert_eq!(Some(19080), port);
let (domain, port) = resolve_public_domain_and_port(reader(&[])).expect("empty resolves");
assert_eq!("", domain);
assert_eq!(None, port);
}
#[test]
fn trim_trailing_slash_works() {
assert_eq!(
@@ -72,6 +72,8 @@ Outside Compose these fall back to an empty base domain, `http`, and port `8088`
`FLUXER_DOMAIN` also feeds the default passkey relying party identifier, the default VAPID contact address, and the edge listener address.
`FLUXER_PUBLIC_ORIGIN` states the same public address as one string, and [The public origin](#the-public-origin) has it.
#### `FLUXER_INTERNAL_SCHEME`
Default `http`. The scheme for internal service URLs. Must be `http` or `https`, and anything else fails startup. Nothing outside the config loader reads it.
@@ -167,11 +169,15 @@ Nothing in the stack reads `X-Forwarded-Proto` or `X-Forwarded-Host`. Every abso
## The public origin
`FLUXER_PUBLIC_ORIGIN` is the public origin browsers use, with no trailing slash. Only `docker-compose.yml` reads it, and it substitutes the value into fourteen values that need a full origin, including `FLUXER_MEDIA_ENDPOINT`, `FLUXER_MARKETING_ENDPOINT`, `FLUXER_ADMIN_ENDPOINT`, `FLUXER_ADMIN_OAUTH_REDIRECT_URI`, `FLUXER_MEDIA_PROXY_UPLOAD_RELAY_ENDPOINT`, `PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT`, and the Gateway's media and static endpoints.
`FLUXER_PUBLIC_ORIGIN` states the public address as one string, with no trailing slash: the scheme, the host, and the port when that port is not the default for the scheme. `FLUXER_PUBLIC_SCHEME`, `FLUXER_DOMAIN` and `FLUXER_PUBLIC_PORT` state the same address between them, so the two spellings have to agree.
It ships commented out. When it is unset, Compose falls back to `FLUXER_PUBLIC_SCHEME` and `FLUXER_DOMAIN` with no port, which is correct for the usual https-on-443 case.
`docker-compose.yml` substitutes it into every name that needs a full origin, among them `FLUXER_APP_ENDPOINT`, `FLUXER_ADMIN_ENDPOINT`, `FLUXER_ADMIN_OAUTH_REDIRECT_URI`, `FLUXER_MEDIA_ENDPOINT`, `FLUXER_MARKETING_ENDPOINT`, `FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT`, `FLUXER_MEDIA_PROXY_UPLOAD_RELAY_ENDPOINT`, `FLUXER_STATIC_CDN_ENDPOINT`, `FLUXER_LIVEKIT_URL`, `FLUXER_PASSKEY_ADDITIONAL_ALLOWED_ORIGINS`, `PUBLIC_BOOTSTRAP_API_PUBLIC_ENDPOINT`, and the Gateway's media and static endpoints. `grep FLUXER_PUBLIC_ORIGIN docker-compose.yml` is the whole list. Compose also puts the name itself into the shared `x-fluxer-env` block, and a service that reads it takes its base domain, scheme and port from it.
Serving the instance on any other port means setting `FLUXER_PUBLIC_ORIGIN` by hand, with that port in it, because the fallback has no port and the media and admin links are built from it.
It ships commented out. When it is unset, Compose builds those names from `FLUXER_PUBLIC_SCHEME` and `FLUXER_DOMAIN`, and each service puts `FLUXER_PUBLIC_PORT` back into the endpoints it derives.
A non-default port therefore needs nothing here. `FLUXER_PUBLIC_PORT` is where the port of the public address goes, and the rest of the stack follows it. The comment block under the first three lines of `.env.example` says what each layout needs.
Set `FLUXER_PUBLIC_ORIGIN` only to write the address out in one place, and then repeat the port `FLUXER_PUBLIC_PORT` names and the host `FLUXER_DOMAIN` names inside it. An `.env` whose two spellings disagree names two addresses. Half the instance answers on one and half on the other, and the web app sends no `Authorization` header to an API that is not on its own origin.
## Endpoint overrides
@@ -265,7 +271,7 @@ Falls back to `FLUXER_STATIC_CDN_ENDPOINT`. The static origin used by `unfurl`.
The `edge` container is the only HTTP entry point. Both layouts below work with the edge left alone.
Bundled TLS is the default. `docker compose up -d` binds `80/tcp`, `443/tcp`, and `443/udp` and obtains its own certificate for `FLUXER_DOMAIN`. Point DNS at the host and set nothing else.
Bundled TLS is the default. `docker compose up -d` binds `80/tcp`, `443/tcp`, and `443/udp` and obtains its own certificate for `FLUXER_DOMAIN`. Point DNS at the host and set nothing else. The two `443` publishes follow `FLUXER_PUBLIC_PORT`, so a non-default public port moves them with it.
Put your own reverse proxy in front by adding `docker-compose.proxy.yml`, a second Compose file that overrides parts of the first. Load it with `-f` twice, or set `COMPOSE_FILE=docker-compose.yml:docker-compose.proxy.yml` in `.env` once. The edge then serves plain HTTP on one port, and the proxy in front terminates TLS. [Behind your own reverse proxy](/operator/reverse-proxy/) owns the switch, the requirements, and the per-proxy configuration.
@@ -273,7 +279,7 @@ All are optional.
#### `FLUXER_EDGE_SITE_ADDRESS`
Default `FLUXER_DOMAIN`. What the edge listens on. Honoured in the bundled layout only, because `docker-compose.proxy.yml` sets the literal `:8080` and discards any `.env` value. Several hostnames or a non-default TLS port therefore needs the bundled layout. It is independent of `FLUXER_PUBLIC_SCHEME` and `FLUXER_PUBLIC_PORT`, so keep the listener and the advertised origin in step by hand.
Defaults to the address Compose builds from `FLUXER_PUBLIC_SCHEME`, `FLUXER_DOMAIN` and `FLUXER_PUBLIC_PORT`. What the edge listens on, and the default keeps the listener on the address the instance advertises. Honoured in the bundled layout only, because `docker-compose.proxy.yml` sets the literal `:8080` and `tunnel.compose.yml` the literal `:80`, and either discards any `.env` value. Several hostnames therefore need the bundled layout. Write the scheme into any value you set here, because a bare hostname means automatic HTTPS on `443` whatever `FLUXER_PUBLIC_SCHEME` says.
#### `FLUXER_EDGE_TRUSTED_PROXIES`
@@ -285,11 +291,11 @@ Default `127.0.0.1:8080`. Where the plain-HTTP port binds. Read only under the o
#### `FLUXER_HTTP_PORT`
Default `80`. The host side of the edge's HTTP publish. The container still listens on `80` inside. It takes an optional bind address in front of the port, so `127.0.0.1:80` keeps the publish off every public interface. Not read under the overlay, which publishes `FLUXER_EDGE_BIND` instead.
Default `80`. The host side of the edge's HTTP publish, which serves the redirect to HTTPS and the ACME HTTP challenge under an `https` scheme and nothing at all under an `http` one. The container still listens on `80` inside. It takes an optional bind address in front of the port, so `127.0.0.1:80` keeps the publish off every public interface. Do not set it to the port `FLUXER_PUBLIC_PORT` already names, because that publishes one host port twice and the edge refuses to start. Not read under the overlay, which publishes `FLUXER_EDGE_BIND` instead.
#### `FLUXER_HTTPS_PORT`
Default `443`. The host side of the edge's HTTPS publish. It moves the TCP and the UDP publish together, because HTTP/3 needs both on the same port. Same optional bind address, and it is not read under the overlay either.
Defaults to `FLUXER_PUBLIC_PORT`. The host side of the edge's HTTPS publish, and the only thing it moves is that host side. Set it when the host already has something on the port the instance advertises. It moves the TCP and the UDP publish together, because HTTP/3 needs both on the same port. Same optional bind address, and it is not read under the overlay either.
#### `COMPOSE_FILE`
@@ -649,7 +655,7 @@ Default empty. The LiveKit secret. Compose fills it from `LIVEKIT_API_SECRET`.
#### `FLUXER_LIVEKIT_URL`
Default empty. The client-facing LiveKit URL. When empty the API derives it from the public API origin as `wss://host/livekit`, or `ws://` under `http`, and keeps a non-default port. Set it only when LiveKit is served from another host. Compose forwards the `.env` value, empty by default.
Default empty. The client-facing LiveKit URL. Set it only when LiveKit is served from another host. `docker-compose.yml` never passes it empty: it builds the value from `FLUXER_PUBLIC_ORIGIN`, or from `FLUXER_PUBLIC_SCHEME`, `FLUXER_DOMAIN` and `FLUXER_PUBLIC_PORT` when the origin is unset, followed by `/livekit`. An empty value outside Compose has the API derive `wss://host/livekit` from the public API origin, or `ws://` under `http`, with a non-default port kept.
#### `FLUXER_LIVEKIT_USE_EXTERNAL_IP`
@@ -729,6 +735,8 @@ Default `60000`. Grace before culling a LiveKit-only participant. Milliseconds.
Email is off by default, and two conditions turn it on. The switch must be on, and the provider must be `smtp` with a complete SMTP configuration, meaning `FLUXER_EMAIL_FROM_EMAIL`, `FLUXER_EMAIL_SMTP_HOST`, `FLUXER_EMAIL_SMTP_PORT`, `FLUXER_EMAIL_SMTP_USERNAME`, and `FLUXER_EMAIL_SMTP_PASSWORD` are all non-empty. All are optional.
The same two conditions turn on a DNS check at registration. The check runs when email is on by the rule above, so the dashboard switch and the SMTP values decide it along with the variable. The address domain has to publish an `MX` record, or an `A` or `AAAA` record as a fallback, and an address at a domain that publishes neither is answered `That email domain cannot receive mail.` however well formed it is. The first admin account is no exception, so an owner address at a `.lan`, `.internal` or `home.arpa` name needs email left off.
#### `FLUXER_EMAIL_ENABLED`
`.env.example` `false`. The delivery switch. The admin dashboard value wins over this.
@@ -1600,10 +1608,6 @@ Docker Compose or the edge container consumes most of the names below, and each
Interpolated into `FLUXER_BASE_DOMAIN` and into the derived URL strings.
#### `FLUXER_PUBLIC_ORIGIN`
Interpolated into fourteen values that need a full origin.
#### `COMPOSE_FILE`
Read by Docker Compose to select the proxy overlay.
@@ -79,6 +79,8 @@ Open these ports on the host:
A machine behind a home router needs 80, 443 and both LiveKit ports forwarded to it. The certificate is issued from the public internet, and voice media arrives on the LiveKit ports directly. Running your own reverse proxy changes only the first two, which the proxy holds while the stack binds a plain HTTP port on the loopback. 7881 and 7882 have to reach the host either way, because voice media never goes through a proxy.
On another port, open that one in place of 443 and read [Serving on another port](#serving-on-another-port).
On a cloud VM, open them in the provider's firewall or security group. On a Linux host running firewalld:
```bash
@@ -136,6 +138,25 @@ The run prints one line per phase and ends with the URL to open.
`~/fluxer` then holds `docker-compose.yml`, `docker-compose.proxy.yml`, `tunnel.compose.yml`, `Caddyfile` and `.env.example`, plus a `.env` readable only by you. Every value that ships as `CHANGE_ME` in `.env.example` is a fresh random value. Every command from here on runs in that directory.
### Serving on another port
The installer writes an `.env` for `https` on `443` and has no flag for another port. Two lines change it, the port of the public address and the publish that answers on it:
```ini
FLUXER_PUBLIC_PORT=8443
FLUXER_HTTPS_PORT=8443
```
```bash
docker compose up -d
```
`FLUXER_PUBLIC_PORT` is where the port of the public address goes, and every endpoint the services advertise follows it. It does not move what the host publishes, so `FLUXER_HTTPS_PORT` has to name the same port. Move `FLUXER_PUBLIC_SCHEME` with them when the new port serves plain HTTP, and set `FLUXER_HTTP_PORT` in place of `FLUXER_HTTPS_PORT`. `.env.example` ships beside `.env` and writes out both complete recipes.
Host 80 stays published on the `https` recipe and still answers the ACME challenge. Let's Encrypt only ever connects to the public 80 or 443, so the certificate is issued if a router in front forwards public 80 to this host. Serve your own certificate from the `Caddyfile` when it cannot.
Leave `FLUXER_PUBLIC_ORIGIN` commented out. It states that same address as one string, so an `.env` that sets it without the port `FLUXER_PUBLIC_PORT` names holds two addresses. Part of the instance then answers on one and part on the other, the web app sends no `Authorization` header to an API that is not on its own origin, the API answers 401, and the setup wizard reads that 401 as an expired session and returns to the account form. [The public origin](/operator/configuration/#the-public-origin) has the rest.
### Installer flags
| Flag | Meaning |
@@ -173,7 +194,7 @@ docker compose logs -f api
Every service reads `running` or `healthy` except `seaweedfs-init`, which creates the upload buckets and then reads `exited (0)`.
Then the public probes. Replace the hostname with your own:
Then the public probes. Replace the origin with your own, port included when the instance answers on one:
```bash
base=https://chat.example.com
@@ -203,6 +224,8 @@ The wizard runs in two halves. The first is a welcome, a theme choice, an admin
Create the owner account with an email address at a domain you control. The first registration that supplies one receives the wildcard admin ACL, which is full access to the admin dashboard, unless registration is set to hold new accounts for approval. Finishing the wizard grants that same ACL to whichever account completes it, when that account holds none.
Once email is on, the address goes through a DNS check before the account exists. Email counts as on when the switch is set and the provider is `smtp` with a complete SMTP configuration, so setting `FLUXER_EMAIL_ENABLED=true` on its own does not turn the check on. Its domain has to publish an `MX` record, or an `A` or `AAAA` record as a fallback. A name that resolves on your own network alone, such as a `.lan`, `.internal` or `home.arpa` name, publishes neither, and the account form answers `That email domain cannot receive mail.` whatever the address looks like. Use a domain with public records, or leave email off.
`.env.example` ships `FLUXER_EMAIL_ENABLED=false`, which marks every address verified at creation and sends no mail at all. A forgotten owner password therefore has no email reset. Record it, and register a passkey or a second admin account before you open registration.
Then sign in to the admin dashboard at `https://chat.example.com/admin` with the account holding the wildcard ACL. The **Instance Config** page has everything the wizard asked, plus registration mode, approvals and integration keys. **Limit Config** holds the instance limits published to clients. **Voice Regions** and **Voice Servers** come seeded, so voice needs no setup there.
@@ -107,12 +107,16 @@ FLUXER_PUBLIC_PORT=443
They stay `https` on `443` even though the instance itself speaks plain HTTP on `8080`. Clients read every base URL from the discovery document the API builds out of these values.
Serving on a port other than `443` also needs `FLUXER_PUBLIC_ORIGIN`. Several endpoints are built from the scheme and the domain alone, and the port is lost without it:
Serving on a port other than `443` means changing one of those three:
```ini
FLUXER_PUBLIC_ORIGIN=https://chat.example.com:8443
FLUXER_PUBLIC_PORT=8443
```
Your proxy holds the public port, and the overlay pins the edge to plain HTTP on `8080` whatever that port is, so nothing else in `.env` moves with it.
Leave `FLUXER_PUBLIC_ORIGIN` commented out. It states the same address as one string, and an `.env` that sets it without the port `FLUXER_PUBLIC_PORT` names puts part of the instance on `chat.example.com:8443` and part on `chat.example.com`, where the web app sends no `Authorization` header across the gap.
## nginx
The `map` block makes `Connection` follow `Upgrade`. The snippet raises the body limit and the read timeout above nginx's own 1 MB and 60 seconds.
+65 -12
View File
@@ -775,15 +775,64 @@ function Wait-FluxerStack([string]$Lead) {
Stop-Fluxer "The stack did not report healthy within $FluxerReadyTimeoutSeconds seconds. Read docker compose ps and docker compose logs." $FluxerExitUnhealthy
}
# The origin browsers use. .env states it outright when FLUXER_PUBLIC_ORIGIN is set, and Compose
# otherwise builds the same string from the scheme, the domain and the port, dropping a port that
# is the default for its scheme.
#
# Compose expands a ${...} reference inside an .env value and this script does not, so a
# FLUXER_PUBLIC_ORIGIN written that way is skipped rather than printed back with the braces still
# in it. The three names below say the same address, so the derived string is the right one to
# fall back to.
#
# By hand:
# Select-String -Path .env -Pattern '^FLUXER_(PUBLIC_ORIGIN|PUBLIC_SCHEME|DOMAIN|PUBLIC_PORT)='
function Get-FluxerPublicOrigin([string]$EnvPath) {
$origin = Get-FluxerEnvValue $EnvPath 'FLUXER_PUBLIC_ORIGIN'
if ($origin.Contains('${')) {
Write-FluxerProblem 'FLUXER_PUBLIC_ORIGIN in .env holds a ${...} reference. This script does not expand those, so the address below comes from FLUXER_PUBLIC_SCHEME, FLUXER_DOMAIN and FLUXER_PUBLIC_PORT instead.'
$origin = ''
}
if ($origin.Length -gt 0) {
return $origin.TrimEnd('/')
}
$originHost = Get-FluxerEnvValue $EnvPath 'FLUXER_DOMAIN'
if ($originHost.Length -eq 0) {
return ''
}
$scheme = Get-FluxerEnvValue $EnvPath 'FLUXER_PUBLIC_SCHEME'
if ($scheme.Length -eq 0) {
$scheme = 'https'
}
$port = Get-FluxerEnvValue $EnvPath 'FLUXER_PUBLIC_PORT'
$suffix = ''
if ($port.Length -gt 0 -and -not (($scheme -eq 'http' -and $port -eq '80') -or ($scheme -eq 'https' -and $port -eq '443'))) {
$suffix = ":$port"
}
return "${scheme}://${originHost}${suffix}"
}
# The public probe is informational. A host behind hairpin NAT cannot always reach its own
# hostname, and a false failure there would be worse than no probe.
function Test-FluxerPublicHealth([string]$DomainValue) {
$url = "https://$DomainValue$FluxerHealthPath"
# hostname, and a false failure there would be worse than no probe. It asks the origin .env
# advertises, so an instance on a non-default port is probed where it actually answers.
function Test-FluxerPublicHealth([string]$Origin) {
$url = "$Origin$FluxerHealthPath"
$authority = $Origin
$separator = $Origin.IndexOf('://')
if ($separator -ge 0) {
$authority = $Origin.Substring($separator + 3)
}
$probeHost = $authority
$probePort = if ($Origin.StartsWith('http://')) { '80' } else { '443' }
$colon = $authority.IndexOf(':')
if ($colon -ge 0) {
$probeHost = $authority.Substring(0, $colon)
$probePort = $authority.Substring($colon + 1)
}
try {
$response = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 20
Write-FluxerLine "$url returned $([int]$response.StatusCode)."
} catch {
Write-FluxerLine "$url did not answer with 200. Confirm the DNS record for $DomainValue and that ports 80 and 443 reach this host."
Write-FluxerLine "$url did not answer with 200. Confirm the DNS record for $probeHost and that inbound port $probePort reaches this host."
}
}
@@ -1558,9 +1607,9 @@ function Invoke-FluxerUpgrade([string]$TargetDir, [string]$EnvPath, [string]$Bac
}
Restart-FluxerMounts $changedMounts $TargetDir
Wait-FluxerStack 'Waiting for every service to report ready.'
$domainValue = Get-FluxerEnvValue $EnvPath 'FLUXER_DOMAIN'
if ($domainValue.Length -gt 0) {
Test-FluxerPublicHealth $domainValue
$originValue = Get-FluxerPublicOrigin $EnvPath
if ($originValue.Length -gt 0) {
Test-FluxerPublicHealth $originValue
}
Write-FluxerLine "Instance upgraded in $TargetDir."
Write-FluxerLine "The record of what it ran before is in $record."
@@ -1647,9 +1696,9 @@ function Invoke-FluxerRollback([string]$TargetDir, [string]$EnvPath, [string]$Ba
# would save one restart and cost the reader a reason.
Restart-FluxerMounts $FluxerMountedFiles $TargetDir
Wait-FluxerStack 'Waiting for every service to report ready.'
$domainValue = Get-FluxerEnvValue $EnvPath 'FLUXER_DOMAIN'
if ($domainValue.Length -gt 0) {
Test-FluxerPublicHealth $domainValue
$originValue = Get-FluxerPublicOrigin $EnvPath
if ($originValue.Length -gt 0) {
Test-FluxerPublicHealth $originValue
}
Write-FluxerLine "Instance rolled back in $TargetDir."
$dumpPath = Join-Path $record $FluxerDumpFile
@@ -1938,8 +1987,12 @@ function Invoke-FluxerInstall {
Stop-Fluxer 'docker compose up -d failed.' $FluxerExitUnhealthy
}
Wait-FluxerStack 'Waiting for the stack to report healthy. The first start pulls images and takes several minutes.'
Test-FluxerPublicHealth $domainValue
Write-FluxerLine "Instance ready at https://$domainValue"
$readyOrigin = Get-FluxerPublicOrigin $envPath
if ($readyOrigin.Length -eq 0) {
$readyOrigin = "https://$domainValue"
}
Test-FluxerPublicHealth $readyOrigin
Write-FluxerLine "Instance ready at $readyOrigin"
Write-FluxerLine 'Open it and create the first admin account. Finish the setup wizard in the same sitting.'
Write-FluxerLine "Secrets live in $envPath. Back that file up."
} finally {
+72 -12
View File
@@ -936,22 +936,77 @@ fluxer_wait_ready() {
return 1
}
fluxer_env_value() {
sed -n "s/^$1=\\(.*\\)\$/\\1/p" "$opt_dir/.env" | head -n 1
}
# The origin browsers use. .env states it outright when FLUXER_PUBLIC_ORIGIN is
# set, and Compose otherwise builds the same string from the scheme, the domain
# and the port, dropping a port that is the default for its scheme.
#
# Compose expands a ${...} reference inside an .env value and this script does
# not, so a FLUXER_PUBLIC_ORIGIN written that way is skipped rather than printed
# back with the braces still in it. The three names below say the same address,
# so the derived string is the right one to fall back to.
#
# By hand:
# grep -E '^FLUXER_(PUBLIC_ORIGIN|PUBLIC_SCHEME|DOMAIN|PUBLIC_PORT)=' .env
fluxer_public_origin() {
fluxer_origin=$(fluxer_env_value FLUXER_PUBLIC_ORIGIN)
case $fluxer_origin in
*'${'*)
printf '%s\n' 'FLUXER_PUBLIC_ORIGIN in .env holds a ${...} reference. This script does not expand those, so the address below comes from FLUXER_PUBLIC_SCHEME, FLUXER_DOMAIN and FLUXER_PUBLIC_PORT instead.' >&2
fluxer_origin=''
;;
esac
if [ -n "$fluxer_origin" ]; then
printf '%s' "${fluxer_origin%/}"
return 0
fi
fluxer_origin_host=$(fluxer_env_value FLUXER_DOMAIN)
if [ -z "$fluxer_origin_host" ]; then
return 0
fi
fluxer_origin_scheme=$(fluxer_env_value FLUXER_PUBLIC_SCHEME)
if [ -z "$fluxer_origin_scheme" ]; then
fluxer_origin_scheme='https'
fi
fluxer_origin_port=$(fluxer_env_value FLUXER_PUBLIC_PORT)
if [ -z "$fluxer_origin_port" ]; then
fluxer_origin_suffix=''
else
case $fluxer_origin_scheme:$fluxer_origin_port in
http:80|https:443) fluxer_origin_suffix='' ;;
*) fluxer_origin_suffix=":$fluxer_origin_port" ;;
esac
fi
printf '%s://%s%s' "$fluxer_origin_scheme" "$fluxer_origin_host" "$fluxer_origin_suffix"
}
# The public probe is informational. A host behind hairpin NAT cannot always
# reach its own hostname, and a false failure there would be worse than no probe.
# It asks the origin .env advertises, so an instance on a non-default port is
# probed where it actually answers.
fluxer_probe() {
fluxer_probe_code=$(curl -sS -o /dev/null -w '%{http_code}' --max-time 15 "https://$1/_health" 2>/dev/null || true)
fluxer_probe_origin=$1
fluxer_probe_authority=${fluxer_probe_origin#*://}
fluxer_probe_host=${fluxer_probe_authority%%:*}
case $fluxer_probe_origin in
http://*) fluxer_probe_port='80' ;;
*) fluxer_probe_port='443' ;;
esac
case $fluxer_probe_authority in
*:*) fluxer_probe_port=${fluxer_probe_authority##*:} ;;
esac
fluxer_probe_code=$(curl -sS -o /dev/null -w '%{http_code}' --max-time 15 "$fluxer_probe_origin/_health" 2>/dev/null || true)
if [ -z "$fluxer_probe_code" ]; then
fluxer_probe_code='000'
fi
if [ "$fluxer_probe_code" = '200' ]; then
fluxer_say "https://$1/_health answers 200."
fluxer_say "$fluxer_probe_origin/_health answers 200."
return 0
fi
fluxer_say "https://$1/_health answers $fluxer_probe_code from this host. Check the DNS record for $1 and inbound ports 80 and 443."
}
fluxer_env_value() {
sed -n "s/^$1=\\(.*\\)\$/\\1/p" "$opt_dir/.env" | head -n 1
fluxer_say "$fluxer_probe_origin/_health answers $fluxer_probe_code from this host. Check the DNS record for $fluxer_probe_host and inbound port $fluxer_probe_port."
}
# The keys a refreshed stack requires that an .env written by an older installer
@@ -1510,9 +1565,9 @@ fluxer_verify_stack() {
if ! fluxer_wait_ready; then
fluxer_fail 6 "The stack is not ready after $FLUXER_READY_TIMEOUT seconds. Read $fluxer_engine compose logs in $opt_dir."
fi
fluxer_domain_value=$(fluxer_env_value FLUXER_DOMAIN)
if [ -n "$fluxer_domain_value" ]; then
fluxer_probe "$fluxer_domain_value"
fluxer_origin_value=$(fluxer_public_origin)
if [ -n "$fluxer_origin_value" ]; then
fluxer_probe "$fluxer_origin_value"
fi
}
@@ -1862,6 +1917,7 @@ if ! fluxer_generate_vapid; then
fi
fluxer_write_env
fluxer_say "Wrote $opt_dir/.env, readable by you alone."
fluxer_say 'That .env serves https on 443, which is the only layout this script writes. The .env.example beside it says what to change for any other one.'
if [ "$opt_no_start" -eq 1 ]; then
fluxer_say "Start the instance with $fluxer_engine compose up -d in $opt_dir."
@@ -1878,8 +1934,12 @@ fluxer_say 'Waiting for every service to report ready. This takes several minute
if ! fluxer_wait_ready; then
fluxer_fail 6 "The stack is not ready after $FLUXER_READY_TIMEOUT seconds. Read $fluxer_engine compose logs in $opt_dir."
fi
fluxer_probe "$opt_domain"
fluxer_ready_origin=$(fluxer_public_origin)
if [ -z "$fluxer_ready_origin" ]; then
fluxer_ready_origin="https://$opt_domain"
fi
fluxer_probe "$fluxer_ready_origin"
fluxer_say "Instance ready at https://$opt_domain"
fluxer_say "Instance ready at $fluxer_ready_origin"
fluxer_say 'Open it and create the first admin account. Finish the setup wizard in the same sitting.'
fluxer_say "Secrets live in $opt_dir/.env. Back that file up."
+1
View File
@@ -90,6 +90,7 @@ mod tests {
"FLUXER_MEDIA_PROXY_SECRET_KEY",
"FLUXER_BASE_DOMAIN",
"FLUXER_PUBLIC_PORT",
"FLUXER_PUBLIC_ORIGIN",
];
let saved = keys
.iter()
+13 -2
View File
@@ -121,6 +121,10 @@ impl Config {
!secret_key.is_empty(),
"FLUXER_MEDIA_PROXY_SECRET_KEY is required"
);
let (public_base_domain, public_port) =
fluxer_common::config::resolve_public_domain_and_port(|name| {
env.get(name).map(ToOwned::to_owned)
})?;
Ok(Self {
node_env: env.get("NODE_ENV").unwrap_or("development").to_owned(),
@@ -134,8 +138,15 @@ impl Config {
8080,
)?,
secret_key,
public_endpoint: non_empty(env.get("FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT"))
.map(|endpoint| endpoint.trim_end_matches('/').to_owned()),
public_endpoint: non_empty(env.get("FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT")).map(
|endpoint| {
fluxer_common::config::normalize_public_endpoint(
endpoint.trim_end_matches('/'),
&public_base_domain,
public_port,
)
},
),
mode,
read_only: parse_bool(
"FLUXER_MEDIA_PROXY_READ_ONLY",
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
mod public_endpoint;
mod s3_read;
use super::*;
@@ -0,0 +1,74 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
use super::env_with;
use crate::config::Config;
const ENDPOINT: &str = "https://chat.example.com/media";
#[test]
fn a_non_default_public_port_reaches_the_public_endpoint() {
let cfg = Config::load_from_iter(env_with(&[
("FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT", ENDPOINT),
("FLUXER_BASE_DOMAIN", "chat.example.com"),
("FLUXER_PUBLIC_PORT", "29080"),
]))
.expect("config loads");
assert_eq!(
Some("https://chat.example.com:29080/media".to_owned()),
cfg.public_endpoint
);
}
#[test]
fn the_public_origin_supplies_the_port() {
let cfg = Config::load_from_iter(env_with(&[
("FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT", ENDPOINT),
("FLUXER_PUBLIC_ORIGIN", "https://chat.example.com:29080"),
("FLUXER_BASE_DOMAIN", "chat.example.com"),
("FLUXER_PUBLIC_PORT", "443"),
]))
.expect("config loads");
assert_eq!(
Some("https://chat.example.com:29080/media".to_owned()),
cfg.public_endpoint
);
}
#[test]
fn an_unrelated_host_keeps_its_endpoint() {
let cfg = Config::load_from_iter(env_with(&[
(
"FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT",
"https://cdn.other.example/media",
),
("FLUXER_BASE_DOMAIN", "chat.example.com"),
("FLUXER_PUBLIC_PORT", "29080"),
]))
.expect("config loads");
assert_eq!(
Some("https://cdn.other.example/media".to_owned()),
cfg.public_endpoint
);
}
#[test]
fn a_default_public_port_keeps_the_endpoint_portless() {
let cfg = Config::load_from_iter(env_with(&[
("FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT", ENDPOINT),
("FLUXER_BASE_DOMAIN", "chat.example.com"),
("FLUXER_PUBLIC_PORT", "443"),
]))
.expect("config loads");
assert_eq!(Some(ENDPOINT.to_owned()), cfg.public_endpoint);
}
#[test]
fn a_malformed_public_port_is_refused() {
let error = Config::load_from_iter(env_with(&[
("FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT", ENDPOINT),
("FLUXER_BASE_DOMAIN", "chat.example.com"),
("FLUXER_PUBLIC_PORT", "not-a-port"),
]))
.expect_err("a malformed port is refused");
assert!(error.to_string().contains("FLUXER_PUBLIC_PORT"));
}
@@ -192,6 +192,61 @@ mod tests {
assert!(resolve(&app, &format!("{ENDPOINT}/channels/1/2")).is_none());
}
#[test]
fn a_non_default_public_port_reaches_the_signed_self_origin() {
let app = AppState::for_tests(
Config::load_from_iter([
(
"FLUXER_MEDIA_PROXY_SECRET_KEY".to_owned(),
"secret".to_owned(),
),
(
"FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT".to_owned(),
format!("{ENDPOINT}/"),
),
(
"FLUXER_MEDIA_PROXY_STORAGE_BACKEND".to_owned(),
"local".to_owned(),
),
(
"FLUXER_BASE_DOMAIN".to_owned(),
"chat.example.com".to_owned(),
),
("FLUXER_PUBLIC_PORT".to_owned(), "29080".to_owned()),
])
.expect("self origin test config"),
);
let endpoint = app
.cfg
.public_endpoint
.clone()
.expect("a public endpoint is configured");
assert_eq!("https://chat.example.com:29080/media", endpoint);
let target = "https://static.klipy.com/ii/c8/28/HkAKKCzZ.webp";
let proxied = fluxer_common::external_media_path::build_external_media_proxy_url(
&endpoint,
target,
app.cfg.secret_key.as_bytes(),
)
.expect("proxy url");
match resolve(&app, &proxied) {
Some(SelfOrigin::External { url }) => assert_eq!(target, url),
_ => panic!("its own signed url resolves to the origin url"),
}
match resolve(
&app,
&format!("{endpoint}/attachments/1544725486800732163/1544971349200470016/cat.gif"),
) {
Some(SelfOrigin::Stored { key, .. }) => assert_eq!(
"attachments/1544725486800732163/1544971349200470016/cat.gif",
key
),
_ => panic!("its own attachment paths resolve to stored objects"),
}
assert!(resolve(&app, "https://cdn.other.example/avatars/1/abc.png").is_none());
assert!(resolve(&app, &format!("{ENDPOINT}/avatars/1/abc.png")).is_none());
}
#[test]
fn own_path_matches_the_endpoint_prefix() {
assert_eq!(
+2 -1
View File
@@ -333,7 +333,7 @@ mod tests {
static ENV_LOCK: Mutex<()> = Mutex::new(());
const PUBLIC_ENDPOINT_ENV: [&str; 7] = [
const PUBLIC_ENDPOINT_ENV: [&str; 8] = [
"FLUXER_MEDIA_PROXY_ENDPOINT",
"FLUXER_MEDIA_PROXY_SECRET_KEY",
"FLUXER_MEDIA_PROXY_PUBLIC_ENDPOINT",
@@ -341,6 +341,7 @@ mod tests {
"FLUXER_STATIC_CDN_ENDPOINT",
"FLUXER_BASE_DOMAIN",
"FLUXER_PUBLIC_PORT",
"FLUXER_PUBLIC_ORIGIN",
];
fn shard_from_env(vars: &[(&str, &str)]) -> UnfurlShard {
+70 -3
View File
@@ -3,9 +3,11 @@
import {createECDH} from 'node:crypto';
import {buildNamedFluxerEnvOverrides} from '@fluxer/config/src/config_loader/EnvironmentOverrides';
import {
buildUrl,
type DerivedEndpoints,
deriveEndpointsFromDomain,
normalizePublicEndpoint,
parsePublicOrigin,
} from '@fluxer/config/src/EndpointDerivation';
import type {MasterConfig} from '@fluxer/config/src/MasterConfig';
@@ -26,6 +28,7 @@ function defaultConfig(): MasterConfig {
env: 'development',
domain: {
base_domain: '',
public_origin: '',
public_scheme: 'http',
internal_scheme: 'http',
public_port: 8088,
@@ -476,6 +479,7 @@ function normalizeConfig(config: MasterConfig): MasterConfig {
assertIntegerInRange(config.services.api.max_inflight_requests, 'FLUXER_API_MAX_INFLIGHT_REQUESTS', 1, 100_000);
assertIntegerInRange(config.services.api.headers_timeout_ms, 'FLUXER_API_HEADERS_TIMEOUT_MS', 1_000, 3_600_000);
assertIntegerInRange(config.services.api.request_timeout_ms, 'FLUXER_API_REQUEST_TIMEOUT_MS', 1_000, 3_600_000);
assertIntegerInRange(config.domain.public_port, 'FLUXER_PUBLIC_PORT', 1, 65_535);
requireString(config.domain.base_domain, 'FLUXER_BASE_DOMAIN');
requireString(config.auth.sudo_mode_secret, 'FLUXER_SUDO_MODE_SECRET');
requireString(config.auth.connection_initiation_secret, 'FLUXER_CONNECTION_INITIATION_SECRET');
@@ -493,16 +497,51 @@ function normalizeConfig(config: MasterConfig): MasterConfig {
return config;
}
function applyPublicOrigin(config: MasterConfig): MasterConfig {
const raw = config.domain.public_origin.trim();
if (raw.length === 0) {
return config;
}
const origin = parsePublicOrigin(raw);
if (!origin) {
throw new Error(
`FLUXER_PUBLIC_ORIGIN must be a scheme, host and optional port such as https://chat.example.com:8443, got ${raw}`,
);
}
return {
...config,
domain: {
...config.domain,
base_domain: origin.base_domain,
public_scheme: origin.public_scheme,
public_port: origin.public_port,
},
};
}
function applyPublicPort(config: MasterConfig, endpoints: DerivedEndpoints): MasterConfig {
const {base_domain, public_port} = config.domain;
const normalize = (url: string) => normalizePublicEndpoint(url, base_domain, public_port);
const normalizeOptional = (url: string | undefined) => (url === undefined ? undefined : normalize(url));
const normalizedEndpoints = {...endpoints};
for (const key of Object.keys(normalizedEndpoints) as Array<keyof DerivedEndpoints>) {
normalizedEndpoints[key] = normalize(normalizedEndpoints[key]);
}
const {bluesky, passkeys} = config.auth;
const {branding} = config.instance;
const {email, sms, voice} = config.integrations;
return {
...config,
domain: {
...config.domain,
public_origin: buildUrl(config.domain.public_scheme, base_domain, public_port),
},
endpoints: normalizedEndpoints,
s3: config.s3 && {...config.s3, presigned_url_base: normalizeOptional(config.s3.presigned_url_base)},
s3_downloads: config.s3_downloads && {
...config.s3_downloads,
presigned_url_base: normalizeOptional(config.s3_downloads.presigned_url_base),
},
services: {
...config.services,
media_proxy: {
@@ -512,12 +551,40 @@ function applyPublicPort(config: MasterConfig, endpoints: DerivedEndpoints): Mas
endpoint: normalize(config.services.media_proxy.upload_relay.endpoint),
},
},
gateway: {
...config.services.gateway,
media_proxy_endpoint: normalizeOptional(config.services.gateway.media_proxy_endpoint),
},
},
auth: {
...config.auth,
passkeys: {
...config.auth.passkeys,
additional_allowed_origins: config.auth.passkeys.additional_allowed_origins.map(normalize),
...passkeys,
additional_allowed_origins: passkeys.additional_allowed_origins.map(normalize),
},
bluesky: {
...bluesky,
client_uri: normalize(bluesky.client_uri),
logo_uri: normalize(bluesky.logo_uri),
tos_uri: normalize(bluesky.tos_uri),
policy_uri: normalize(bluesky.policy_uri),
},
},
integrations: {
...config.integrations,
email: {...email, app_base_url: normalize(email.app_base_url)},
sms: {...sms, inbound_webhook_public_url: normalizeOptional(sms.inbound_webhook_public_url)},
voice: {...voice, url: normalize(voice.url)},
},
instance: {
...config.instance,
branding: {
...branding,
icon_url: normalizeOptional(branding.icon_url),
symbol_url: normalizeOptional(branding.symbol_url),
logo_url: normalizeOptional(branding.logo_url),
wordmark_url: normalizeOptional(branding.wordmark_url),
favicon_url: normalizeOptional(branding.favicon_url),
},
},
};
@@ -546,7 +613,7 @@ export async function loadConfig(): Promise<MasterConfig> {
return cachedConfig;
}
const overrides = buildNamedFluxerEnvOverrides(process.env);
const merged = mergeConfig(defaultConfig(), overrides);
const merged = applyPublicOrigin(mergeConfig(defaultConfig(), overrides));
const normalized = normalizeConfig(merged);
const derived = deriveEndpointsFromDomain(normalized.domain);
const endpoints = {...derived, ...(normalized.endpoint_overrides ?? {})};
+49 -4
View File
@@ -13,6 +13,14 @@ export interface DomainConfig {
gift_domain?: string;
}
type PublicOriginScheme = 'http' | 'https';
interface PublicOrigin {
public_scheme: PublicOriginScheme;
base_domain: string;
public_port: number;
}
export interface DerivedEndpoints {
api: string;
api_client: string;
@@ -36,8 +44,45 @@ function isStandardPort(scheme: string, port: number): boolean {
);
}
function stripTrailingDot(host: string): string {
return host.endsWith('.') ? host.slice(0, -1) : host;
export function canonicalizeDomain(value: string): string {
const trimmed = value.trim().toLowerCase();
return trimmed.endsWith('.') ? trimmed.slice(0, -1) : trimmed;
}
function defaultPortForScheme(scheme: PublicOriginScheme): number {
return scheme === 'https' ? 443 : 80;
}
export function parsePublicOrigin(origin: string): PublicOrigin | null {
const trimmed = origin.trim();
if (trimmed.length === 0) {
return null;
}
let parsed: URL;
try {
parsed = new URL(trimmed);
} catch {
return null;
}
const scheme = parsed.protocol.slice(0, -1);
if (scheme !== 'http' && scheme !== 'https') {
return null;
}
if (parsed.pathname !== '/' || parsed.search.length > 0 || parsed.hash.length > 0) {
return null;
}
if (parsed.username.length > 0 || parsed.password.length > 0) {
return null;
}
const base_domain = canonicalizeDomain(parsed.hostname);
if (base_domain.length === 0) {
return null;
}
return {
public_scheme: scheme,
base_domain,
public_port: parsed.port.length === 0 ? defaultPortForScheme(scheme) : Number.parseInt(parsed.port, 10),
};
}
export function buildUrl(scheme: string, domain: string, port?: number, path?: string): string {
@@ -47,7 +92,7 @@ export function buildUrl(scheme: string, domain: string, port?: number, path?: s
}
export function normalizePublicEndpoint(url: string, baseDomain: string, publicPort?: number): string {
const domain = stripTrailingDot(baseDomain.trim().toLowerCase());
const domain = canonicalizeDomain(baseDomain);
if (domain.length === 0 || !publicPort) {
return url;
}
@@ -57,7 +102,7 @@ export function normalizePublicEndpoint(url: string, baseDomain: string, publicP
} catch {
return url;
}
if (stripTrailingDot(parsed.hostname.toLowerCase()) !== domain) {
if (canonicalizeDomain(parsed.hostname) !== domain) {
return url;
}
if (isStandardPort(parsed.protocol.slice(0, -1), publicPort)) {
+1
View File
@@ -20,6 +20,7 @@ export interface MasterConfig {
env: RuntimeEnv;
domain: {
base_domain: string;
public_origin: string;
public_scheme: PublicScheme;
internal_scheme: PublicScheme;
public_port: number;
@@ -646,4 +646,183 @@ describe('ConfigLoader', () => {
vi.stubEnv('FLUXER_ENV', 'test');
await expect(loadConfig()).rejects.toThrow();
});
test('inserts the public port into the LiveKit url', async () => {
stubMinimalEnv({FLUXER_LIVEKIT_URL: 'http://localhost/livekit'});
const config = await loadConfig();
expect(config.integrations.voice.url).toBe('http://localhost:8088/livekit');
});
test('inserts the public port into every other public url the config carries', async () => {
stubMinimalEnv({
FLUXER_GATEWAY_MEDIA_PROXY_ENDPOINT: 'http://localhost/media',
FLUXER_S3_PUBLIC_ENDPOINT: 'http://localhost/s3',
FLUXER_EMAIL_APP_BASE_URL: 'http://localhost',
FLUXER_SMS_INBOUND_WEBHOOK_PUBLIC_URL: 'http://localhost/webhooks/sms',
FLUXER_AUTH_BLUESKY_CLIENT_URI: 'http://localhost',
FLUXER_AUTH_BLUESKY_TOS_URI: 'http://localhost/terms',
FLUXER_APP_ICON_URL: 'http://localhost/icon.png',
FLUXER_LIVEKIT_INTERNAL_URL: 'http://livekit:7880',
});
const config = await loadConfig();
expect(config.services.gateway.media_proxy_endpoint).toBe('http://localhost:8088/media');
expect(config.s3?.presigned_url_base).toBe('http://localhost:8088/s3');
expect(config.integrations.email.app_base_url).toBe('http://localhost:8088');
expect(config.integrations.sms.inbound_webhook_public_url).toBe('http://localhost:8088/webhooks/sms');
expect(config.auth.bluesky.client_uri).toBe('http://localhost:8088');
expect(config.auth.bluesky.tos_uri).toBe('http://localhost:8088/terms');
expect(config.instance.branding.icon_url).toBe('http://localhost:8088/icon.png');
expect(config.integrations.voice.internal_url).toBe('http://livekit:7880');
});
test('rejects a public port outside the valid range', async () => {
stubMinimalEnv({FLUXER_PUBLIC_PORT: '70000'});
await expect(loadConfig()).rejects.toThrow('FLUXER_PUBLIC_PORT must be an integer between 1 and 65535');
});
});
describe('FLUXER_PUBLIC_ORIGIN', () => {
beforeEach(() => {
resetConfig();
clearFluxerEnv();
});
afterEach(() => {
resetConfig();
vi.unstubAllEnvs();
});
test('a ported origin ports every derived endpoint and every compose override', async () => {
stubMinimalEnv({
FLUXER_BASE_DOMAIN: 'chat.example.com',
FLUXER_PUBLIC_SCHEME: 'https',
FLUXER_PUBLIC_PORT: '',
FLUXER_PUBLIC_ORIGIN: 'https://chat.example.com:29080',
FLUXER_MARKETING_ENDPOINT: 'https://chat.example.com:29080',
FLUXER_MEDIA_ENDPOINT: 'https://chat.example.com:29080/media',
FLUXER_MEDIA_PROXY_UPLOAD_RELAY_ENDPOINT: 'https://chat.example.com:29080/media',
FLUXER_LIVEKIT_URL: 'https://chat.example.com:29080/livekit',
FLUXER_PASSKEY_ADDITIONAL_ALLOWED_ORIGINS: 'https://chat.example.com:29080',
});
const config = await loadConfig();
expect(config.domain.public_port).toBe(29080);
expect(config.domain.public_origin).toBe('https://chat.example.com:29080');
expect(config.endpoints.api_client).toBe('https://chat.example.com:29080/api');
expect(config.endpoints.app).toBe('https://chat.example.com:29080');
expect(config.endpoints.gateway).toBe('wss://chat.example.com:29080/gateway');
expect(config.endpoints.admin).toBe('https://chat.example.com:29080/admin');
expect(config.endpoints.marketing).toBe('https://chat.example.com:29080');
expect(config.endpoints.media).toBe('https://chat.example.com:29080/media');
expect(config.services.media_proxy.upload_relay.endpoint).toBe('https://chat.example.com:29080/media');
expect(config.integrations.voice.url).toBe('https://chat.example.com:29080/livekit');
expect(config.auth.passkeys.additional_allowed_origins).toEqual(['https://chat.example.com:29080']);
});
test('the origin port wins over a FLUXER_PUBLIC_PORT that disagrees', async () => {
stubMinimalEnv({
FLUXER_BASE_DOMAIN: 'chat.example.com',
FLUXER_PUBLIC_SCHEME: 'https',
FLUXER_PUBLIC_PORT: '443',
FLUXER_PUBLIC_ORIGIN: 'https://chat.example.com:29080',
});
const config = await loadConfig();
expect(config.domain.public_port).toBe(29080);
expect(config.endpoints.app).toBe('https://chat.example.com:29080');
expect(config.endpoints.api_client).toBe('https://chat.example.com:29080/api');
expect(config.endpoints.gateway).toBe('wss://chat.example.com:29080/gateway');
expect(config.endpoints.admin).toBe('https://chat.example.com:29080/admin');
});
test('accepts an origin whose port matches FLUXER_PUBLIC_PORT', async () => {
stubMinimalEnv({
FLUXER_BASE_DOMAIN: 'chat.example.com',
FLUXER_PUBLIC_SCHEME: 'https',
FLUXER_PUBLIC_PORT: '29080',
FLUXER_PUBLIC_ORIGIN: 'https://chat.example.com:29080',
});
expect((await loadConfig()).endpoints.gateway).toBe('wss://chat.example.com:29080/gateway');
});
test('normalizes an origin written with an explicit default port', async () => {
stubMinimalEnv({
FLUXER_BASE_DOMAIN: 'chat.example.com',
FLUXER_PUBLIC_SCHEME: 'https',
FLUXER_PUBLIC_PORT: '443',
FLUXER_PUBLIC_ORIGIN: 'https://chat.example.com:443',
FLUXER_ADMIN_ENDPOINT: 'https://chat.example.com/admin',
});
const config = await loadConfig();
expect(config.domain.public_port).toBe(443);
expect(config.domain.public_origin).toBe('https://chat.example.com');
expect(config.endpoints.admin).toBe('https://chat.example.com/admin');
expect(config.endpoints.app).toBe('https://chat.example.com');
expect(config.endpoints.gateway).toBe('wss://chat.example.com/gateway');
});
test('takes the scheme and the domain from the origin when neither is set', async () => {
stubMinimalEnv({
FLUXER_BASE_DOMAIN: '',
FLUXER_PUBLIC_SCHEME: '',
FLUXER_PUBLIC_PORT: '',
FLUXER_PUBLIC_ORIGIN: 'https://chat.example.com:29080',
});
const config = await loadConfig();
expect(config.domain.base_domain).toBe('chat.example.com');
expect(config.domain.public_scheme).toBe('https');
expect(config.domain.public_port).toBe(29080);
});
test('the origin scheme wins over a FLUXER_PUBLIC_SCHEME that disagrees', async () => {
stubMinimalEnv({
FLUXER_BASE_DOMAIN: 'chat.example.com',
FLUXER_PUBLIC_SCHEME: 'http',
FLUXER_PUBLIC_PORT: '',
FLUXER_PUBLIC_ORIGIN: 'https://chat.example.com',
});
const config = await loadConfig();
expect(config.domain.public_scheme).toBe('https');
expect(config.endpoints.app).toBe('https://chat.example.com');
expect(config.endpoints.gateway).toBe('wss://chat.example.com/gateway');
});
test('the origin host wins over a FLUXER_BASE_DOMAIN that disagrees', async () => {
stubMinimalEnv({
FLUXER_BASE_DOMAIN: 'chat.example.com',
FLUXER_PUBLIC_SCHEME: 'https',
FLUXER_PUBLIC_PORT: '',
FLUXER_PUBLIC_ORIGIN: 'https://other.example.com',
});
const config = await loadConfig();
expect(config.domain.base_domain).toBe('other.example.com');
expect(config.endpoints.app).toBe('https://other.example.com');
});
test('refuses to boot on an origin that is not a bare origin', async () => {
stubMinimalEnv({FLUXER_PUBLIC_ORIGIN: 'https://chat.example.com/app'});
await expect(loadConfig()).rejects.toThrow(
'FLUXER_PUBLIC_ORIGIN must be a scheme, host and optional port such as https://chat.example.com:8443, got https://chat.example.com/app',
);
});
test('leaves the derived origin canonical when nothing is set', async () => {
stubMinimalEnv();
expect((await loadConfig()).domain.public_origin).toBe('http://localhost:8088');
});
});
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {readFileSync} from 'node:fs';
import {readdirSync, readFileSync} from 'node:fs';
import path from 'node:path';
import {fileURLToPath} from 'node:url';
import {describe, expect, test} from 'vitest';
@@ -11,9 +11,15 @@ const INTERPOLATION_PATTERN = /\$\{([A-Z][A-Z0-9_]*)[:?}-]/g;
const CADDY_PLACEHOLDER_PATTERN = /\{\$([A-Z][A-Z0-9_]*)[:}]/g;
const DECLARATION_PATTERN = /^#?([A-Z][A-Z0-9_]*)=/gm;
const ACTIVE_DECLARATION_PATTERN = /^([A-Z][A-Z0-9_]*)=/gm;
const LINE_DECLARATION_PATTERN = /^#?([A-Z][A-Z0-9_]*)=(.*)$/u;
const LINE_REFERENCE_PATTERN = /\$\{?([A-Z][A-Z0-9_]*)/gu;
const read = (name: string) => readFileSync(path.join(SELF_HOSTING, name), 'utf8');
const composeFiles = readdirSync(SELF_HOSTING)
.filter((name) => name.endsWith('.yml'))
.sort();
const namesMatching = (source: string, pattern: RegExp) =>
new Set([...source.matchAll(pattern)].map(([, name]) => name));
@@ -23,7 +29,7 @@ const example = read('.env.example');
const declared = new Set([...example.matchAll(DECLARATION_PATTERN)].map(([, name]) => name));
describe('.env.example covers every name the compose files interpolate', () => {
for (const file of ['docker-compose.yml', 'docker-compose.proxy.yml']) {
for (const file of composeFiles) {
test(`every \${NAME} in ${file} has a line in .env.example`, () => {
const missing = [...interpolatedNames(read(file))].filter((name) => !declared.has(name)).sort();
expect(missing).toEqual([]);
@@ -48,4 +54,29 @@ describe('.env.example covers every name the compose files interpolate', () => {
}
expect([...repeated].sort()).toEqual([]);
});
test('every name a .env.example line reads is declared above it', () => {
const lines = example.split('\n');
const declaredAt = new Map<string, number>();
lines.forEach((line, index) => {
const match = LINE_DECLARATION_PATTERN.exec(line);
if (match && !declaredAt.has(match[1])) {
declaredAt.set(match[1], index);
}
});
const unresolved: Array<string> = [];
lines.forEach((line, index) => {
const match = LINE_DECLARATION_PATTERN.exec(line);
if (!match) {
return;
}
for (const [, name] of match[2].matchAll(LINE_REFERENCE_PATTERN)) {
const at = declaredAt.get(name);
if (at === undefined || at > index) {
unresolved.push(`${match[1]} reads ${name}`);
}
}
});
expect(unresolved.sort()).toEqual([]);
});
});
@@ -2,10 +2,12 @@
import {
buildUrl,
canonicalizeDomain,
type DomainConfig,
deriveDomain,
deriveEndpointsFromDomain,
normalizePublicEndpoint,
parsePublicOrigin,
} from '@fluxer/config/src/EndpointDerivation';
import {describe, expect, test} from 'vitest';
@@ -394,3 +396,103 @@ describe('normalizePublicEndpoint', () => {
expect(normalizePublicEndpoint('https://fluxer.dev/media', ' ', 8443)).toBe('https://fluxer.dev/media');
});
});
describe('canonicalizeDomain', () => {
test('lowercases, trims and drops the root dot', () => {
expect(canonicalizeDomain(' CHAT.Example.COM. ')).toBe('chat.example.com');
});
test('leaves an empty value empty', () => {
expect(canonicalizeDomain(' ')).toBe('');
});
});
describe('parsePublicOrigin', () => {
test('reads scheme, host and a non-standard port', () => {
expect(parsePublicOrigin('https://chat.example.com:8443')).toEqual({
public_scheme: 'https',
base_domain: 'chat.example.com',
public_port: 8443,
});
expect(parsePublicOrigin('http://chat.example.com:19080')).toEqual({
public_scheme: 'http',
base_domain: 'chat.example.com',
public_port: 19080,
});
});
test('fills in the standard port for a portless origin', () => {
expect(parsePublicOrigin('https://chat.example.com')).toEqual({
public_scheme: 'https',
base_domain: 'chat.example.com',
public_port: 443,
});
expect(parsePublicOrigin('http://chat.example.com')).toEqual({
public_scheme: 'http',
base_domain: 'chat.example.com',
public_port: 80,
});
});
test('normalizes an explicitly written standard port to the portless form', () => {
const origin = parsePublicOrigin('https://chat.example.com:443');
expect(origin).toEqual({public_scheme: 'https', base_domain: 'chat.example.com', public_port: 443});
expect(buildUrl(origin?.public_scheme ?? 'https', origin?.base_domain ?? '', origin?.public_port)).toBe(
'https://chat.example.com',
);
expect(parsePublicOrigin('http://chat.example.com:80')?.public_port).toBe(80);
});
test('canonicalizes the host', () => {
expect(parsePublicOrigin(' https://CHAT.Example.com.:8443 ')).toEqual({
public_scheme: 'https',
base_domain: 'chat.example.com',
public_port: 8443,
});
});
test('keeps an IPv6 literal bracketed', () => {
expect(parsePublicOrigin('http://[::1]:19080')).toEqual({
public_scheme: 'http',
base_domain: '[::1]',
public_port: 19080,
});
});
test('accepts a bare trailing slash', () => {
expect(parsePublicOrigin('https://chat.example.com:8443/')?.public_port).toBe(8443);
});
test('rejects anything that is not a bare origin', () => {
expect(parsePublicOrigin('')).toBeNull();
expect(parsePublicOrigin(' ')).toBeNull();
expect(parsePublicOrigin('not a url')).toBeNull();
expect(parsePublicOrigin('chat.example.com:8443')).toBeNull();
expect(parsePublicOrigin('wss://chat.example.com')).toBeNull();
expect(parsePublicOrigin('https://chat.example.com/media')).toBeNull();
expect(parsePublicOrigin('https://chat.example.com?a=1')).toBeNull();
expect(parsePublicOrigin('https://chat.example.com#top')).toBeNull();
expect(parsePublicOrigin('https://user:[email protected]')).toBeNull();
});
});
describe('endpoints derived from a public origin', () => {
test('an origin with a non-standard port ports every derived endpoint', () => {
const origin = parsePublicOrigin('https://chat.example.com:29080');
const endpoints = deriveEndpointsFromDomain({
base_domain: origin?.base_domain ?? '',
public_scheme: origin?.public_scheme ?? 'https',
internal_scheme: 'http',
public_port: origin?.public_port,
});
expect(endpoints.api_client).toBe('https://chat.example.com:29080/api');
expect(endpoints.app).toBe('https://chat.example.com:29080');
expect(endpoints.gateway).toBe('wss://chat.example.com:29080/gateway');
expect(endpoints.admin).toBe('https://chat.example.com:29080/admin');
});
test('an origin written with an explicit :443 derives portless endpoints', () => {
const origin = parsePublicOrigin('https://chat.example.com:443');
const endpoints = deriveEndpointsFromDomain({
base_domain: origin?.base_domain ?? '',
public_scheme: origin?.public_scheme ?? 'https',
internal_scheme: 'http',
public_port: origin?.public_port,
});
expect(endpoints.admin).toBe('https://chat.example.com/admin');
expect(endpoints.app).toBe('https://chat.example.com');
expect(endpoints.gateway).toBe('wss://chat.example.com/gateway');
});
});
@@ -0,0 +1,341 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {readFileSync} from 'node:fs';
import path from 'node:path';
import {fileURLToPath} from 'node:url';
import {loadConfig, resetConfig} from '@fluxer/config/src/ConfigLoader';
import {normalizePublicEndpoint} from '@fluxer/config/src/EndpointDerivation';
import type {MasterConfig} from '@fluxer/config/src/MasterConfig';
import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest';
const SELF_HOSTING = path.join(fileURLToPath(new URL('../../../../', import.meta.url)), 'deploy/self-hosting');
const compose = readFileSync(path.join(SELF_HOSTING, 'docker-compose.yml'), 'utf8');
const lines = compose.split('\n');
const DOMAIN = 'chat.example.com';
const PUBLIC_PORT = '19080';
const ORIGIN_PORT = '29080';
const SECRETS: Record<string, string> = {
FLUXER_DOMAIN: DOMAIN,
POSTGRES_PASSWORD: 'postgres-password',
MEILI_MASTER_KEY: 'meili-master-key',
FLUXER_S3_ACCESS_KEY: 's3-access-key',
FLUXER_S3_SECRET_KEY: 's3-secret-key',
LIVEKIT_API_KEY: 'livekit-api-key',
LIVEKIT_API_SECRET: 'livekit-api-secret',
FLUXER_ERLANG_COOKIE: 'erlang-cookie',
FLUXER_SUDO_MODE_SECRET: 'sudo-mode-secret',
FLUXER_CONNECTION_INITIATION_SECRET: 'connection-initiation-secret',
FLUXER_GATEWAY_RPC_AUTH_TOKEN: 'gateway-rpc-auth-token',
FLUXER_MEDIA_PROXY_SECRET_KEY: 'media-proxy-secret-key',
FLUXER_MEDIA_PROXY_UPLOAD_RELAY_SECRET_BASE64: 'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=',
FLUXER_ADMIN_SECRET_KEY_BASE: 'admin-secret-key-base',
FLUXER_ADMIN_OAUTH_CLIENT_SECRET: 'admin-oauth-client-secret',
FLUXER_VAPID_PUBLIC_KEY: 'BB76bTFIuoqmxJtTfZX0yGTn1f_qu9H03B_nkj8OyExJFkN7Y-HBZZzShnHZoEhXKc5ZRy3jFu7OkBbnaQG-4aw',
FLUXER_VAPID_PRIVATE_KEY: 'Xgi-3P8J-I3Q6U1HlCcXMuc_tKLGAM9nIfznX3Hz68o',
};
const PORT_ONLY_ENV: Record<string, string> = {
...SECRETS,
FLUXER_PUBLIC_SCHEME: 'http',
FLUXER_PUBLIC_PORT: PUBLIC_PORT,
};
const DOCUMENTED_RECIPE_ENV: Record<string, string> = {
...PORT_ONLY_ENV,
FLUXER_PUBLIC_ORIGIN: `http://${DOMAIN}:${PUBLIC_PORT}`,
FLUXER_HTTP_PORT: PUBLIC_PORT,
};
const ORIGIN_ONLY_ENV: Record<string, string> = {
...SECRETS,
FLUXER_PUBLIC_ORIGIN: `https://${DOMAIN}:${ORIGIN_PORT}`,
FLUXER_HTTPS_PORT: ORIGIN_PORT,
};
const indentOf = (line: string): number => line.length - line.trimStart().length;
function unquote(value: string): string {
const trimmed = value.trim();
const quote = trimmed.slice(0, 1);
const quoted = (quote === '"' || quote === "'") && trimmed.length > 1 && trimmed.endsWith(quote);
return quoted ? trimmed.slice(1, -1) : trimmed;
}
function anchorStart(anchor: string): number {
const start = lines.findIndex((line) => line.startsWith('x-') && line.endsWith(`&${anchor}`));
if (start === -1) {
throw new Error(`docker-compose.yml has no &${anchor} anchor`);
}
return start;
}
function mapping(start: number, indent: number): Map<string, string> {
const entries = new Map<string, string>();
for (let index = start; index < lines.length; index += 1) {
const line = lines[index];
if (line.trim().length === 0 || line.trimStart().startsWith('#')) {
continue;
}
if (indentOf(line) < indent) {
break;
}
if (indentOf(line) > indent) {
continue;
}
const merge = /^<<: \*([a-z][a-z0-9-]*)$/u.exec(line.trim());
if (merge) {
for (const [key, value] of mapping(anchorStart(merge[1]) + 1, 2)) {
entries.set(key, value);
}
continue;
}
const entry = /^([A-Za-z_][A-Za-z0-9_]*): (.*)$/u.exec(line.trim());
if (entry) {
entries.set(entry[1], unquote(entry[2]));
}
}
return entries;
}
function serviceSection(service: string, key: string): number {
const start = lines.indexOf(` ${service}:`);
if (start === -1) {
throw new Error(`docker-compose.yml has no ${service} service`);
}
for (let index = start + 1; index < lines.length; index += 1) {
const line = lines[index];
if (line.trim().length > 0 && indentOf(line) <= 2) {
break;
}
if (line === ` ${key}:`) {
return index;
}
}
return -1;
}
function serviceList(service: string, key: string): Array<string> {
const start = serviceSection(service, key);
if (start === -1) {
return [];
}
const items: Array<string> = [];
for (let index = start + 1; index < lines.length; index += 1) {
const line = lines[index];
if (line.trim().length === 0) {
continue;
}
if (indentOf(line) <= 4) {
break;
}
const item = /^- (.*)$/u.exec(line.trim());
if (item) {
items.push(unquote(item[1]));
}
}
return items;
}
const SERVICES_WITHOUT_ENDPOINT_REPAIR = new Set(['edge']);
function serviceNames(): Array<string> {
const section = compose.slice(compose.indexOf('\nservices:\n'), compose.indexOf('\nnetworks:\n'));
return [...section.matchAll(/\n {2}([a-z][a-z0-9_-]*):\n/gu)].map(([, name]) => name);
}
function closingBrace(value: string, open: number): number {
let depth = 0;
for (let index = open; index < value.length; index += 1) {
if (value[index] === '{') {
depth += 1;
} else if (value[index] === '}') {
depth -= 1;
if (depth === 0) {
return index;
}
}
}
throw new Error(`unbalanced interpolation in ${value}`);
}
function expand(value: string, env: Record<string, string>): string {
let out = '';
let index = 0;
while (index < value.length) {
const dollar = value.indexOf('$', index);
if (dollar === -1) {
return out + value.slice(index);
}
out += value.slice(index, dollar);
if (value[dollar + 1] !== '{') {
const bare = /^[A-Za-z_][A-Za-z0-9_]*/u.exec(value.slice(dollar + 1));
out += bare ? (env[bare[0]] ?? '') : '$';
index = dollar + 1 + (bare ? bare[0].length : 0);
continue;
}
const close = closingBrace(value, dollar + 1);
const inner = value.slice(dollar + 2, close);
const operator = inner.search(/:[-?+]/u);
const name = operator === -1 ? inner : inner.slice(0, operator);
const fallback = operator === -1 ? '' : inner.slice(operator + 2);
const current = env[name] ?? '';
if (current.length > 0) {
out += inner[operator + 1] === '+' && operator !== -1 ? expand(fallback, env) : current;
} else if (inner[operator + 1] === '-' && operator !== -1) {
out += expand(fallback, env);
} else if (inner[operator + 1] === '?' && operator !== -1) {
throw new Error(`${name} is required: ${fallback}`);
}
index = close + 1;
}
return out;
}
function expandedEnvironment(service: string, env: Record<string, string>): Record<string, string> {
const expanded: Record<string, string> = {};
for (const [key, value] of mapping(serviceSection(service, 'environment') + 1, 6)) {
expanded[key] = expand(value, env);
}
return expanded;
}
function publicUrl(value: string): URL | null {
let parsed: URL;
try {
parsed = new URL(value);
} catch {
return null;
}
return parsed.hostname === DOMAIN ? parsed : null;
}
function publicUrlNames(environment: Record<string, string>): Array<string> {
return Object.keys(environment)
.filter((name) => publicUrl(environment[name]) !== null)
.sort();
}
function repairedPublicUrls(service: string, env: Record<string, string>): Array<[string, string]> {
const environment = expandedEnvironment(service, env);
const publicPort = Number.parseInt(environment.FLUXER_PUBLIC_PORT ?? '', 10);
return publicUrlNames(environment).map((name) => [
`${service}.${name}`,
normalizePublicEndpoint(
environment[name],
environment.FLUXER_BASE_DOMAIN ?? '',
Number.isNaN(publicPort) ? undefined : publicPort,
),
]);
}
function withoutPort(entries: Array<[string, string]>, port: string): Array<string> {
return entries
.filter(([, value]) => publicUrl(value)?.port !== port)
.map(([name, value]) => `${name}=${value}`)
.sort();
}
function publishedPorts(env: Record<string, string>): Array<string> {
return serviceList('edge', 'ports')
.map((mapped) => expand(mapped, env).split(':'))
.map((parts) => parts[parts.length - 2] ?? '');
}
function browserFacingUrls(config: MasterConfig): Array<[string, string]> {
const entries: Array<[string, string]> = [
...Object.entries(config.endpoints),
['integrations.voice.url', config.integrations.voice.url],
['services.media_proxy.upload_relay.endpoint', config.services.media_proxy.upload_relay.endpoint],
...config.auth.passkeys.additional_allowed_origins.map((origin, index): [string, string] => [
`auth.passkeys.additional_allowed_origins.${index}`,
origin,
]),
];
return entries.filter(([, value]) => publicUrl(value) !== null);
}
async function loadApiConfig(env: Record<string, string>): Promise<MasterConfig | Error> {
for (const key of Object.keys(process.env)) {
if (key.startsWith('FLUXER_')) {
vi.stubEnv(key, undefined);
}
}
for (const [key, value] of Object.entries(expandedEnvironment('api', env))) {
if (key.startsWith('FLUXER_')) {
vi.stubEnv(key, value);
}
}
try {
return await loadConfig();
} catch (error) {
return error instanceof Error ? error : new Error(String(error));
}
}
describe('the shipped compose stack expanded on a non-default port', () => {
test('every service handed a public URL is handed the base domain and port that repair it', () => {
const starved = serviceNames()
.filter((service) => !SERVICES_WITHOUT_ENDPOINT_REPAIR.has(service))
.filter((service) => {
const environment = expandedEnvironment(service, PORT_ONLY_ENV);
return (
publicUrlNames(environment).length > 0 && (!environment.FLUXER_BASE_DOMAIN || !environment.FLUXER_PUBLIC_PORT)
);
});
expect(starved).toEqual([]);
});
test('every public URL the stack hands a browser carries the port', () => {
const entries = serviceNames()
.filter((service) => !SERVICES_WITHOUT_ENDPOINT_REPAIR.has(service))
.flatMap((service) => repairedPublicUrls(service, PORT_ONLY_ENV));
expect(withoutPort(entries, PUBLIC_PORT)).toEqual([]);
});
test('the edge listens on its scheme default whatever the public port is', () => {
const environment = expandedEnvironment('edge', PORT_ONLY_ENV);
expect(environment.FLUXER_EDGE_SITE_ADDRESS).toBe(`http://${DOMAIN}`);
expect(publishedPorts(PORT_ONLY_ENV)).not.toContain(PUBLIC_PORT);
});
test('the documented recipe publishes the port every public URL advertises', () => {
expect(publishedPorts(DOCUMENTED_RECIPE_ENV)).toContain(PUBLIC_PORT);
});
});
describe('a public origin carrying a port while FLUXER_PUBLIC_PORT stays standard', () => {
beforeEach(() => {
resetConfig();
});
afterEach(() => {
resetConfig();
vi.unstubAllEnvs();
});
test('the compose overrides all carry the origin port', () => {
const environment = expandedEnvironment('api', ORIGIN_ONLY_ENV);
const entries = publicUrlNames(environment).map((name): [string, string] => [name, environment[name]]);
expect(withoutPort(entries, ORIGIN_PORT)).toEqual([]);
});
test('the loaded config either ports every public URL or refuses the split', async () => {
const loaded = await loadApiConfig(ORIGIN_ONLY_ENV);
if (loaded instanceof Error) {
expect(loaded.message).not.toBe('');
return;
}
expect(withoutPort(browserFacingUrls(loaded), ORIGIN_PORT)).toEqual([]);
});
test('the port-only recipe ports every public URL the loaded config exposes', async () => {
const loaded = await loadApiConfig(PORT_ONLY_ENV);
if (loaded instanceof Error) {
throw loaded;
}
expect(withoutPort(browserFacingUrls(loaded), PUBLIC_PORT)).toEqual([]);
});
});
@@ -14,6 +14,7 @@ interface NamedEnvOverride {
const NAMED_FLUXER_ENV_OVERRIDES: Record<string, NamedEnvOverride> = {
FLUXER_ENV: {path: ['env']},
FLUXER_BASE_DOMAIN: {path: ['domain', 'base_domain']},
FLUXER_PUBLIC_ORIGIN: {path: ['domain', 'public_origin']},
FLUXER_PUBLIC_SCHEME: {path: ['domain', 'public_scheme']},
FLUXER_INTERNAL_SCHEME: {path: ['domain', 'internal_scheme']},
FLUXER_PUBLIC_PORT: {path: ['domain', 'public_port'], parse: parseInteger},
@@ -72,6 +72,7 @@ export const ValidationErrorCodes = {
EMAIL_LENGTH_INVALID: 'EMAIL_LENGTH_INVALID',
EMAIL_MUST_BE_CHANGED_VIA_TOKEN: 'EMAIL_MUST_BE_CHANGED_VIA_TOKEN',
EMAIL_TOKEN_EXPIRED: 'EMAIL_TOKEN_EXPIRED',
EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL: 'EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL',
EMAIL_DOMAIN_NOT_ALLOWED_FOR_SSO: 'EMAIL_DOMAIN_NOT_ALLOWED_FOR_SSO',
EMBED_INDEX_OUT_OF_BOUNDS: 'EMBED_INDEX_OUT_OF_BOUNDS',
EMBED_SPLASH_REQUIRES_FEATURE: 'EMBED_SPLASH_REQUIRES_FEATURE',
@@ -128,6 +128,7 @@ export const ErrorCodeToI18nKey = {
[ValidationErrorCodes.INVALID_BASE64_FORMAT]: 'admin_and_system.invalid_format',
[ValidationErrorCodes.INVALID_EMAIL_FORMAT]: 'email.invalid_format',
[ValidationErrorCodes.INVALID_EMAIL_LOCAL_PART]: 'email.invalid_format',
[ValidationErrorCodes.EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL]: 'email.domain_cannot_receive_mail',
[ValidationErrorCodes.EMAIL_DOMAIN_NOT_ALLOWED_FOR_SSO]: 'auth_and_oauth.email_domain_not_allowed_for_sso',
[APIErrorCodes.INVALID_HANDOFF_CODE]: 'auth_and_oauth.handoff_code_invalid',
[ValidationErrorCodes.INVALID_OR_EXPIRED_AUTHORIZATION_TICKET]:
@@ -254,6 +254,8 @@ export const ERROR_I18N_MESSAGES = {
'donation.magic_link_expired': 'Magic link has expired.',
'donation.magic_link_invalid': 'Magic link is invalid.',
'donation.magic_link_used': 'Magic link has already been used.',
'email.domain_cannot_receive_mail':
'That email domain cannot receive mail. Use an address on a domain that accepts email.',
'email.email_already_in_use': 'Email is already in use.',
'email.email_required': 'Email is required.',
'email.email_service_not_testable': 'Email service is temporarily unavailable. Please try again later.',
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_AR_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "انتهت صلاحية الرابط السحري.",
"donation.magic_link_invalid": "الرابط السحري غير صالح.",
"donation.magic_link_used": "تم استخدام الرابط السحري بالفعل.",
"email.domain_cannot_receive_mail": "لا يمكن لهذا النطاق البريدي استقبال البريد. استخدم عنوانًا على نطاق يقبل البريد الإلكتروني.",
"email.email_already_in_use": "البريد الإلكتروني قيد الاستخدام بالفعل.",
"email.email_required": "البريد الإلكتروني مطلوب.",
"email.email_service_not_testable": "خدمة البريد الإلكتروني غير متاحة مؤقتًا. حاول مجددًا لاحقًا.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_BG_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Магическият линк изтече.",
"donation.magic_link_invalid": "Магическият линк е невалиден.",
"donation.magic_link_used": "Магическият линк вече е използван.",
"email.domain_cannot_receive_mail": "Имейл домейнът не може да получава имейли. Използвайте адрес от домейн, който приема имейли.",
"email.email_already_in_use": "Този имейл вече се използва.",
"email.email_required": "Имейл адресът е задължителен.",
"email.email_service_not_testable": "Имейл услугата е временно недостъпна. Опитай пак по-късно.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_CS_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Magický odkaz vypršel.",
"donation.magic_link_invalid": "Magický odkaz je neplatný.",
"donation.magic_link_used": "Magický odkaz již byl použit.",
"email.domain_cannot_receive_mail": "Tato e-mailová doména nemůže přijímat poštu. Použijte adresu z domény, která přijímá e-maily.",
"email.email_already_in_use": "E-mail se již používá.",
"email.email_required": "E-mail je povinný.",
"email.email_service_not_testable": "E-mailová služba je dočasně nedostupná. Zkuste to prosím později.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_DA_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Magisk link er udløbet.",
"donation.magic_link_invalid": "Magisk link er ugyldigt.",
"donation.magic_link_used": "Magisk link er allerede brugt.",
"email.domain_cannot_receive_mail": "Den e-mailadresse kan ikke modtage post. Brug en adresse på et domæne, der accepterer e-mail.",
"email.email_already_in_use": "E-mailadressen er allerede i brug.",
"email.email_required": "E-mailadresse er nødvendig.",
"email.email_service_not_testable": "E-mailtjenesten er midlertidigt utilgængelig. Prøv igen senere.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_DE_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Dein magischer Link ist abgelaufen.",
"donation.magic_link_invalid": "Dein magischer Link ist ungültig.",
"donation.magic_link_used": "Dein magischer Link wurde bereits verwendet.",
"email.domain_cannot_receive_mail": "Diese E-Mail-Domain kann keine E-Mails empfangen. Verwende eine Adresse mit einer Domain, die E-Mails akzeptiert.",
"email.email_already_in_use": "E-Mail-Adresse ist bereits in Verwendung.",
"email.email_required": "E-Mail-Adresse wird benötigt.",
"email.email_service_not_testable": "Der E-Mail-Dienst ist vorübergehend nicht verfügbar. Versuche es später erneut.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_EL_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Ο μαγικός σύνδεσμος έχει λήξει.",
"donation.magic_link_invalid": "Ο μαγικός σύνδεσμος δεν είναι έγκυρος.",
"donation.magic_link_used": "Ο μαγικός σύνδεσμος έχει ήδη χρησιμοποιηθεί.",
"email.domain_cannot_receive_mail": "Αυτός ο τομέας email δεν μπορεί να λάβει αλληλογραφία. Χρησιμοποιήστε μια διεύθυνση σε έναν τομέα που δέχεται email.",
"email.email_already_in_use": "Αυτό το email χρησιμοποιείται ήδη.",
"email.email_required": "Το email είναι υποχρεωτικό.",
"email.email_service_not_testable": "Η υπηρεσία email είναι προσωρινά μη διαθέσιμη. Δοκίμασε ξανά αργότερα.",
@@ -218,6 +218,7 @@ const ERROR_I18N_EN_GB_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Magic link has expired.",
"donation.magic_link_invalid": "Magic link is invalid.",
"donation.magic_link_used": "Magic link has already been used.",
"email.domain_cannot_receive_mail": "That email domain can't receive mail. Use an address on a domain that accepts email.",
"email.email_already_in_use": "Email is already in use.",
"email.email_required": "Email is required.",
"email.email_service_not_testable": "Email service is temporarily unavailable. Please try again later.",
@@ -218,6 +218,7 @@ const ERROR_I18N_ES_419_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "El enlace mágico ha expirado.",
"donation.magic_link_invalid": "El enlace mágico no es válido.",
"donation.magic_link_used": "El enlace mágico ya ha sido usado.",
"email.domain_cannot_receive_mail": "Ese dominio de correo no puede recibir mensajes. Usa una dirección de un dominio que acepte correos.",
"email.email_already_in_use": "El correo electrónico ya está en uso.",
"email.email_required": "El correo electrónico es obligatorio.",
"email.email_service_not_testable": "El servicio de correo electrónico no está disponible temporalmente. Inténtalo de nuevo más tarde.",
@@ -218,6 +218,7 @@ const ERROR_I18N_ES_ES_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "El enlace mágico ha caducado.",
"donation.magic_link_invalid": "El enlace mágico no es válido.",
"donation.magic_link_used": "El enlace mágico ya se ha utilizado.",
"email.domain_cannot_receive_mail": "Ese dominio de correo electrónico no puede recibir mensajes. Usa una dirección de un dominio que acepte correos.",
"email.email_already_in_use": "El correo electrónico ya está en uso.",
"email.email_required": "Se requiere un correo electrónico.",
"email.email_service_not_testable": "El servicio de correo electrónico no está disponible temporalmente; inténtalo de nuevo más tarde.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_FI_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Taikalinkki on vanhentunut.",
"donation.magic_link_invalid": "Taikalinkki on virheellinen.",
"donation.magic_link_used": "Taikalinkki on jo käytetty.",
"email.domain_cannot_receive_mail": "Sähköpostiverkkotunnus ei voi vastaanottaa postia. Käytä osoitetta verkkotunnuksessa, joka hyväksyy sähköpostia.",
"email.email_already_in_use": "Sähköpostiosoite on jo käytössä.",
"email.email_required": "Sähköpostiosoite vaaditaan.",
"email.email_service_not_testable": "Sähköpostipalvelu on tilapäisesti poissa käytöstä. Yritä uudelleen myöhemmin.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_FR_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Le lien magique a expiré.",
"donation.magic_link_invalid": "Le lien magique est invalide.",
"donation.magic_link_used": "Le lien magique a déjà été utilisé.",
"email.domain_cannot_receive_mail": "Ce domaine d'e-mail ne peut pas recevoir de courrier. Utilisez une adresse sur un domaine qui accepte les e-mails.",
"email.email_already_in_use": "L'adresse e-mail est déjà utilisée.",
"email.email_required": "L'adresse e-mail est obligatoire.",
"email.email_service_not_testable": "Le service de messagerie est temporairement indisponible. Réessaie plus tard.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_HE_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "קישור הקסם פג תוקף.",
"donation.magic_link_invalid": "קישור הקסם שגוי.",
"donation.magic_link_used": "קישור הקסם כבר נוצל.",
"email.domain_cannot_receive_mail": "כתובת הדוא\"ל הזו אינה יכולה לקבל דואר. השתמש בכתובת מתחום שמקבל דואר.",
"email.email_already_in_use": "כתובת האימייל כבר בשימוש.",
"email.email_required": "נדרשת כתובת אימייל.",
"email.email_service_not_testable": "שירות האימייל אינו זמין באופן זמני. נסו שוב מאוחר יותר.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_HI_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "मैजिक लिंक एक्सपायर हो गया है।",
"donation.magic_link_invalid": "मैजिक लिंक इनवैलिड है।",
"donation.magic_link_used": "मैजिक लिंक पहले ही इस्तेमाल किया जा चुका है।",
"email.domain_cannot_receive_mail": "यह ईमेल डोमेन मेल प्राप्त नहीं कर सकता। ऐसा डोमेन चुनें जो ईमेल स्वीकार करता हो।",
"email.email_already_in_use": "ईमेल पहले से इस्तेमाल में है।",
"email.email_required": "ईमेल ज़रूरी है।",
"email.email_service_not_testable": "ईमेल सर्विस अस्थायी रूप से उपलब्ध नहीं है। कृपया बाद में फिर से कोशिश करें।",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_HR_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Poveznica za prijavu je istekla.",
"donation.magic_link_invalid": "Poveznica za prijavu je nevažeća.",
"donation.magic_link_used": "Poveznica za prijavu je već iskorištena.",
"email.domain_cannot_receive_mail": "Ta domena e-pošte ne može primati poštu. Upotrijebite adresu s domene koja prihvaća e-poštu.",
"email.email_already_in_use": "E-mail je već u upotrebi.",
"email.email_required": "E-mail je potreban.",
"email.email_service_not_testable": "E-mail usluga privremeno je nedostupna. Pokušaj ponovno kasnije.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_HU_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "A varázslink lejárt.",
"donation.magic_link_invalid": "A varázslink érvénytelen.",
"donation.magic_link_used": "A varázslinket már felhasználták.",
"email.domain_cannot_receive_mail": "Ez az e-mail domain nem tud e-mailt fogadni. Használj olyan címet, amelynek domainje elfogad e-mailt.",
"email.email_already_in_use": "Az e-mail cím már használatban van.",
"email.email_required": "E-mail cím szükséges.",
"email.email_service_not_testable": "Az e-mail szolgáltatás átmenetileg nem elérhető. Próbáld meg újra később.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_ID_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Tautan ajaib sudah kedaluwarsa.",
"donation.magic_link_invalid": "Tautan ajaib tidak valid.",
"donation.magic_link_used": "Tautan ajaib sudah digunakan.",
"email.domain_cannot_receive_mail": "Domain email tersebut tidak dapat menerima email. Gunakan alamat pada domain yang menerima email.",
"email.email_already_in_use": "Email sudah digunakan.",
"email.email_required": "Email harus diisi.",
"email.email_service_not_testable": "Layanan email sedang tidak tersedia. Coba lagi nanti.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_IT_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Il link magico è scaduto.",
"donation.magic_link_invalid": "Il link magico non è valido.",
"donation.magic_link_used": "Il link magico è già stato usato.",
"email.domain_cannot_receive_mail": "Quell'indirizzo email non può ricevere posta. Usa un indirizzo su un dominio che accetta email.",
"email.email_already_in_use": "L'e-mail è già in uso.",
"email.email_required": "L'e-mail è obbligatoria.",
"email.email_service_not_testable": "Il servizio e-mail è temporaneamente non disponibile. Riprova più tardi.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_JA_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "マジックリンクの有効期限が切れました。",
"donation.magic_link_invalid": "マジックリンクが正しくありません。",
"donation.magic_link_used": "マジックリンクはすでに使用されています。",
"email.domain_cannot_receive_mail": "そのメールアドレスのドメインはメールを受信できません。メールを受け入れられるドメインのメールアドレスを使用してください。",
"email.email_already_in_use": "このメールアドレスはすでに使われています。",
"email.email_required": "メールアドレスは必須です。",
"email.email_service_not_testable": "メールサービスは一時的にご利用いただけません。後でもう一度お試しください。",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_KO_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "매직 링크가 만료되었어요.",
"donation.magic_link_invalid": "매직 링크가 올바르지 않아요.",
"donation.magic_link_used": "매직 링크가 이미 사용되었어요.",
"email.domain_cannot_receive_mail": "해당 이메일 도메인으로는 메일을 받을 수 없습니다. 메일을 수신할 수 있는 도메인의 주소를 사용하세요.",
"email.email_already_in_use": "이미 사용하고 있는 이메일이에요.",
"email.email_required": "이메일은 꼭 필요해요.",
"email.email_service_not_testable": "이메일 서비스를 일시적으로 이용할 수 없어요. 나중에 다시 시도해 주세요.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_LT_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Magiška nuoroda nebegalioja.",
"donation.magic_link_invalid": "Magiška nuoroda netinkama.",
"donation.magic_link_used": "Magiška nuoroda jau panaudota.",
"email.domain_cannot_receive_mail": "Domenas negali gauti el. laiškų. Naudokite el. pašto adresą iš domeno, kuris priima el. laiškus.",
"email.email_already_in_use": "El. paštas jau užregistruotas.",
"email.email_required": "Būtinas el. paštas.",
"email.email_service_not_testable": "El. pašto paslauga laikinai nepasiekiama. Pabandyk dar kartą.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_NL_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Magic link is verlopen.",
"donation.magic_link_invalid": "Magic link is ongeldig.",
"donation.magic_link_used": "Magic link is al gebruikt.",
"email.domain_cannot_receive_mail": "Dat e-maildomein kan geen e-mail ontvangen. Gebruik een adres op een domein dat e-mail accepteert.",
"email.email_already_in_use": "E-mailadres is al in gebruik.",
"email.email_required": "E-mailadres is verplicht.",
"email.email_service_not_testable": "E-mailservice is tijdelijk niet beschikbaar. Probeer het later opnieuw.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_NO_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Den magiske linken har utløpt.",
"donation.magic_link_invalid": "Den magiske linken er ugyldig.",
"donation.magic_link_used": "Den magiske linken er allerede brukt.",
"email.domain_cannot_receive_mail": "Den e-postdomenet kan ikke motta e-post. Bruk en adresse på et domene som godtar e-post.",
"email.email_already_in_use": "E-postadressen er allerede i bruk.",
"email.email_required": "E-postadresse er påkrevd.",
"email.email_service_not_testable": "E-posttjenesten er midlertidig utilgjengelig. Prøv igjen senere.",
+1
View File
@@ -218,6 +218,7 @@ const ERROR_I18N_PL_MESSAGES = defineErrorI18nLocaleMessages({
"donation.magic_link_expired": "Magiczny link wygasł.",
"donation.magic_link_invalid": "Magiczny link jest nieprawidłowy.",
"donation.magic_link_used": "Magiczny link został już użyty.",
"email.domain_cannot_receive_mail": "Ten adres e-mail nie może odbierać wiadomości. Użyj adresu z domeny, która akceptuje pocztę.",
"email.email_already_in_use": "Ten adres e-mail jest już używany.",
"email.email_required": "Adres e-mail jest wymagany.",
"email.email_service_not_testable": "Usługa e-mail jest tymczasowo niedostępna. Spróbuj ponownie później.",

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