mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-09 12:12:25 +09:00
Compare commits
31
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fda41bb57a | ||
|
|
ce08f82a92 | ||
|
|
ef067f36c6 | ||
|
|
fc2b6b5299 | ||
|
|
55846b24ea | ||
|
|
20a15ac11d | ||
|
|
667ac7da8e | ||
|
|
1b81c14c48 | ||
|
|
ceec183d38 | ||
|
|
69ddc07ebb | ||
|
|
2f008b8653 | ||
|
|
3d38d3f694 | ||
|
|
ad86a04e67 | ||
|
|
600c15e17d | ||
|
|
08c9fe9886 | ||
|
|
43924e3ac5 | ||
|
|
824b5c86c9 | ||
|
|
a2a68847fd | ||
|
|
2019909a5e | ||
|
|
d46c8d49c6 | ||
|
|
45530ebbf5 | ||
|
|
9cdad046b1 | ||
|
|
b6c6928073 | ||
|
|
dd1ee999a4 | ||
|
|
c506d6d5e3 | ||
|
|
8a65832a65 | ||
|
|
fd6ae4abd7 | ||
|
|
24b84c419c | ||
|
|
746a75187a | ||
|
|
10ba2ca896 | ||
|
|
977b6767cd |
@@ -36,8 +36,7 @@ body:
|
||||
label: Build information
|
||||
description: >-
|
||||
Open User Settings, scroll to the bottom of the left sidebar, and select
|
||||
the build information. Fluxer copies it to the clipboard. On mobile,
|
||||
select the build information at the bottom of the settings list.
|
||||
the build information. Fluxer copies it to the clipboard.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# yaml-language-server: $schema=https://www.schemastore.org/github-issue-config.json
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Mobile client bugs
|
||||
url: https://github.com/fluxerapp/flutter_client#bug-reporting
|
||||
about: Read the reporting instructions for the Fluxer mobile client.
|
||||
- name: Account and billing support
|
||||
url: https://fluxer.app/help
|
||||
about: Find account help and support contact details.
|
||||
- name: Feature proposals
|
||||
url: https://github.com/orgs/fluxerapp/discussions
|
||||
about: Propose a feature in a discussion.
|
||||
- name: Security vulnerabilities
|
||||
url: https://github.com/fluxerapp/fluxer/security/advisories/new
|
||||
about: Submit a private vulnerability report.
|
||||
- name: Translations
|
||||
url: https://weblate.fluxer.tools
|
||||
about: Improve an existing locale or start a new one.
|
||||
|
||||
@@ -100,6 +100,12 @@ FLUXER_MEDIA_PROXY_UPLOAD_RELAY_SECRET_BASE64=CHANGE_ME
|
||||
FLUXER_ADMIN_SECRET_KEY_BASE=CHANGE_ME
|
||||
FLUXER_ADMIN_OAUTH_CLIENT_SECRET=CHANGE_ME
|
||||
|
||||
# The token every service sends to NATS. The bundled NATS runs without
|
||||
# authentication, so this stays empty unless a Compose override points the stack
|
||||
# at an external NATS that requires a token. Compose forwards the name to every
|
||||
# container that connects.
|
||||
#FLUXER_NATS_AUTH_TOKEN=
|
||||
|
||||
FLUXER_VAPID_PUBLIC_KEY=CHANGE_ME
|
||||
FLUXER_VAPID_PRIVATE_KEY=CHANGE_ME
|
||||
|
||||
@@ -188,7 +194,7 @@ FLUXER_CAPTCHA_TURNSTILE_SITE_KEY=
|
||||
FLUXER_CAPTCHA_TURNSTILE_SECRET_KEY=
|
||||
FLUXER_DISCOVERY_ENABLED=true
|
||||
|
||||
# Container memory. The 25 limits sum to 16.75 GiB, which is a sum of ceilings and
|
||||
# Container memory. The 25 limits sum to 18.25 GiB, which is a sum of ceilings and
|
||||
# not an allocation, so the defaults fit a host with 8 GB and are sized for 16 GB.
|
||||
# The four reservations are cgroup memory.low, which biases the kernel away from
|
||||
# reclaiming from the services whose death takes the whole instance down. They do
|
||||
@@ -199,7 +205,7 @@ FLUXER_DISCOVERY_ENABLED=true
|
||||
#FLUXER_VALKEY_MEMORY_LIMIT=256mb
|
||||
#FLUXER_NATS_MEMORY_LIMIT=256mb
|
||||
#FLUXER_MEILISEARCH_MEMORY_LIMIT=768mb
|
||||
#FLUXER_SEAWEEDFS_MEMORY_LIMIT=512mb
|
||||
#FLUXER_SEAWEEDFS_MEMORY_LIMIT=2gb
|
||||
#FLUXER_SEAWEEDFS_INIT_MEMORY_LIMIT=128mb
|
||||
#FLUXER_LIVEKIT_MEMORY_LIMIT=512mb
|
||||
#FLUXER_API_MEMORY_LIMIT=2560mb
|
||||
@@ -227,6 +233,14 @@ FLUXER_DISCOVERY_ENABLED=true
|
||||
# which is the container ceiling the indexer shares with the search process.
|
||||
#FLUXER_MEILISEARCH_MAX_INDEXING_MEMORY=384mb
|
||||
|
||||
# SeaweedFS heap ceiling. Go collects against this value instead of against the
|
||||
# container limit, which it cannot see, so without it an upload burst grows the
|
||||
# heap past FLUXER_SEAWEEDFS_MEMORY_LIMIT and the kernel OOM-kills the container
|
||||
# mid-upload (exit 137). Keep it near three quarters of that limit, and raise both
|
||||
# together: the peak is the parts of one upload in flight at once, which is 25 MB
|
||||
# times 20 for a 500 MB attachment.
|
||||
#FLUXER_SEAWEEDFS_GOMEMLIMIT=1536MiB
|
||||
|
||||
# Node sizes its own heap from the container memory limit by default, at roughly
|
||||
# 55 percent of it, which always leaves room for the buffers and stacks that live
|
||||
# outside the heap. Leave these unset unless you have a reason to pin the value.
|
||||
|
||||
@@ -13,73 +13,51 @@
|
||||
}
|
||||
|
||||
handle_path /api/* {
|
||||
reverse_proxy api:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy api:8080
|
||||
}
|
||||
|
||||
handle /gateway {
|
||||
rewrite * /
|
||||
reverse_proxy gateway:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy gateway:8080
|
||||
}
|
||||
|
||||
handle_path /gateway/* {
|
||||
reverse_proxy gateway:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy gateway:8080
|
||||
}
|
||||
|
||||
handle_path /media/* {
|
||||
reverse_proxy media-proxy:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy media-proxy:8080
|
||||
}
|
||||
|
||||
handle_path /livekit/* {
|
||||
reverse_proxy livekit:7880 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy livekit:7880
|
||||
}
|
||||
|
||||
handle /admin {
|
||||
rewrite * /
|
||||
reverse_proxy admin:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy admin:8080
|
||||
}
|
||||
|
||||
handle_path /admin/* {
|
||||
reverse_proxy admin:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy admin:8080
|
||||
}
|
||||
|
||||
@staticAssets path /web/* /emoji/* /libs/* /avatars/* /badges/* /desktop/* /embeds/*
|
||||
handle @staticAssets {
|
||||
reverse_proxy static-proxy:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy static-proxy:8080
|
||||
}
|
||||
|
||||
handle /.well-known/fluxer {
|
||||
reverse_proxy api:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy api:8080
|
||||
}
|
||||
|
||||
handle {
|
||||
reverse_proxy app-proxy:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy app-proxy:8080
|
||||
}
|
||||
}
|
||||
|
||||
:8088 {
|
||||
handle /.well-known/fluxer {
|
||||
reverse_proxy api:8080 {
|
||||
header_up X-Forwarded-For {client_ip}
|
||||
}
|
||||
reverse_proxy api:8080
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ x-fluxer-env: &fluxer-env
|
||||
FLUXER_KV_URL: redis://valkey:6379/0
|
||||
FLUXER_NATS_URL: nats://nats:4222
|
||||
FLUXER_NATS_JETSTREAM_URL: nats://nats:4222
|
||||
FLUXER_NATS_AUTH_TOKEN: ${FLUXER_NATS_AUTH_TOKEN:-}
|
||||
FLUXER_SVC_NATS_URL: nats://nats:4222
|
||||
FLUXER_SVC_SHARD_COUNT: "1"
|
||||
|
||||
@@ -258,9 +259,11 @@ services:
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: ${FLUXER_SEAWEEDFS_MEMORY_LIMIT:-512mb}
|
||||
memory: ${FLUXER_SEAWEEDFS_MEMORY_LIMIT:-2gb}
|
||||
restart: unless-stopped
|
||||
networks: [fluxer]
|
||||
environment:
|
||||
GOMEMLIMIT: ${FLUXER_SEAWEEDFS_GOMEMLIMIT:-1536MiB}
|
||||
command: ["server", "-s3", "-dir=/data"]
|
||||
volumes:
|
||||
- seaweedfs-data:/data
|
||||
|
||||
@@ -12287,14 +12287,7 @@
|
||||
"max_concurrent_guild_starts": {"type": "integer", "minimum": 1, "maximum": 10000, "format": "int32"},
|
||||
"gateway_dispatch_relay_shards": {"type": "integer", "minimum": 1, "maximum": 10000, "format": "int32"},
|
||||
"gateway_dispatch_relay_max_queue": {"type": "integer", "minimum": 0, "maximum": 1000000, "format": "int32"},
|
||||
"voice_e2ee_scope": {"enum": ["guild_feature_only", "platform_wide"], "type": "string"},
|
||||
"voice_reconciliation_v3_percentage": {"type": "number", "minimum": 0, "maximum": 100},
|
||||
"voice_reconciliation_v3_interval_ms": {
|
||||
"type": "integer",
|
||||
"minimum": 500,
|
||||
"maximum": 60000,
|
||||
"format": "int32"
|
||||
}
|
||||
"voice_e2ee_scope": {"enum": ["guild_feature_only", "platform_wide"], "type": "string"}
|
||||
}
|
||||
},
|
||||
"InstanceConfigUpdateRequest": {
|
||||
@@ -12534,14 +12527,7 @@
|
||||
"max_concurrent_guild_starts": {"type": "integer", "minimum": 1, "maximum": 10000, "format": "int32"},
|
||||
"gateway_dispatch_relay_shards": {"type": "integer", "minimum": 1, "maximum": 10000, "format": "int32"},
|
||||
"gateway_dispatch_relay_max_queue": {"type": "integer", "minimum": 0, "maximum": 1000000, "format": "int32"},
|
||||
"voice_e2ee_scope": {"enum": ["guild_feature_only", "platform_wide"], "type": "string"},
|
||||
"voice_reconciliation_v3_percentage": {"type": "number", "minimum": 0, "maximum": 100},
|
||||
"voice_reconciliation_v3_interval_ms": {
|
||||
"type": "integer",
|
||||
"minimum": 500,
|
||||
"maximum": 60000,
|
||||
"format": "int32"
|
||||
}
|
||||
"voice_e2ee_scope": {"enum": ["guild_feature_only", "platform_wide"], "type": "string"}
|
||||
}
|
||||
},
|
||||
"BrandingAssetUploadRequest": {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import {getRegionDisplayName} from '@fluxer/geo_utils/src/RegionFormatting';
|
||||
import {getSameIpDecisionKey, isValidIp, normalizeIpString} from '@fluxer/ip_utils/src/IpAddress';
|
||||
import maxmind, {type CityResponse, type Reader} from 'maxmind';
|
||||
import maxmind, {type AsnResponse, type CityResponse, type Reader} from 'maxmind';
|
||||
|
||||
export const UNKNOWN_LOCATION = 'Unknown Location';
|
||||
|
||||
@@ -15,6 +15,15 @@ export interface GeoipResult {
|
||||
countryName: string | null;
|
||||
latitude?: number | null;
|
||||
longitude?: number | null;
|
||||
accuracyRadiusKm?: number | null;
|
||||
timeZone?: string | null;
|
||||
}
|
||||
|
||||
export interface GeoipAsnResult {
|
||||
normalizedIp: string | null;
|
||||
asn: number | null;
|
||||
asnOrg: string | null;
|
||||
available: boolean;
|
||||
}
|
||||
|
||||
type CacheEntry = {
|
||||
@@ -22,12 +31,21 @@ type CacheEntry = {
|
||||
expiresAt: number;
|
||||
};
|
||||
|
||||
type AsnCacheEntry = {
|
||||
result: GeoipAsnResult;
|
||||
expiresAt: number;
|
||||
};
|
||||
|
||||
const CACHE_TTL_MS = 10 * 60 * 1000;
|
||||
const CACHE_MAX_ENTRIES = 10_000;
|
||||
const geoipCache = new Map<string, CacheEntry>();
|
||||
const asnCache = new Map<string, AsnCacheEntry>();
|
||||
|
||||
let maxmindReader: Reader<CityResponse> | null = null;
|
||||
let maxmindReaderPromise: Promise<Reader<CityResponse>> | null = null;
|
||||
let maxmindAsnReader: Reader<AsnResponse> | null = null;
|
||||
let maxmindAsnReaderPromise: Promise<Reader<AsnResponse>> | null = null;
|
||||
let maxmindAsnUnavailable = false;
|
||||
|
||||
function buildFallbackResult(normalizedIp: string): GeoipResult {
|
||||
return {
|
||||
@@ -39,6 +57,17 @@ function buildFallbackResult(normalizedIp: string): GeoipResult {
|
||||
countryName: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
accuracyRadiusKm: null,
|
||||
timeZone: null,
|
||||
};
|
||||
}
|
||||
|
||||
function buildAsnFallbackResult(normalizedIp: string | null): GeoipAsnResult {
|
||||
return {
|
||||
normalizedIp: normalizedIp || null,
|
||||
asn: null,
|
||||
asnOrg: null,
|
||||
available: false,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -59,6 +88,24 @@ async function ensureReader(dbPath: string): Promise<Reader<CityResponse>> {
|
||||
return maxmindReaderPromise;
|
||||
}
|
||||
|
||||
async function ensureAsnReader(dbPath: string): Promise<Reader<AsnResponse>> {
|
||||
if (maxmindAsnReader) return maxmindAsnReader;
|
||||
if (!maxmindAsnReaderPromise) {
|
||||
maxmindAsnReaderPromise = maxmind
|
||||
.open<AsnResponse>(dbPath, {watchForUpdates: true, watchForUpdatesNonPersistent: true})
|
||||
.then((reader) => {
|
||||
maxmindAsnReader = reader;
|
||||
return reader;
|
||||
})
|
||||
.catch((error) => {
|
||||
maxmindAsnReaderPromise = null;
|
||||
maxmindAsnUnavailable = true;
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
return maxmindAsnReaderPromise;
|
||||
}
|
||||
|
||||
function stateLabel(record?: CityResponse): string | null {
|
||||
const subdivision = record?.subdivisions?.[0];
|
||||
if (!subdivision) return null;
|
||||
@@ -112,6 +159,31 @@ function setCachedGeoipResult(cacheKey: string, result: GeoipResult): void {
|
||||
geoipCache.set(cacheKey, {result, expiresAt: Date.now() + CACHE_TTL_MS});
|
||||
}
|
||||
|
||||
function getCachedAsnResult(cacheKey: string, normalizedIp: string): GeoipAsnResult | null {
|
||||
const cached = asnCache.get(cacheKey);
|
||||
if (!cached) {
|
||||
return null;
|
||||
}
|
||||
if (Date.now() >= cached.expiresAt) {
|
||||
asnCache.delete(cacheKey);
|
||||
return null;
|
||||
}
|
||||
asnCache.delete(cacheKey);
|
||||
asnCache.set(cacheKey, cached);
|
||||
return {...cached.result, normalizedIp};
|
||||
}
|
||||
|
||||
function setCachedAsnResult(cacheKey: string, result: GeoipAsnResult): void {
|
||||
asnCache.delete(cacheKey);
|
||||
if (asnCache.size >= CACHE_MAX_ENTRIES) {
|
||||
const oldestKey = asnCache.keys().next().value;
|
||||
if (oldestKey !== undefined) {
|
||||
asnCache.delete(oldestKey);
|
||||
}
|
||||
}
|
||||
asnCache.set(cacheKey, {result, expiresAt: Date.now() + CACHE_TTL_MS});
|
||||
}
|
||||
|
||||
async function lookupMaxmind(clean: string, dbPath: string): Promise<GeoipResult> {
|
||||
try {
|
||||
const reader = await ensureReader(dbPath);
|
||||
@@ -128,12 +200,32 @@ async function lookupMaxmind(clean: string, dbPath: string): Promise<GeoipResult
|
||||
countryName: record.country?.names?.en ?? (countryCode ? countryDisplayName(countryCode) : null) ?? null,
|
||||
latitude: record.location?.latitude ?? null,
|
||||
longitude: record.location?.longitude ?? null,
|
||||
accuracyRadiusKm: record.location?.accuracy_radius ?? null,
|
||||
timeZone: record.location?.time_zone ?? null,
|
||||
};
|
||||
} catch {
|
||||
return buildFallbackResult(clean);
|
||||
}
|
||||
}
|
||||
|
||||
async function lookupMaxmindAsn(clean: string, dbPath: string): Promise<GeoipAsnResult> {
|
||||
try {
|
||||
const reader = await ensureAsnReader(dbPath);
|
||||
const record = reader.get(clean);
|
||||
if (!record) {
|
||||
return {normalizedIp: clean, asn: null, asnOrg: null, available: true};
|
||||
}
|
||||
return {
|
||||
normalizedIp: clean,
|
||||
asn: record.autonomous_system_number ?? null,
|
||||
asnOrg: record.autonomous_system_organization ?? null,
|
||||
available: true,
|
||||
};
|
||||
} catch {
|
||||
return buildAsnFallbackResult(clean);
|
||||
}
|
||||
}
|
||||
|
||||
async function resolveGeoip(clean: string, dbPath: string): Promise<GeoipResult> {
|
||||
const cacheKey = getSameIpDecisionKey(clean) ?? clean;
|
||||
const cached = getCachedGeoipResult(cacheKey, clean);
|
||||
@@ -145,6 +237,17 @@ async function resolveGeoip(clean: string, dbPath: string): Promise<GeoipResult>
|
||||
return result;
|
||||
}
|
||||
|
||||
async function resolveAsn(clean: string, dbPath: string): Promise<GeoipAsnResult> {
|
||||
const cacheKey = getSameIpDecisionKey(clean) ?? clean;
|
||||
const cached = getCachedAsnResult(cacheKey, clean);
|
||||
if (cached) {
|
||||
return cached;
|
||||
}
|
||||
const result = await lookupMaxmindAsn(clean, dbPath);
|
||||
setCachedAsnResult(cacheKey, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function lookupGeoipByIp(ip: string, dbPath: string | undefined): Promise<GeoipResult> {
|
||||
if (!dbPath) {
|
||||
return buildFallbackResult(ip);
|
||||
@@ -156,6 +259,27 @@ export async function lookupGeoipByIp(ip: string, dbPath: string | undefined): P
|
||||
return resolveGeoip(clean, dbPath);
|
||||
}
|
||||
|
||||
export async function lookupAsnByIp(ip: string, asnDbPath: string | undefined): Promise<GeoipAsnResult> {
|
||||
if (!asnDbPath || maxmindAsnUnavailable) {
|
||||
return buildAsnFallbackResult(null);
|
||||
}
|
||||
const clean = normalizeIpString(ip);
|
||||
if (!isValidIp(clean)) {
|
||||
return buildAsnFallbackResult(clean);
|
||||
}
|
||||
return resolveAsn(clean, asnDbPath);
|
||||
}
|
||||
|
||||
export function resetGeoipReadersForTesting(): void {
|
||||
maxmindReader = null;
|
||||
maxmindReaderPromise = null;
|
||||
maxmindAsnReader = null;
|
||||
maxmindAsnReaderPromise = null;
|
||||
maxmindAsnUnavailable = false;
|
||||
geoipCache.clear();
|
||||
asnCache.clear();
|
||||
}
|
||||
|
||||
export function formatGeoipLocation(result: GeoipResult): string | null {
|
||||
const parts: Array<string> = [];
|
||||
if (result.city) parts.push(result.city);
|
||||
|
||||
@@ -12,6 +12,7 @@ const GEOIP_DOWNLOAD_PATH_QUERY_PARAM = 'download_path';
|
||||
const GEOIP_ASN_DOWNLOAD_PATH_QUERY_PARAM = 'asn_download_path';
|
||||
const GEOIP_ASN_KEY_QUERY_PARAM = 'asn_key';
|
||||
const DEFAULT_GEOIP_TEMPORARY_DIRECTORY = '/tmp/fluxer/geoip';
|
||||
const DEFAULT_GEOIP_ASN_DB_BASENAME = 'GeoLite2-ASN.mmdb';
|
||||
|
||||
type GeoipSourceMode = 'filesystem' | 's3';
|
||||
|
||||
@@ -167,9 +168,11 @@ async function downloadS3Object(
|
||||
}
|
||||
|
||||
function createGeoipFilesystemSourceConfig(rawValue: string | undefined): GeoipFilesystemSourceConfig {
|
||||
const maxmindDbPath = rawValue === '' ? undefined : rawValue;
|
||||
return {
|
||||
mode: 'filesystem',
|
||||
maxmindDbPath: rawValue === '' ? undefined : rawValue,
|
||||
maxmindDbPath,
|
||||
maxmindAsnDbPath: maxmindDbPath ? path.join(path.dirname(maxmindDbPath), DEFAULT_GEOIP_ASN_DB_BASENAME) : undefined,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,11 @@ const CACHE_KEY_PREFIX = 'ipinfo:max:';
|
||||
const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/u;
|
||||
const POSITIVE_CACHE_TTL_SECONDS = 7 * 24 * 60 * 60;
|
||||
const NEGATIVE_CACHE_TTL_SECONDS = 14 * 24 * 60 * 60;
|
||||
const FAILURE_TTL_REQUEST_FAILED_SECONDS = 60;
|
||||
const FAILURE_TTL_HTTP_ERROR_SECONDS = 300;
|
||||
const FAILURE_TTL_QUOTA_SECONDS = 900;
|
||||
const FAILURE_TTL_SCHEMA_MISMATCH_SECONDS = 600;
|
||||
const FAILURE_TTL_BACKGROUND_CAP_SECONDS = 120;
|
||||
|
||||
export interface IpInfoGeoBlock {
|
||||
countryCode: string | null;
|
||||
@@ -73,6 +78,41 @@ export interface IpInfoCache {
|
||||
set<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;
|
||||
}
|
||||
|
||||
export type IpInfoLookupPriority = 'critical' | 'standard' | 'background';
|
||||
|
||||
export interface IpInfoLookupBudget {
|
||||
tryConsume(priority: IpInfoLookupPriority): Promise<boolean>;
|
||||
}
|
||||
|
||||
export interface CachedIpInfoFailure extends IpInfoLookupResult {
|
||||
cachedFailure: true;
|
||||
failureOutcome: 'http_error' | 'request_failed' | 'schema_mismatch';
|
||||
failureHttpStatus: number | null;
|
||||
cachedAtMs: number;
|
||||
}
|
||||
|
||||
export function resolveIpInfoLookupPriority(source: string | undefined): IpInfoLookupPriority {
|
||||
if (source === 'admin.ip_ban' || source === 'admin.scheduled_deletion_suspicious_ip') return 'critical';
|
||||
if (source === 'AbusiveIpAutoBanner') return 'background';
|
||||
return 'standard';
|
||||
}
|
||||
|
||||
export function isCachedIpInfoFailure(value: unknown): value is CachedIpInfoFailure {
|
||||
return typeof value === 'object' && value !== null && (value as {available?: unknown}).available === false;
|
||||
}
|
||||
|
||||
function failureCacheTtlSeconds(
|
||||
outcome: CachedIpInfoFailure['failureOutcome'],
|
||||
httpStatus: number | null,
|
||||
priority: IpInfoLookupPriority,
|
||||
): number {
|
||||
let ttl = FAILURE_TTL_HTTP_ERROR_SECONDS;
|
||||
if (outcome === 'request_failed') ttl = FAILURE_TTL_REQUEST_FAILED_SECONDS;
|
||||
else if (outcome === 'schema_mismatch') ttl = FAILURE_TTL_SCHEMA_MISMATCH_SECONDS;
|
||||
else if (httpStatus === 402 || httpStatus === 403 || httpStatus === 429) ttl = FAILURE_TTL_QUOTA_SECONDS;
|
||||
return priority === 'background' ? Math.min(ttl, FAILURE_TTL_BACKGROUND_CAP_SECONDS) : ttl;
|
||||
}
|
||||
|
||||
export interface IpInfoLookupContext {
|
||||
source?: string;
|
||||
reason?: string;
|
||||
@@ -86,7 +126,7 @@ export interface IpInfoRequestAuditEvent {
|
||||
source: string;
|
||||
reason: string | null;
|
||||
metadata?: Record<string, string | number | boolean | null>;
|
||||
outcome: 'http_success' | 'http_error' | 'request_failed' | 'schema_mismatch';
|
||||
outcome: 'http_success' | 'http_error' | 'request_failed' | 'schema_mismatch' | 'budget_shed';
|
||||
httpStatus: number | null;
|
||||
available: boolean;
|
||||
riskNote: string;
|
||||
@@ -110,6 +150,7 @@ interface IpInfoServiceContext {
|
||||
apiKey: string;
|
||||
cache: IpInfoCache;
|
||||
auditLogger?: IpInfoRequestAuditLogger;
|
||||
budget?: IpInfoLookupBudget;
|
||||
}
|
||||
|
||||
export interface IpInfoService {
|
||||
@@ -177,8 +218,12 @@ export function createIpInfoService(ctx: IpInfoServiceContext): IpInfoService {
|
||||
return {
|
||||
async lookup(ip: string, context?: IpInfoLookupContext): Promise<IpInfoLookupResult> {
|
||||
const cacheKey = `${CACHE_KEY_PREFIX}${getSameIpDecisionKey(ip) ?? ip}`;
|
||||
const priority = resolveIpInfoLookupPriority(context?.source);
|
||||
const cached = await ctx.cache.get<IpInfoLookupResult>(cacheKey);
|
||||
if (cached !== null) {
|
||||
if (isCachedIpInfoFailure(cached)) {
|
||||
return unavailable(ip, cached.riskNote);
|
||||
}
|
||||
return {...cached, ip};
|
||||
}
|
||||
const existing = inflight.get(cacheKey);
|
||||
@@ -222,6 +267,30 @@ export function createIpInfoService(ctx: IpInfoServiceContext): IpInfoService {
|
||||
return params.result;
|
||||
};
|
||||
const performLookup = async (): Promise<IpInfoLookupResult> => {
|
||||
if (ctx.budget && !(await ctx.budget.tryConsume(priority))) {
|
||||
return finalize({
|
||||
result: unavailable(ip, `IPInfo lookup shed (budget exhausted, priority: ${priority})`),
|
||||
outcome: 'budget_shed',
|
||||
httpStatus: null,
|
||||
});
|
||||
}
|
||||
const finalizeFailure = async (params: {
|
||||
result: IpInfoLookupResult;
|
||||
outcome: CachedIpInfoFailure['failureOutcome'];
|
||||
httpStatus: number | null;
|
||||
}): Promise<IpInfoLookupResult> => {
|
||||
const entry: CachedIpInfoFailure = {
|
||||
...params.result,
|
||||
cachedFailure: true,
|
||||
failureOutcome: params.outcome,
|
||||
failureHttpStatus: params.httpStatus,
|
||||
cachedAtMs: Date.now(),
|
||||
};
|
||||
await ctx.cache
|
||||
.set(cacheKey, entry, failureCacheTtlSeconds(params.outcome, params.httpStatus, priority))
|
||||
.catch(() => {});
|
||||
return finalize(params);
|
||||
};
|
||||
let payload: unknown;
|
||||
try {
|
||||
const res = await fetch(fetchUrl, {
|
||||
@@ -229,7 +298,7 @@ export function createIpInfoService(ctx: IpInfoServiceContext): IpInfoService {
|
||||
headers: {Accept: 'application/json'},
|
||||
});
|
||||
if (!res.ok) {
|
||||
return finalize({
|
||||
return finalizeFailure({
|
||||
result: unavailable(ip, `IPInfo HTTP ${res.status}`),
|
||||
outcome: 'http_error',
|
||||
httpStatus: res.status,
|
||||
@@ -238,7 +307,7 @@ export function createIpInfoService(ctx: IpInfoServiceContext): IpInfoService {
|
||||
payload = await res.json();
|
||||
} catch (err) {
|
||||
const detail = err instanceof Error ? err.message : String(err);
|
||||
return finalize({
|
||||
return finalizeFailure({
|
||||
result: unavailable(ip, `IPInfo request failed: ${detail}`),
|
||||
outcome: 'request_failed',
|
||||
httpStatus: null,
|
||||
@@ -246,7 +315,7 @@ export function createIpInfoService(ctx: IpInfoServiceContext): IpInfoService {
|
||||
}
|
||||
const parsedResponse = RawIpInfoResponseSchema.safeParse(payload);
|
||||
if (!parsedResponse.success) {
|
||||
return finalize({
|
||||
return finalizeFailure({
|
||||
result: unavailable(ip, formatSchemaMismatch(parsedResponse.error)),
|
||||
outcome: 'schema_mismatch',
|
||||
httpStatus: 200,
|
||||
@@ -261,8 +330,10 @@ export function createIpInfoService(ctx: IpInfoServiceContext): IpInfoService {
|
||||
httpStatus: 200,
|
||||
});
|
||||
};
|
||||
const promise = performLookup().finally(() => {
|
||||
inflight.delete(cacheKey);
|
||||
const promise: Promise<IpInfoLookupResult> = performLookup().finally(() => {
|
||||
if (inflight.get(cacheKey) === promise) {
|
||||
inflight.delete(cacheKey);
|
||||
}
|
||||
});
|
||||
inflight.set(cacheKey, promise);
|
||||
return promise;
|
||||
|
||||
@@ -8,6 +8,7 @@ interface TieredIpInfoCacheOptions {
|
||||
hot: IpInfoCache;
|
||||
cold: IpInfoCache;
|
||||
hotTtlSeconds?: number;
|
||||
skipColdWrite?: (value: unknown) => boolean;
|
||||
}
|
||||
|
||||
export function createTieredIpInfoCache(opts: TieredIpInfoCacheOptions): IpInfoCache {
|
||||
@@ -18,14 +19,17 @@ export function createTieredIpInfoCache(opts: TieredIpInfoCacheOptions): IpInfoC
|
||||
if (hit !== null) return hit;
|
||||
const cold = await opts.cold.get<T>(key).catch(() => null);
|
||||
if (cold === null) return null;
|
||||
if (opts.skipColdWrite?.(cold) === true) return cold;
|
||||
void opts.hot.set(key, cold, hotTtl).catch(() => {});
|
||||
return cold;
|
||||
},
|
||||
async set<T>(key: string, value: T, ttlSeconds?: number): Promise<void> {
|
||||
await Promise.all([
|
||||
opts.hot.set(key, value, hotTtl).catch(() => {}),
|
||||
opts.cold.set(key, value, ttlSeconds).catch(() => {}),
|
||||
]);
|
||||
const effectiveHotTtl = Math.max(1, Math.min(hotTtl, ttlSeconds ?? hotTtl));
|
||||
const writes: Array<Promise<void>> = [opts.hot.set(key, value, effectiveHotTtl).catch(() => {})];
|
||||
if (opts.skipColdWrite?.(value) !== true) {
|
||||
writes.push(opts.cold.set(key, value, ttlSeconds).catch(() => {}));
|
||||
}
|
||||
await Promise.all(writes);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -123,6 +123,7 @@ export function ChannelController(app: HonoApp) {
|
||||
const existing = await ctx.get('channelService').channelData.operations.getChannel({
|
||||
userId: ctx.get('user').id,
|
||||
channelId,
|
||||
skipNsfwValidation: true,
|
||||
});
|
||||
ctx.set('channelUpdateType', existing.type);
|
||||
return undefined;
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
} from '@fluxer/constants/src/LimitConstants';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {CannotSendMessageToNonTextChannelError} from '@fluxer/errors/src/domains/channel/CannotSendMessageToNonTextChannelError';
|
||||
import {UnknownChannelError} from '@fluxer/errors/src/domains/channel/UnknownChannelError';
|
||||
import {UnknownMessageError} from '@fluxer/errors/src/domains/channel/UnknownMessageError';
|
||||
import {FeatureTemporarilyDisabledError} from '@fluxer/errors/src/domains/core/FeatureTemporarilyDisabledError';
|
||||
import {FileSizeTooLargeError} from '@fluxer/errors/src/domains/core/FileSizeTooLargeError';
|
||||
@@ -18,6 +19,7 @@ import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidat
|
||||
import {MissingPermissionsError} from '@fluxer/errors/src/domains/core/MissingPermissionsError';
|
||||
import {UnknownUserError} from '@fluxer/errors/src/domains/user/UnknownUserError';
|
||||
import {ServiceUnavailableError} from '@fluxer/errors/src/HttpErrors';
|
||||
import type {GuildResponse} from '@fluxer/schema/src/domains/guild/GuildResponseSchemas';
|
||||
import type {
|
||||
CompleteMultipartAttachmentUploadItem,
|
||||
CompleteMultipartAttachmentUploadResult,
|
||||
@@ -26,7 +28,9 @@ import type {
|
||||
} from '@fluxer/schema/src/domains/message/AttachmentUploadSchemas';
|
||||
import type {AttachmentID, ChannelID, MessageID, UserID} from '../../BrandedTypes';
|
||||
import {Config} from '../../Config';
|
||||
import {SYSTEM_USER_ID} from '../../constants/Core';
|
||||
import type {IPurgeQueue} from '../../infrastructure/BunnyPurgeQueue';
|
||||
import type {IGatewayService} from '../../infrastructure/IGatewayService';
|
||||
import type {IStorageService} from '../../infrastructure/IStorageService';
|
||||
import type {LimitConfigService} from '../../limits/LimitConfigService';
|
||||
import {resolveLimitSafe} from '../../limits/LimitConfigUtils';
|
||||
@@ -64,6 +68,8 @@ interface DeleteAttachmentParams {
|
||||
requestCache: RequestCache;
|
||||
}
|
||||
|
||||
type UploadActor = 'member' | 'webhook';
|
||||
|
||||
interface UploadFormDataAttachmentsParams {
|
||||
userId: UserID;
|
||||
channelId: ChannelID;
|
||||
@@ -76,6 +82,7 @@ interface UploadFormDataAttachmentsParams {
|
||||
id: number;
|
||||
filename: string;
|
||||
}>;
|
||||
actor?: UploadActor;
|
||||
}
|
||||
|
||||
interface RequestPresignedAttachmentUploadUrlsParams {
|
||||
@@ -104,6 +111,7 @@ export class AttachmentUploadService {
|
||||
private messageInteractionService: MessageInteractionService,
|
||||
private messageService: MessageService,
|
||||
private limitConfigService: LimitConfigService,
|
||||
private gatewayService: IGatewayService,
|
||||
) {}
|
||||
|
||||
async uploadFormDataAttachments({
|
||||
@@ -112,8 +120,9 @@ export class AttachmentUploadService {
|
||||
clientIp,
|
||||
files,
|
||||
attachmentMetadata,
|
||||
actor = 'member',
|
||||
}: UploadFormDataAttachmentsParams): Promise<Array<UploadedAttachment>> {
|
||||
const {maxFileSize} = await this.getUploadPermissionAndLimit({userId, channelId});
|
||||
const {maxFileSize} = await this.getUploadPermissionAndLimit({userId, channelId, actor});
|
||||
assertAttachmentFileSizesWithinLimit(
|
||||
files.map(({file}) => file.size),
|
||||
maxFileSize,
|
||||
@@ -168,7 +177,7 @@ export class AttachmentUploadService {
|
||||
if (!Config.presignedAttachmentUploadsEnabled) {
|
||||
throw new FeatureTemporarilyDisabledError();
|
||||
}
|
||||
const {maxFileSize} = await this.getUploadPermissionAndLimit({userId, channelId});
|
||||
const {maxFileSize} = await this.getUploadPermissionAndLimit({userId, channelId, actor: 'member'});
|
||||
assertAttachmentFileSizesWithinLimit(
|
||||
attachments.map(({file_size}) => file_size),
|
||||
maxFileSize,
|
||||
@@ -275,7 +284,7 @@ export class AttachmentUploadService {
|
||||
if (!Config.presignedAttachmentUploadsEnabled) {
|
||||
throw new FeatureTemporarilyDisabledError();
|
||||
}
|
||||
const {maxFileSize} = await this.getUploadPermissionAndLimit({userId, channelId});
|
||||
const {maxFileSize} = await this.getUploadPermissionAndLimit({userId, channelId, actor: 'member'});
|
||||
const bucket = Config.s3.buckets.uploads;
|
||||
return Promise.all(
|
||||
uploads.map(async ({upload_filename, upload_id}, index) => {
|
||||
@@ -412,21 +421,24 @@ export class AttachmentUploadService {
|
||||
}
|
||||
}
|
||||
|
||||
private async getUploadPermissionAndLimit({userId, channelId}: {userId: UserID; channelId: ChannelID}): Promise<{
|
||||
private async getUploadPermissionAndLimit({
|
||||
userId,
|
||||
channelId,
|
||||
actor,
|
||||
}: {
|
||||
userId: UserID;
|
||||
channelId: ChannelID;
|
||||
actor: UploadActor;
|
||||
}): Promise<{
|
||||
maxFileSize: number;
|
||||
}> {
|
||||
const {channel, guild, checkPermission, member} =
|
||||
await this.messageInteractionService.authService.getChannelAuthenticated({
|
||||
userId,
|
||||
channelId,
|
||||
});
|
||||
const {channel, guild} =
|
||||
actor === 'webhook'
|
||||
? await this.getWebhookUploadChannel(channelId)
|
||||
: await this.getMemberUploadChannel({userId, channelId});
|
||||
if (!TEXT_BASED_CHANNEL_TYPES.has(channel.type)) {
|
||||
throw new CannotSendMessageToNonTextChannelError();
|
||||
}
|
||||
if (guild) {
|
||||
await checkPermission(Permissions.SEND_MESSAGES | Permissions.ATTACH_FILES);
|
||||
assertGuildMemberCanCommunicate(member);
|
||||
}
|
||||
const user = await this.userRepository.findUnique(userId);
|
||||
if (!user) {
|
||||
throw new UnknownUserError();
|
||||
@@ -439,6 +451,41 @@ export class AttachmentUploadService {
|
||||
const maxFileSize = user.isBot ? Math.min(resolvedMaxFileSize, ATTACHMENT_MAX_SIZE_BOT) : resolvedMaxFileSize;
|
||||
return {maxFileSize};
|
||||
}
|
||||
|
||||
private async getMemberUploadChannel({userId, channelId}: {userId: UserID; channelId: ChannelID}): Promise<{
|
||||
channel: Channel;
|
||||
guild: GuildResponse | null;
|
||||
}> {
|
||||
const {channel, guild, checkPermission, member} =
|
||||
await this.messageInteractionService.authService.getChannelAuthenticated({
|
||||
userId,
|
||||
channelId,
|
||||
});
|
||||
if (guild) {
|
||||
await checkPermission(Permissions.SEND_MESSAGES | Permissions.ATTACH_FILES);
|
||||
assertGuildMemberCanCommunicate(member);
|
||||
}
|
||||
return {channel, guild};
|
||||
}
|
||||
|
||||
private async getWebhookUploadChannel(channelId: ChannelID): Promise<{
|
||||
channel: Channel;
|
||||
guild: GuildResponse | null;
|
||||
}> {
|
||||
const channel = await this.channelRepository.channelData.findUnique(channelId);
|
||||
if (!channel) {
|
||||
throw new UnknownChannelError();
|
||||
}
|
||||
if (!channel.guildId) {
|
||||
return {channel, guild: null};
|
||||
}
|
||||
const guild = await this.gatewayService.getGuildData({
|
||||
guildId: channel.guildId,
|
||||
userId: SYSTEM_USER_ID,
|
||||
skipMembershipCheck: true,
|
||||
});
|
||||
return {channel, guild};
|
||||
}
|
||||
}
|
||||
|
||||
async function mapWithConcurrency<T, TResult>(
|
||||
|
||||
@@ -111,7 +111,7 @@ export class ChannelDataService {
|
||||
clientFeatures: ReadonlySet<string>;
|
||||
requestCache: RequestCache;
|
||||
}): Promise<Channel> {
|
||||
const {channel} = await this.auth.getChannelAuthenticated({userId, channelId});
|
||||
const {channel} = await this.auth.getChannelAuthenticated({userId, channelId, skipNsfwValidation: true});
|
||||
if (channel.type === ChannelTypes.GROUP_DM) {
|
||||
return await this.groupDmUpdate.updateGroupDmChannel({
|
||||
userId,
|
||||
|
||||
@@ -162,6 +162,7 @@ export class ChannelService {
|
||||
this.interactions,
|
||||
this.messages,
|
||||
limitConfigService,
|
||||
gatewayService,
|
||||
);
|
||||
this.groupDms = new GroupDmOperationsService(
|
||||
channelRepository,
|
||||
|
||||
@@ -90,8 +90,20 @@ export class ChannelOperationsService {
|
||||
private rateLimitService: IRateLimitService,
|
||||
) {}
|
||||
|
||||
async getChannel({userId, channelId}: {userId: UserID; channelId: ChannelID}): Promise<Channel> {
|
||||
const {channel} = await this.channelAuthService.getChannelAuthenticated({userId, channelId});
|
||||
async getChannel({
|
||||
userId,
|
||||
channelId,
|
||||
skipNsfwValidation,
|
||||
}: {
|
||||
userId: UserID;
|
||||
channelId: ChannelID;
|
||||
skipNsfwValidation?: boolean;
|
||||
}): Promise<Channel> {
|
||||
const {channel} = await this.channelAuthService.getChannelAuthenticated({
|
||||
userId,
|
||||
channelId,
|
||||
skipNsfwValidation,
|
||||
});
|
||||
return channel;
|
||||
}
|
||||
|
||||
@@ -127,6 +139,7 @@ export class ChannelOperationsService {
|
||||
const {channel, guild, checkPermission} = await this.channelAuthService.getChannelAuthenticated({
|
||||
userId,
|
||||
channelId,
|
||||
skipNsfwValidation: true,
|
||||
});
|
||||
if (channel.type === ChannelTypes.GROUP_DM) {
|
||||
throw new InvalidChannelTypeError();
|
||||
@@ -456,7 +469,11 @@ export class ChannelOperationsService {
|
||||
if (this.voiceAvailabilityService === null) {
|
||||
return [];
|
||||
}
|
||||
const {channel, guild} = await this.channelAuthService.getChannelAuthenticated({userId, channelId});
|
||||
const {channel, guild} = await this.channelAuthService.getChannelAuthenticated({
|
||||
userId,
|
||||
channelId,
|
||||
skipNsfwValidation: true,
|
||||
});
|
||||
if (channel.type !== ChannelTypes.GUILD_VOICE) {
|
||||
throw new InvalidChannelTypeError();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {ChannelTypes} from '@fluxer/constants/src/ChannelConstants';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
import {
|
||||
type ChannelID,
|
||||
createChannelID,
|
||||
createMessageID,
|
||||
createUserID,
|
||||
type MessageID,
|
||||
type UserID,
|
||||
} from '../../../BrandedTypes';
|
||||
import type {ChannelRow} from '../../../database/types/ChannelTypes';
|
||||
import type {IGatewayService} from '../../../infrastructure/IGatewayService';
|
||||
import type {UserCacheService} from '../../../infrastructure/UserCacheService';
|
||||
import type {RequestCache} from '../../../middleware/RequestCacheMiddleware';
|
||||
import {Channel} from '../../../models/Channel';
|
||||
import type {IUserRepository} from '../../../user/IUserRepository';
|
||||
import {MessageProcessingService} from './MessageProcessingService';
|
||||
|
||||
const CHANNEL_ID = createChannelID(1532860318772891648n);
|
||||
const AUTHOR_ID = createUserID(1471426754353995881n);
|
||||
const RECIPIENT_ID = createUserID(1485344055661987728n);
|
||||
const MESSAGE_ID = createMessageID(1546325276953149440n);
|
||||
|
||||
function dmChannelRow(lastMessageId: MessageID | null): ChannelRow {
|
||||
return {
|
||||
channel_id: CHANNEL_ID,
|
||||
guild_id: null,
|
||||
type: ChannelTypes.DM,
|
||||
name: null,
|
||||
topic: null,
|
||||
icon_hash: null,
|
||||
url: null,
|
||||
parent_id: null,
|
||||
position: null,
|
||||
owner_id: null,
|
||||
recipient_ids: new Set<UserID>([AUTHOR_ID, RECIPIENT_ID]),
|
||||
nsfw: null,
|
||||
content_warning_level: null,
|
||||
content_warning_text: null,
|
||||
rate_limit_per_user: null,
|
||||
bitrate: null,
|
||||
user_limit: null,
|
||||
voice_connection_limit: null,
|
||||
rtc_region: null,
|
||||
last_message_id: lastMessageId,
|
||||
last_pin_timestamp: null,
|
||||
permission_overwrites: null,
|
||||
nicks: null,
|
||||
soft_deleted: false,
|
||||
indexed_at: null,
|
||||
version: 0,
|
||||
};
|
||||
}
|
||||
|
||||
function buildService(): {service: MessageProcessingService; opened: Array<Channel>} {
|
||||
const opened: Array<Channel> = [];
|
||||
const userRepository = {
|
||||
isDmChannelOpen: async (userId: UserID, _channelId: ChannelID) => userId === AUTHOR_ID,
|
||||
openPrivateChannelForUser: async (_userId: UserID, channel: Channel) => {
|
||||
opened.push(channel);
|
||||
},
|
||||
} as unknown as IUserRepository;
|
||||
const userCacheService = {
|
||||
getUserPartialResponses: async (userIds: Array<UserID>) =>
|
||||
new Map(userIds.map((userId) => [userId, {id: userId.toString()}])),
|
||||
} as unknown as UserCacheService;
|
||||
const gatewayService = {
|
||||
dispatchPresence: async () => {},
|
||||
} as unknown as IGatewayService;
|
||||
const service = new MessageProcessingService(
|
||||
undefined as never,
|
||||
userRepository,
|
||||
userCacheService,
|
||||
gatewayService,
|
||||
undefined as never,
|
||||
undefined as never,
|
||||
);
|
||||
return {service, opened};
|
||||
}
|
||||
|
||||
describe('MessageProcessingService.updateDMRecipients', () => {
|
||||
it('snapshots the new message id when the in-request channel is stale', async () => {
|
||||
const {service, opened} = buildService();
|
||||
await service.updateDMRecipients({
|
||||
channel: new Channel(dmChannelRow(null)),
|
||||
channelId: CHANNEL_ID,
|
||||
messageId: MESSAGE_ID,
|
||||
requestCache: {} as RequestCache,
|
||||
});
|
||||
expect(opened).toHaveLength(1);
|
||||
expect(opened[0].lastMessageId).toBe(MESSAGE_ID);
|
||||
});
|
||||
|
||||
it('keeps a newer last message id already present on the channel', async () => {
|
||||
const {service, opened} = buildService();
|
||||
const newer = createMessageID(MESSAGE_ID + 10n);
|
||||
await service.updateDMRecipients({
|
||||
channel: new Channel(dmChannelRow(newer)),
|
||||
channelId: CHANNEL_ID,
|
||||
messageId: MESSAGE_ID,
|
||||
requestCache: {} as RequestCache,
|
||||
});
|
||||
expect(opened).toHaveLength(1);
|
||||
expect(opened[0].lastMessageId).toBe(newer);
|
||||
});
|
||||
});
|
||||
@@ -9,7 +9,7 @@ import type {GatewayChannelMention, IGatewayService} from '../../../infrastructu
|
||||
import type {UserCacheService} from '../../../infrastructure/UserCacheService';
|
||||
import {Logger} from '../../../Logger';
|
||||
import type {RequestCache} from '../../../middleware/RequestCacheMiddleware';
|
||||
import type {Channel} from '../../../models/Channel';
|
||||
import {Channel} from '../../../models/Channel';
|
||||
import type {Message} from '../../../models/Message';
|
||||
import type {User} from '../../../models/User';
|
||||
import type {ReadStateService} from '../../../read_state/ReadStateService';
|
||||
@@ -33,6 +33,13 @@ interface MentionProcessingResult {
|
||||
mentionChannels: Array<GatewayChannelMention>;
|
||||
}
|
||||
|
||||
function channelWithLastMessageId(channel: Channel, messageId: MessageID): Channel {
|
||||
if (channel.lastMessageId != null && channel.lastMessageId >= messageId) {
|
||||
return channel;
|
||||
}
|
||||
return new Channel({...channel.toRow(), last_message_id: messageId});
|
||||
}
|
||||
|
||||
export class MessageProcessingService {
|
||||
constructor(
|
||||
private channelRepository: IChannelRepositoryAggregate,
|
||||
@@ -64,10 +71,12 @@ export class MessageProcessingService {
|
||||
async updateDMRecipients({
|
||||
channel,
|
||||
channelId,
|
||||
messageId,
|
||||
requestCache,
|
||||
}: {
|
||||
channel: Channel;
|
||||
channelId: ChannelID;
|
||||
messageId: MessageID;
|
||||
requestCache: RequestCache;
|
||||
}): Promise<void> {
|
||||
if (channel.guildId || channel.type !== ChannelTypes.DM) return;
|
||||
@@ -76,11 +85,12 @@ export class MessageProcessingService {
|
||||
const openStates = await this.batchCheckDmChannelOpen(recipientIds, channelId);
|
||||
const closedRecipients = openStates.filter((state) => !state.isOpen);
|
||||
if (closedRecipients.length === 0) return;
|
||||
const snapshotChannel = channelWithLastMessageId(channel, messageId);
|
||||
await Promise.all(
|
||||
closedRecipients.map((state) =>
|
||||
this.openDmAndDispatch({
|
||||
recipientId: state.recipientId,
|
||||
channel,
|
||||
channel: snapshotChannel,
|
||||
requestCache,
|
||||
}),
|
||||
),
|
||||
|
||||
@@ -34,6 +34,7 @@ type AttachmentMetadata = ClientAttachmentRequest | ClientUploadedAttachmentRequ
|
||||
|
||||
interface ParseMultipartMessageDataOptions {
|
||||
onPayloadParsed?: (payload: unknown) => void;
|
||||
actor?: 'member' | 'webhook';
|
||||
}
|
||||
|
||||
export async function parseMultipartMessageData(
|
||||
@@ -158,6 +159,7 @@ export async function parseMultipartMessageData(
|
||||
clientIp,
|
||||
files: filesWithIndices,
|
||||
attachmentMetadata: inlineNewAttachments,
|
||||
actor: options?.actor,
|
||||
});
|
||||
const uploadedMap = new Map(uploadedAttachments.map((attachment) => [attachment.id, attachment]));
|
||||
const processedInlineAttachments = inlineNewAttachments.map((clientData) => {
|
||||
|
||||
@@ -9,7 +9,12 @@ import {
|
||||
SENDABLE_MESSAGE_FLAGS,
|
||||
} from '@fluxer/constants/src/ChannelConstants';
|
||||
import {GuildNSFWLevel, GuildOperations} from '@fluxer/constants/src/GuildConstants';
|
||||
import {RelationshipTypes, SensitiveMediaFilterLevel, UserFlags} from '@fluxer/constants/src/UserConstants';
|
||||
import {
|
||||
DELETED_USER_ID,
|
||||
RelationshipTypes,
|
||||
SensitiveMediaFilterLevel,
|
||||
UserFlags,
|
||||
} from '@fluxer/constants/src/UserConstants';
|
||||
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
|
||||
import {UnknownChannelError} from '@fluxer/errors/src/domains/channel/UnknownChannelError';
|
||||
import {UnknownMessageError} from '@fluxer/errors/src/domains/channel/UnknownMessageError';
|
||||
@@ -211,15 +216,18 @@ export class MessageSendService {
|
||||
return processed.length > 0 ? processed : undefined;
|
||||
}
|
||||
|
||||
private resolveWebhookAttachmentUploadUserId(
|
||||
private async resolveWebhookAttachmentUploadUserId(
|
||||
webhook: Webhook,
|
||||
attachments?: Array<AttachmentRequestData>,
|
||||
): UserID | undefined {
|
||||
const uploadUserId = webhook.creatorId ?? undefined;
|
||||
if (uploadUserId === undefined && this.attachmentsToProcess(attachments) !== undefined) {
|
||||
throw InputValidationError.fromCode('attachments', ValidationErrorCodes.INVALID_MESSAGE_DATA);
|
||||
): Promise<UserID | undefined> {
|
||||
if (this.attachmentsToProcess(attachments) === undefined) {
|
||||
return webhook.creatorId ?? undefined;
|
||||
}
|
||||
return uploadUserId;
|
||||
if (!webhook.creatorId) {
|
||||
return createUserID(DELETED_USER_ID);
|
||||
}
|
||||
const creator = await this.deps.userRepository.findUnique(webhook.creatorId);
|
||||
return creator ? webhook.creatorId : createUserID(DELETED_USER_ID);
|
||||
}
|
||||
|
||||
private getOneToOneDmRecipientId(channel: Channel, senderId: UserID): UserID | null {
|
||||
@@ -980,7 +988,7 @@ export class MessageSendService {
|
||||
await this.settlePostCreateWork(messageId, [
|
||||
{
|
||||
step: 'update_dm_recipients',
|
||||
promise: this.deps.processingService.updateDMRecipients({channel, channelId, requestCache}),
|
||||
promise: this.deps.processingService.updateDMRecipients({channel, channelId, messageId, requestCache}),
|
||||
},
|
||||
{
|
||||
step: 'process_message_after_creation',
|
||||
@@ -1184,7 +1192,7 @@ export class MessageSendService {
|
||||
flags: this.deps.validationService.calculateMessageFlags(data),
|
||||
embeds: data.embeds,
|
||||
attachments: this.attachmentsToProcess(data.attachments),
|
||||
attachmentUploadUserId: this.resolveWebhookAttachmentUploadUserId(webhook, data.attachments),
|
||||
attachmentUploadUserId: await this.resolveWebhookAttachmentUploadUserId(webhook, data.attachments),
|
||||
stickerIds: data.sticker_ids ? data.sticker_ids.flatMap((stickerId) => createStickerID(stickerId)) : undefined,
|
||||
messageReference,
|
||||
messageSnapshots,
|
||||
@@ -1269,7 +1277,7 @@ export class MessageSendService {
|
||||
data,
|
||||
channel,
|
||||
guild,
|
||||
attachmentUploadUserId: this.resolveWebhookAttachmentUploadUserId(webhook, data.attachments),
|
||||
attachmentUploadUserId: await this.resolveWebhookAttachmentUploadUserId(webhook, data.attachments),
|
||||
allowEmbeds: true,
|
||||
});
|
||||
await this.deps.dispatchService.dispatchMessageUpdate({channel, message: updatedMessage, requestCache});
|
||||
|
||||
@@ -46,6 +46,18 @@ describe('Channel Operation Permissions', () => {
|
||||
.expect(HTTP_STATUS.FORBIDDEN)
|
||||
.execute();
|
||||
});
|
||||
it('should let a minor manage a mature channel without reading it', async () => {
|
||||
const owner = await createTestAccount(harness, {dateOfBirth: '2010-01-01'});
|
||||
const guild = await createGuild(harness, owner.token, 'Mature Channel Guild');
|
||||
const systemChannel = await getChannel(harness, owner.token, guild.system_channel_id!);
|
||||
await updateChannel(harness, owner.token, systemChannel.id, {nsfw: true});
|
||||
const renamed = await updateChannel(harness, owner.token, systemChannel.id, {name: 'still-manageable'});
|
||||
expect(renamed.name).toBe('still-manageable');
|
||||
await createBuilder(harness, owner.token)
|
||||
.get(`/channels/${systemChannel.id}/messages`)
|
||||
.expect(HTTP_STATUS.FORBIDDEN)
|
||||
.execute();
|
||||
});
|
||||
it('should reject member from updating channel without MANAGE_CHANNELS', async () => {
|
||||
const owner = await createTestAccount(harness);
|
||||
const member = await createTestAccount(harness);
|
||||
|
||||
@@ -401,7 +401,7 @@ export class GuildDiscoveryService extends IGuildDiscoveryService {
|
||||
const language =
|
||||
params.primaryLanguage && isValidDiscoveryLanguage(params.primaryLanguage) ? params.primaryLanguage : undefined;
|
||||
const tag = params.tag && params.tag.trim().length > 0 ? normalizeDiscoveryTag(params.tag) : undefined;
|
||||
const sortBy = params.sortBy === 'member_count' ? 'memberCount' : 'relevance';
|
||||
const sortBy = params.sortBy === 'relevance' ? 'relevance' : 'memberCount';
|
||||
const filters: GuildSearchFilters = {
|
||||
isDiscoverable: true,
|
||||
discoveryCategory: params.categoryId,
|
||||
@@ -444,7 +444,6 @@ export class GuildDiscoveryService extends IGuildDiscoveryService {
|
||||
for (const guild of guilds) {
|
||||
const counts = freshCounts.get(BigInt(guild.id) as GuildID);
|
||||
if (counts) {
|
||||
guild.member_count = counts.memberCount;
|
||||
guild.online_count = counts.onlineCount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,23 +68,10 @@ export class GuildSearchService {
|
||||
const includeNsfwRequested = searchParams.include_nsfw ?? false;
|
||||
const canUserAccessNsfw =
|
||||
guildIsAgeRestricted || includeNsfwRequested ? await this.getCanUserAccessNsfw(userId) : false;
|
||||
if (guildIsAgeRestricted) {
|
||||
if (!canUserAccessNsfw) {
|
||||
throw new NsfwContentRequiresAgeVerificationError();
|
||||
}
|
||||
if (!includeNsfwRequested) {
|
||||
const hitsPerPage = searchParams.hits_per_page ?? 25;
|
||||
const page = searchParams.page ?? 1;
|
||||
return {
|
||||
channels: [],
|
||||
messages: [],
|
||||
total: 0,
|
||||
hits_per_page: hitsPerPage,
|
||||
page,
|
||||
};
|
||||
}
|
||||
if (guildIsAgeRestricted && !canUserAccessNsfw) {
|
||||
throw new NsfwContentRequiresAgeVerificationError();
|
||||
}
|
||||
const canIncludeNsfw = includeNsfwRequested && canUserAccessNsfw;
|
||||
const canIncludeNsfw = canUserAccessNsfw && (includeNsfwRequested || guildIsAgeRestricted);
|
||||
const guildNsfw = guildData?.nsfw ?? false;
|
||||
const channels = await this.channelRepository.listChannels(channelIds);
|
||||
const channelMap = new Map<string, Channel>();
|
||||
|
||||
@@ -8,13 +8,21 @@ import type {
|
||||
DiscoveryCategoryResponse,
|
||||
DiscoveryGuildListResponse,
|
||||
} from '@fluxer/schema/src/domains/guild/GuildDiscoverySchemas';
|
||||
import type {WorkerTaskHelpers} from '@pkgs/worker/src/contracts/WorkerTask';
|
||||
import {afterEach, beforeEach, describe, expect, test} from 'vitest';
|
||||
import {createTestAccount, setUserACLs} from '../../auth/tests/AuthTestUtils';
|
||||
import type {GuildID} from '../../BrandedTypes';
|
||||
import {createTestBotAccount} from '../../bot/tests/BotTestUtils';
|
||||
import {setInjectedGatewayService} from '../../middleware/ServiceRegistry';
|
||||
import {getGuildRepository} from '../../middleware/ServiceSingletons';
|
||||
import {banUser} from '../../moderation/tests/ModerationTestUtils';
|
||||
import {type ApiTestHarness, createApiTestHarness} from '../../test/ApiTestHarness';
|
||||
import {NoopLogger} from '../../test/mocks/NoopLogger';
|
||||
import {NoopGatewayService} from '../../test/NoopGatewayService';
|
||||
import {HTTP_STATUS, TEST_IDS} from '../../test/TestConstants';
|
||||
import {createBuilder, createBuilderWithoutAuth} from '../../test/TestRequestBuilder';
|
||||
import syncDiscoveryIndex from '../../worker/tasks/SyncDiscoveryIndex';
|
||||
import {clearWorkerDependencies, setWorkerDependenciesForTest} from '../../worker/WorkerContext';
|
||||
import {createGuild, getUserGuilds} from './GuildTestUtils';
|
||||
|
||||
async function setGuildMemberCount(harness: ApiTestHarness, guildId: string, memberCount: number): Promise<void> {
|
||||
@@ -24,6 +32,30 @@ async function setGuildMemberCount(harness: ApiTestHarness, guildId: string, mem
|
||||
.execute();
|
||||
}
|
||||
|
||||
interface LiveGuildCounts {
|
||||
memberCount: number;
|
||||
onlineCount: number;
|
||||
}
|
||||
|
||||
const WORKER_HELPERS = {logger: new NoopLogger()} as unknown as WorkerTaskHelpers;
|
||||
|
||||
class LiveCountsGatewayService extends NoopGatewayService {
|
||||
constructor(private readonly liveCounts: Map<string, LiveGuildCounts>) {
|
||||
super();
|
||||
}
|
||||
|
||||
override async getDiscoveryGuildCounts(guildIds: Array<GuildID>): Promise<Map<GuildID, LiveGuildCounts>> {
|
||||
const counts = new Map<GuildID, LiveGuildCounts>();
|
||||
for (const guildId of guildIds) {
|
||||
const live = this.liveCounts.get(guildId.toString());
|
||||
if (live) {
|
||||
counts.set(guildId, live);
|
||||
}
|
||||
}
|
||||
return counts;
|
||||
}
|
||||
}
|
||||
|
||||
async function applyAndApprove(
|
||||
harness: ApiTestHarness,
|
||||
ownerToken: string,
|
||||
@@ -44,12 +76,39 @@ async function applyAndApprove(
|
||||
.execute();
|
||||
}
|
||||
|
||||
async function createApprovedDiscoveryGuild(
|
||||
harness: ApiTestHarness,
|
||||
adminToken: string,
|
||||
name: string,
|
||||
memberCount: number,
|
||||
): Promise<string> {
|
||||
const owner = await createTestAccount(harness);
|
||||
const guild = await createGuild(harness, owner.token, name);
|
||||
await setGuildMemberCount(harness, guild.id, memberCount);
|
||||
await applyAndApprove(
|
||||
harness,
|
||||
owner.token,
|
||||
adminToken,
|
||||
guild.id,
|
||||
`${name} welcomes everyone`,
|
||||
DiscoveryCategories.GAMING,
|
||||
);
|
||||
return guild.id;
|
||||
}
|
||||
|
||||
function expectNonIncreasing(counts: Array<number>): void {
|
||||
for (let index = 1; index < counts.length; index++) {
|
||||
expect(counts[index]).toBeLessThanOrEqual(counts[index - 1]);
|
||||
}
|
||||
}
|
||||
|
||||
describe('Discovery Search and Join', () => {
|
||||
let harness: ApiTestHarness;
|
||||
beforeEach(async () => {
|
||||
harness = await createApiTestHarness({search: 'enabled'});
|
||||
});
|
||||
afterEach(async () => {
|
||||
clearWorkerDependencies();
|
||||
await harness?.shutdown();
|
||||
});
|
||||
describe('categories', () => {
|
||||
@@ -257,6 +316,82 @@ describe('Discovery Search and Join', () => {
|
||||
.execute();
|
||||
expect(results.guilds.length).toBeLessThanOrEqual(2);
|
||||
});
|
||||
test('should order results by the member count it reports back', async () => {
|
||||
const liveCounts = new Map<string, LiveGuildCounts>();
|
||||
setInjectedGatewayService(new LiveCountsGatewayService(liveCounts));
|
||||
const admin = await createTestAccount(harness);
|
||||
await setUserACLs(harness, admin, ['admin:authenticate', 'discovery:review']);
|
||||
const guildIds: Array<string> = [];
|
||||
for (const memberCount of [50, 40, 30, 20, 10]) {
|
||||
guildIds.push(
|
||||
await createApprovedDiscoveryGuild(harness, admin.token, `Ordered Guild ${memberCount}`, memberCount),
|
||||
);
|
||||
}
|
||||
liveCounts.set(guildIds[0], {memberCount: 5, onlineCount: 3});
|
||||
liveCounts.set(guildIds[4], {memberCount: 500, onlineCount: 7});
|
||||
const searcher = await createTestAccount(harness);
|
||||
const results = await createBuilder<DiscoveryGuildListResponse>(harness, searcher.token)
|
||||
.get('/discovery/guilds?sort_by=member_count&limit=48')
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.execute();
|
||||
expect(results.guilds.map((guild) => guild.id)).toEqual(guildIds);
|
||||
expectNonIncreasing(results.guilds.map((guild) => guild.member_count));
|
||||
expect(results.guilds[0].online_count).toBe(3);
|
||||
expect(results.guilds[4].online_count).toBe(7);
|
||||
});
|
||||
test('should rank by member count when the client omits sort_by', async () => {
|
||||
const admin = await createTestAccount(harness);
|
||||
await setUserACLs(harness, admin, ['admin:authenticate', 'discovery:review']);
|
||||
const guildsByCount = new Map<number, string>();
|
||||
for (const memberCount of [30, 10, 20]) {
|
||||
guildsByCount.set(
|
||||
memberCount,
|
||||
await createApprovedDiscoveryGuild(harness, admin.token, `Unsorted Guild ${memberCount}`, memberCount),
|
||||
);
|
||||
}
|
||||
const searcher = await createTestAccount(harness);
|
||||
const results = await createBuilder<DiscoveryGuildListResponse>(harness, searcher.token)
|
||||
.get('/discovery/guilds?limit=48')
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.execute();
|
||||
expect(results.guilds.map((guild) => guild.id)).toEqual([
|
||||
guildsByCount.get(30),
|
||||
guildsByCount.get(20),
|
||||
guildsByCount.get(10),
|
||||
]);
|
||||
expectNonIncreasing(results.guilds.map((guild) => guild.member_count));
|
||||
});
|
||||
test('should not repeat guilds across pages when the discovery index is resynced', async () => {
|
||||
const liveCounts = new Map<string, LiveGuildCounts>();
|
||||
const gatewayService = new LiveCountsGatewayService(liveCounts);
|
||||
setInjectedGatewayService(gatewayService);
|
||||
const admin = await createTestAccount(harness);
|
||||
await setUserACLs(harness, admin, ['admin:authenticate', 'discovery:review']);
|
||||
const guildIds: Array<string> = [];
|
||||
for (const [index, memberCount] of [60, 50, 40, 40, 30, 30].entries()) {
|
||||
guildIds.push(await createApprovedDiscoveryGuild(harness, admin.token, `Paged Guild ${index}`, memberCount));
|
||||
}
|
||||
const searcher = await createTestAccount(harness);
|
||||
const firstPage = await createBuilder<DiscoveryGuildListResponse>(harness, searcher.token)
|
||||
.get('/discovery/guilds?sort_by=member_count&limit=2&offset=0')
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.execute();
|
||||
expect(firstPage.guilds.map((guild) => guild.id)).toEqual([guildIds[0], guildIds[1]]);
|
||||
liveCounts.set(guildIds[0], {memberCount: 5, onlineCount: 0});
|
||||
setWorkerDependenciesForTest({guildRepository: getGuildRepository(), gatewayService});
|
||||
await syncDiscoveryIndex({}, WORKER_HELPERS);
|
||||
const secondPage = await createBuilder<DiscoveryGuildListResponse>(harness, searcher.token)
|
||||
.get('/discovery/guilds?sort_by=member_count&limit=2&offset=2')
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.execute();
|
||||
const thirdPage = await createBuilder<DiscoveryGuildListResponse>(harness, searcher.token)
|
||||
.get('/discovery/guilds?sort_by=member_count&limit=2&offset=4')
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.execute();
|
||||
const paged = [...firstPage.guilds, ...secondPage.guilds, ...thirdPage.guilds].map((guild) => guild.id);
|
||||
expect(new Set(paged).size).toBe(paged.length);
|
||||
expect([...paged].sort()).toEqual([...guildIds].sort());
|
||||
});
|
||||
test('should require login to search', async () => {
|
||||
await createBuilderWithoutAuth(harness).get('/discovery/guilds').expect(HTTP_STATUS.UNAUTHORIZED).execute();
|
||||
});
|
||||
|
||||
@@ -324,9 +324,6 @@ export class LiveKitService extends ILiveKitService {
|
||||
participants: participants.map((participant) => ({identity: participant.identity})),
|
||||
};
|
||||
} catch (error) {
|
||||
if (LiveKitService.isHttp404(error)) {
|
||||
return {status: 'ok', participants: []};
|
||||
}
|
||||
Logger.warn({error, regionId, serverId, roomName}, 'LiveKit listParticipants failed');
|
||||
const status = LiveKitService.getHttpStatus(error);
|
||||
const isRetryable = status != null && status >= 500;
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
import {AccessToken, TrackSource} from 'livekit-server-sdk';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
import {computeLiveKitPublishSources, VOICE_TOKEN_TTL_SECONDS} from '../LiveKitService';
|
||||
import {createChannelID, createGuildID} from '../../BrandedTypes';
|
||||
import {computeLiveKitPublishSources, LiveKitService, VOICE_TOKEN_TTL_SECONDS} from '../LiveKitService';
|
||||
|
||||
function decodeJwtPayload(token: string): Record<string, unknown> {
|
||||
const [, payload] = token.split('.');
|
||||
@@ -57,3 +58,78 @@ describe('LiveKitService publish permissions', () => {
|
||||
expect(exp - nowSeconds).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
class FakeTwirpError extends Error {
|
||||
status: number;
|
||||
code?: string;
|
||||
constructor(message: string, status: number, code?: string) {
|
||||
super(message);
|
||||
this.name = 'TwirpError';
|
||||
this.status = status;
|
||||
this.code = code;
|
||||
}
|
||||
}
|
||||
|
||||
function createServiceWithRoomServiceClient(roomServiceClient: unknown): LiveKitService {
|
||||
const service = Object.create(LiveKitService.prototype) as LiveKitService;
|
||||
Reflect.set(
|
||||
service,
|
||||
'serverClients',
|
||||
new Map([
|
||||
[
|
||||
'region-1',
|
||||
new Map([
|
||||
[
|
||||
'region-1-server-1',
|
||||
{
|
||||
endpoint: 'ws://livekit.test/livekit',
|
||||
apiKey: 'test-key',
|
||||
apiSecret: 'test-secret',
|
||||
isActive: true,
|
||||
roomServiceClient,
|
||||
},
|
||||
],
|
||||
]),
|
||||
],
|
||||
]),
|
||||
);
|
||||
return service;
|
||||
}
|
||||
|
||||
describe('LiveKitService listParticipants', () => {
|
||||
const params = {
|
||||
guildId: createGuildID(1n),
|
||||
channelId: createChannelID(2n),
|
||||
regionId: 'region-1',
|
||||
serverId: 'region-1-server-1',
|
||||
};
|
||||
|
||||
it('reports a 404 as an unreadable room instead of an empty one', async () => {
|
||||
const service = createServiceWithRoomServiceClient({
|
||||
listParticipants: async () => {
|
||||
throw new FakeTwirpError('not_found', 404, 'not_found');
|
||||
},
|
||||
});
|
||||
const result = await service.listParticipants(params);
|
||||
expect(result.status).toBe('error');
|
||||
});
|
||||
|
||||
it('reports a bad_route 404 as an unreadable room instead of an empty one', async () => {
|
||||
const service = createServiceWithRoomServiceClient({
|
||||
listParticipants: async () => {
|
||||
throw new FakeTwirpError('invalid path prefix', 404, 'bad_route');
|
||||
},
|
||||
});
|
||||
const result = await service.listParticipants(params);
|
||||
expect(result.status).toBe('error');
|
||||
expect(result.status === 'error' && result.retryable).toBe(false);
|
||||
});
|
||||
|
||||
it('still reports a genuinely empty room as empty', async () => {
|
||||
const service = createServiceWithRoomServiceClient({
|
||||
listParticipants: async () => [],
|
||||
});
|
||||
const result = await service.listParticipants(params);
|
||||
expect(result).toEqual({status: 'ok', participants: []});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {Config} from '../Config';
|
||||
|
||||
let cachedCollectDateOfBirth: boolean | null = null;
|
||||
|
||||
export function getDefaultDateOfBirthCollection(): boolean {
|
||||
return !Config.instance.selfHosted;
|
||||
}
|
||||
|
||||
export function instanceCollectsDateOfBirth(): boolean {
|
||||
return cachedCollectDateOfBirth ?? getDefaultDateOfBirthCollection();
|
||||
}
|
||||
|
||||
export function setCachedDateOfBirthCollection(collect: boolean): void {
|
||||
cachedCollectDateOfBirth = collect;
|
||||
}
|
||||
@@ -63,8 +63,6 @@ describe('GatewayRolloutConfigPublisher', () => {
|
||||
gateway_dispatch_relay_shards: 32,
|
||||
gateway_dispatch_relay_max_queue: 50000,
|
||||
voice_e2ee_scope: 'guild_feature_only',
|
||||
voice_reconciliation_v3_percentage: 100,
|
||||
voice_reconciliation_v3_interval_ms: 2000,
|
||||
};
|
||||
|
||||
await publisher.publish(config);
|
||||
|
||||
@@ -17,6 +17,7 @@ import {resolveDeferredPhoneGateEnabled, setCachedDeferredPhoneGateEnabled} from
|
||||
import {InstanceConfiguration} from '../Tables';
|
||||
import {DEFAULT_DECAY_CONSTANTS, DEFAULT_RENEWAL_CONSTANTS} from '../utils/AttachmentDecay';
|
||||
import {isJsonRecord, parseJsonArray, parseJsonRecord} from '../utils/JsonBoundaryUtils';
|
||||
import {getDefaultDateOfBirthCollection, setCachedDateOfBirthCollection} from './DateOfBirthCollectionCache';
|
||||
import {normalizeSsoAllowedEmailDomains} from './SsoConfigValidation';
|
||||
|
||||
const GATEWAY_ROLLOUT_CONFIG_KEY = 'gateway_rollout_config';
|
||||
@@ -41,8 +42,6 @@ const DEFAULT_GATEWAY_ROLLOUT_CONFIG: GatewayRolloutConfig = {
|
||||
gateway_dispatch_relay_shards: 32,
|
||||
gateway_dispatch_relay_max_queue: 50000,
|
||||
voice_e2ee_scope: 'guild_feature_only',
|
||||
voice_reconciliation_v3_percentage: 100,
|
||||
voice_reconciliation_v3_interval_ms: 2000,
|
||||
};
|
||||
export type InstanceRegistrationMode = 'open' | 'approval' | 'closed';
|
||||
export interface InstanceRegistrationConfig {
|
||||
@@ -357,11 +356,21 @@ function getDefaultAppPublicConfig(): InstanceAppPublicConfig {
|
||||
privacy_url: null,
|
||||
},
|
||||
registration: {
|
||||
collect_date_of_birth: !Config.instance.selfHosted,
|
||||
collect_date_of_birth: getDefaultDateOfBirthCollection(),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function parseAppPublicConfig(raw: string): InstanceAppPublicConfig {
|
||||
try {
|
||||
const parsed: unknown = JSON.parse(raw);
|
||||
return normalizeAppPublicConfig(parsed);
|
||||
} catch (error) {
|
||||
Logger.warn({error}, 'Invalid app public config JSON, returning defaults');
|
||||
return getDefaultAppPublicConfig();
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeAppPublicConfig(value: unknown): InstanceAppPublicConfig {
|
||||
const defaults = getDefaultAppPublicConfig();
|
||||
if (!isJsonRecord(value)) {
|
||||
@@ -939,6 +948,7 @@ export class InstanceConfigRepository {
|
||||
this.configCache = await this.fetchAllConfigsFromDatabase();
|
||||
} while (this.refreshRequested);
|
||||
this.syncDeferredPhoneGateCache(this.configCache.get(INSTANCE_POLICY_CONFIG_KEY) ?? null);
|
||||
this.syncDateOfBirthCollectionCache(this.configCache.get(APP_PUBLIC_CONFIG_KEY) ?? null);
|
||||
})().finally(() => {
|
||||
this.refreshPromise = null;
|
||||
});
|
||||
@@ -950,6 +960,11 @@ export class InstanceConfigRepository {
|
||||
setCachedDeferredPhoneGateEnabled(resolveDeferredPhoneGateEnabled(policy));
|
||||
}
|
||||
|
||||
private syncDateOfBirthCollectionCache(raw: string | null): void {
|
||||
const appPublic = raw ? normalizeAppPublicConfig(parseJsonRecord(raw)) : getDefaultAppPublicConfig();
|
||||
setCachedDateOfBirthCollection(appPublic.registration.collect_date_of_birth);
|
||||
}
|
||||
|
||||
private updateCachedConfigs(entries: Array<[string, string]>): void {
|
||||
if (!this.configCache) {
|
||||
return;
|
||||
@@ -1067,16 +1082,9 @@ export class InstanceConfigRepository {
|
||||
|
||||
async getAppPublicConfig(): Promise<InstanceAppPublicConfig> {
|
||||
const raw = await this.getConfig(APP_PUBLIC_CONFIG_KEY);
|
||||
if (!raw) {
|
||||
return getDefaultAppPublicConfig();
|
||||
}
|
||||
try {
|
||||
const parsed: unknown = JSON.parse(raw);
|
||||
return normalizeAppPublicConfig(parsed);
|
||||
} catch (error) {
|
||||
Logger.warn({error}, 'Invalid app public config JSON, returning defaults');
|
||||
return getDefaultAppPublicConfig();
|
||||
}
|
||||
const config = raw ? parseAppPublicConfig(raw) : getDefaultAppPublicConfig();
|
||||
setCachedDateOfBirthCollection(config.registration.collect_date_of_birth);
|
||||
return config;
|
||||
}
|
||||
|
||||
async setAppPublicConfig(config: {
|
||||
@@ -1105,6 +1113,7 @@ export class InstanceConfigRepository {
|
||||
},
|
||||
});
|
||||
await this.setConfig(APP_PUBLIC_CONFIG_KEY, JSON.stringify(next));
|
||||
setCachedDateOfBirthCollection(next.registration.collect_date_of_birth);
|
||||
return next;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import type {HonoEnv} from '../types/HonoEnv';
|
||||
import {parseJsonRecord} from '../utils/JsonBoundaryUtils';
|
||||
import {ipBanCache} from './IpBanMiddleware';
|
||||
import {getIpInfoService} from './ServiceMiddleware';
|
||||
import {getKVClient} from './ServiceRegistry';
|
||||
import {getCacheService} from './ServiceSingletons';
|
||||
|
||||
type IpClass = 'datacenter' | 'anonymous' | 'mobile' | 'residential' | 'unknown';
|
||||
@@ -51,6 +52,22 @@ interface AbuseSignalOptions {
|
||||
weight?: number;
|
||||
}
|
||||
|
||||
interface PeerIpClassHint {
|
||||
ipClass: IpClass;
|
||||
expiresAtMs: number;
|
||||
}
|
||||
|
||||
interface OutboundIpClass {
|
||||
lookupIp: string;
|
||||
ipClass: IpClass;
|
||||
}
|
||||
|
||||
interface ResolvedBanClass {
|
||||
ipClass: IpClass;
|
||||
authoritative: boolean;
|
||||
blocked: boolean;
|
||||
}
|
||||
|
||||
const WINDOW_MS = positiveNumberFromEnv('FLUXER_ABUSE_WINDOW_MS', 60_000);
|
||||
const THRESHOLD_DATACENTER = positiveNumberFromEnv('FLUXER_ABUSE_THRESHOLD_DATACENTER', 20);
|
||||
const THRESHOLD_ANONYMOUS = positiveNumberFromEnv('FLUXER_ABUSE_THRESHOLD_ANONYMOUS', 500);
|
||||
@@ -73,6 +90,14 @@ const REQUIRED_SCORE_WINDOWS_FOR_AUTO_BAN = positiveNumberFromEnv(
|
||||
3,
|
||||
);
|
||||
const REPLICATION_CHANNEL = 'abuse_tracker:ticks';
|
||||
const IP_CLASS_CHANNEL = 'abuse_tracker:ipclass';
|
||||
const IP_CLASS_CLAIM_PREFIX = 'abuse:ipclass:claim:';
|
||||
const IP_CLASS_CLAIM_ENABLED = process.env.FLUXER_ABUSE_IP_CLASS_CLAIM_ENABLED !== '0';
|
||||
const IP_CLASS_CLAIM_TTL_SECONDS = positiveNumberFromEnv('FLUXER_ABUSE_IP_CLASS_CLAIM_TTL_SEC', 15);
|
||||
const DEFAULT_IP_CLASS_PENDING_TTL_MS = positiveNumberFromEnv('FLUXER_ABUSE_IP_CLASS_PENDING_TTL_MS', 20_000);
|
||||
const DEFAULT_IP_CLASS_NEGATIVE_TTL_MS = positiveNumberFromEnv('FLUXER_ABUSE_IP_CLASS_NEGATIVE_TTL_MS', 300_000);
|
||||
const DEFAULT_IP_CLASS_HINT_TTL_MS = positiveNumberFromEnv('FLUXER_ABUSE_IP_CLASS_HINT_TTL_MS', 600_000);
|
||||
const IP_CLASSES = ['datacenter', 'anonymous', 'mobile', 'residential', 'unknown'] as const;
|
||||
const POD_ID = process.env.HOSTNAME ?? randomUUID();
|
||||
|
||||
type ReplicatedTick = [banKey: string, scoreDelta: number, tokenHashes: Array<string>, lookupIp: string];
|
||||
@@ -83,11 +108,23 @@ interface ReplicationMessage {
|
||||
ts: number;
|
||||
}
|
||||
|
||||
type IpClassEntry = [banKey: string, lookupIp: string, ipClass: IpClass];
|
||||
|
||||
interface IpClassMessage {
|
||||
sender: string;
|
||||
entries: Array<IpClassEntry>;
|
||||
ts: number;
|
||||
}
|
||||
|
||||
const records = new Map<string, AbuseRecord>();
|
||||
const outboundDeltas = new Map<string, OutboundEntry>();
|
||||
const persistentScoreWindows = new Map<string, PersistentScoreState>();
|
||||
const ipClassCache = new Map<string, IpClass>();
|
||||
const ipClassPending = new Set<string>();
|
||||
const ipClassPending = new Map<string, number>();
|
||||
const ipClassNegativeUntil = new Map<string, number>();
|
||||
const peerIpClassHints = new Map<string, PeerIpClassHint>();
|
||||
const outboundIpClasses = new Map<string, OutboundIpClass>();
|
||||
const pendingIpClassTasks = new Set<Promise<void>>();
|
||||
const recordedClientErrorRequests = new WeakSet<Request>();
|
||||
const pendingAutoBanTasks = new Set<Promise<void>>();
|
||||
const adminRepository = new AdminRepository();
|
||||
@@ -97,6 +134,9 @@ let flushTimer: NodeJS.Timeout | null = null;
|
||||
let kvSubscription: IKVSubscription | null = null;
|
||||
let messageHandler: ((channel: string, message: string) => void) | null = null;
|
||||
let errorHandler: ((error: Error) => void) | null = null;
|
||||
let ipClassPendingTtlMs = DEFAULT_IP_CLASS_PENDING_TTL_MS;
|
||||
let ipClassNegativeTtlMs = DEFAULT_IP_CLASS_NEGATIVE_TTL_MS;
|
||||
let ipClassHintTtlMs = DEFAULT_IP_CLASS_HINT_TTL_MS;
|
||||
|
||||
function positiveNumberFromEnv(name: string, fallback: number): number {
|
||||
const raw = process.env[name];
|
||||
@@ -164,13 +204,99 @@ function shouldSkipAutoBanForIpClass(ipClass: IpClass): boolean {
|
||||
return ipClass === 'mobile';
|
||||
}
|
||||
|
||||
function isIpClass(value: unknown): value is IpClass {
|
||||
return typeof value === 'string' && (IP_CLASSES as ReadonlyArray<string>).includes(value);
|
||||
}
|
||||
|
||||
function getOwnIpClass(key: string, now: number): IpClass | null {
|
||||
const cached = ipClassCache.get(key);
|
||||
if (cached === undefined) return null;
|
||||
const negativeUntilMs = ipClassNegativeUntil.get(key);
|
||||
if (negativeUntilMs !== undefined && negativeUntilMs <= now) {
|
||||
ipClassCache.delete(key);
|
||||
ipClassNegativeUntil.delete(key);
|
||||
return null;
|
||||
}
|
||||
return cached;
|
||||
}
|
||||
|
||||
function isOwnIpClassNegative(key: string, now: number): boolean {
|
||||
const negativeUntilMs = ipClassNegativeUntil.get(key);
|
||||
return negativeUntilMs !== undefined && negativeUntilMs > now;
|
||||
}
|
||||
|
||||
function setOwnIpClass(key: string, lookupIp: string, ipClass: IpClass, negative: boolean): void {
|
||||
ipClassCache.set(key, ipClass);
|
||||
if (negative) {
|
||||
ipClassNegativeUntil.set(key, Date.now() + ipClassNegativeTtlMs);
|
||||
} else {
|
||||
ipClassNegativeUntil.delete(key);
|
||||
peerIpClassHints.delete(key);
|
||||
}
|
||||
ipClassPending.delete(key);
|
||||
if (!negative && ipClass !== 'unknown') {
|
||||
queueOutboundIpClass(key, lookupIp, ipClass);
|
||||
}
|
||||
const rec = records.get(key);
|
||||
if (rec) maybeFireAutoBan(key, rec);
|
||||
}
|
||||
|
||||
function isIpClassPending(key: string, now: number): boolean {
|
||||
const expiresAtMs = ipClassPending.get(key);
|
||||
if (expiresAtMs === undefined) return false;
|
||||
if (expiresAtMs <= now) {
|
||||
ipClassPending.delete(key);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function getPeerClassHint(key: string, now: number): IpClass | null {
|
||||
const hint = peerIpClassHints.get(key);
|
||||
if (!hint) return null;
|
||||
if (hint.expiresAtMs <= now) {
|
||||
peerIpClassHints.delete(key);
|
||||
return null;
|
||||
}
|
||||
return hint.ipClass;
|
||||
}
|
||||
|
||||
function recordPeerClassHint(key: string, ipClass: IpClass): void {
|
||||
peerIpClassHints.set(key, {ipClass, expiresAtMs: Date.now() + ipClassHintTtlMs});
|
||||
}
|
||||
|
||||
function isStricterThanUnknown(ipClass: IpClass): boolean {
|
||||
return (
|
||||
scoreThresholdFor(ipClass) <= scoreThresholdFor('unknown') &&
|
||||
tokenDiversityThresholdFor(ipClass) <= tokenDiversityThresholdFor('unknown')
|
||||
);
|
||||
}
|
||||
|
||||
function resolveClassForBan(key: string, now: number): ResolvedBanClass {
|
||||
const own = getOwnIpClass(key, now);
|
||||
if (own !== null && !isOwnIpClassNegative(key, now)) return {ipClass: own, authoritative: true, blocked: false};
|
||||
const hint = getPeerClassHint(key, now);
|
||||
if (hint !== null && isStricterThanUnknown(hint)) return {ipClass: hint, authoritative: true, blocked: false};
|
||||
if (hint !== null) return {ipClass: 'unknown', authoritative: false, blocked: true};
|
||||
if (own !== null) return {ipClass: own, authoritative: true, blocked: false};
|
||||
return {ipClass: 'unknown', authoritative: false, blocked: isIpClassPending(key, now)};
|
||||
}
|
||||
|
||||
function pruneIfNeeded(now: number): void {
|
||||
if (records.size < MAX_TRACKED_IPS) return;
|
||||
for (const [key, expiresAtMs] of ipClassPending) {
|
||||
if (expiresAtMs <= now) ipClassPending.delete(key);
|
||||
}
|
||||
for (const [key, hint] of peerIpClassHints) {
|
||||
if (hint.expiresAtMs <= now) peerIpClassHints.delete(key);
|
||||
}
|
||||
for (const [key, rec] of records) {
|
||||
if (rec.windowStartMs + WINDOW_MS < now) {
|
||||
if (rec.windowStartMs + WINDOW_MS < now && !ipClassPending.has(key)) {
|
||||
records.delete(key);
|
||||
ipClassCache.delete(key);
|
||||
ipClassPending.delete(key);
|
||||
ipClassNegativeUntil.delete(key);
|
||||
peerIpClassHints.delete(key);
|
||||
outboundIpClasses.delete(key);
|
||||
}
|
||||
if (records.size < MAX_TRACKED_IPS * 0.9) return;
|
||||
}
|
||||
@@ -222,9 +348,11 @@ function queueOutboundDelta(
|
||||
}
|
||||
}
|
||||
|
||||
function shouldEnsureIpClassLookup(key: string, rec: AbuseRecord): boolean {
|
||||
if (ipClassCache.has(key) || ipClassPending.has(key)) return false;
|
||||
return rec.score >= MIN_SCORE_FOR_IP_LOOKUP || rec.distinctTokenHashes.size >= MIN_TOKENS_FOR_IP_LOOKUP;
|
||||
function shouldEnsureIpClassLookup(key: string, rec: AbuseRecord, now: number): boolean {
|
||||
if (getOwnIpClass(key, now) !== null || isIpClassPending(key, now)) return false;
|
||||
if (getPeerClassHint(key, now) !== null) return false;
|
||||
if (rec.score < MIN_SCORE_FOR_IP_LOOKUP && rec.distinctTokenHashes.size < MIN_TOKENS_FOR_IP_LOOKUP) return false;
|
||||
return ipBanCache.getMatch(rec.lookupIp) === null;
|
||||
}
|
||||
|
||||
function markScoreThresholdWindow(key: string, rec: AbuseRecord, now: number): number {
|
||||
@@ -247,33 +375,53 @@ function markScoreThresholdWindow(key: string, rec: AbuseRecord, now: number): n
|
||||
return state.count;
|
||||
}
|
||||
|
||||
async function claimIpClassLookup(key: string): Promise<boolean> {
|
||||
if (!IP_CLASS_CLAIM_ENABLED) return true;
|
||||
if (!kvPublisher) return true;
|
||||
try {
|
||||
return await getKVClient().setnx(`${IP_CLASS_CLAIM_PREFIX}${key}`, POD_ID, IP_CLASS_CLAIM_TTL_SECONDS);
|
||||
} catch {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
async function runIpClassLookup(key: string, lookupIp: string): Promise<void> {
|
||||
try {
|
||||
if (!(await claimIpClassLookup(key))) return;
|
||||
const result = await getIpInfoService().lookup(lookupIp, {source: 'AbusiveIpAutoBanner', reason: 'classify'});
|
||||
setOwnIpClass(key, lookupIp, classifyIpInfo(result), !result.available);
|
||||
} catch (err) {
|
||||
setOwnIpClass(key, lookupIp, 'unknown', true);
|
||||
Logger.warn({err, ip: lookupIp}, '[abuse-auto-ban] IP classification lookup failed');
|
||||
}
|
||||
}
|
||||
|
||||
function ensureIpClassLookup(key: string, lookupIp: string): void {
|
||||
if (ipClassCache.has(key) || ipClassPending.has(key)) return;
|
||||
ipClassPending.add(key);
|
||||
void (async () => {
|
||||
try {
|
||||
const result = await getIpInfoService().lookup(lookupIp, {source: 'AbusiveIpAutoBanner', reason: 'classify'});
|
||||
ipClassCache.set(key, classifyIpInfo(result));
|
||||
} catch (err) {
|
||||
ipClassCache.set(key, 'unknown');
|
||||
Logger.warn({err, ip: lookupIp}, '[abuse-auto-ban] IP classification lookup failed');
|
||||
} finally {
|
||||
ipClassPending.delete(key);
|
||||
const rec = records.get(key);
|
||||
if (rec) maybeFireAutoBan(key, rec);
|
||||
}
|
||||
})();
|
||||
const now = Date.now();
|
||||
if (getOwnIpClass(key, now) !== null || isIpClassPending(key, now)) return;
|
||||
ipClassPending.set(key, now + ipClassPendingTtlMs);
|
||||
const task = runIpClassLookup(key, lookupIp);
|
||||
pendingIpClassTasks.add(task);
|
||||
void task.finally(() => {
|
||||
pendingIpClassTasks.delete(task);
|
||||
});
|
||||
}
|
||||
|
||||
function maybeFireAutoBan(key: string, rec: AbuseRecord): void {
|
||||
if (rec.autoBanFired) return;
|
||||
const ipClass = ipClassCache.get(key) ?? 'unknown';
|
||||
const now = Date.now();
|
||||
if (ipBanCache.getMatch(rec.lookupIp) !== null) {
|
||||
rec.autoBanFired = true;
|
||||
return;
|
||||
}
|
||||
const resolved = resolveClassForBan(key, now);
|
||||
const ipClass = resolved.ipClass;
|
||||
const scoreThreshold = scoreThresholdFor(ipClass);
|
||||
const tokenThreshold = tokenDiversityThresholdFor(ipClass);
|
||||
const overScore = rec.score >= scoreThreshold;
|
||||
const overTokenDiversity = rec.distinctTokenHashes.size >= tokenThreshold;
|
||||
if (!overScore && !overTokenDiversity) return;
|
||||
if (!ipClassCache.has(key) && ipClassPending.has(key)) {
|
||||
if (resolved.blocked) {
|
||||
return;
|
||||
}
|
||||
if (shouldSkipAutoBanForIpClass(ipClass)) {
|
||||
@@ -369,7 +517,7 @@ export function recordAbuseSignal(ip: string | null, reason: string, opts: Abuse
|
||||
queuedTokenHash = opts.tokenHash;
|
||||
}
|
||||
queueOutboundDelta(signalIp, weight, queuedTokenHash, hadToken);
|
||||
if (shouldEnsureIpClassLookup(signalIp.banKey, rec)) {
|
||||
if (shouldEnsureIpClassLookup(signalIp.banKey, rec, now)) {
|
||||
ensureIpClassLookup(signalIp.banKey, signalIp.lookupIp);
|
||||
}
|
||||
maybeFireAutoBan(signalIp.banKey, rec);
|
||||
@@ -404,7 +552,7 @@ function applyReplicatedTick(tick: ReplicatedTick): void {
|
||||
if (rec.distinctTokenHashes.size >= MAX_TOKEN_HASHES_PER_IP) break;
|
||||
rec.distinctTokenHashes.add(tokenHash);
|
||||
}
|
||||
if (shouldEnsureIpClassLookup(banKey, rec)) {
|
||||
if (shouldEnsureIpClassLookup(banKey, rec, now)) {
|
||||
ensureIpClassLookup(banKey, lookupIp);
|
||||
}
|
||||
maybeFireAutoBan(banKey, rec);
|
||||
@@ -435,7 +583,56 @@ async function flushOutbound(): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
function queueOutboundIpClass(key: string, lookupIp: string, ipClass: IpClass): void {
|
||||
if (!kvPublisher) return;
|
||||
if (!outboundIpClasses.has(key) && outboundIpClasses.size >= MAX_TRACKED_IPS) return;
|
||||
outboundIpClasses.set(key, {lookupIp, ipClass});
|
||||
}
|
||||
|
||||
async function flushOutboundIpClasses(): Promise<void> {
|
||||
if (!kvPublisher || outboundIpClasses.size === 0) return;
|
||||
const entries: Array<IpClassEntry> = [];
|
||||
const selectedKeys: Array<string> = [];
|
||||
for (const [key, entry] of outboundIpClasses) {
|
||||
entries.push([key, entry.lookupIp, entry.ipClass]);
|
||||
selectedKeys.push(key);
|
||||
if (entries.length >= MAX_BATCH_TICKS) break;
|
||||
}
|
||||
const message: IpClassMessage = {sender: POD_ID, entries, ts: Date.now()};
|
||||
try {
|
||||
await kvPublisher.publish(IP_CLASS_CHANNEL, JSON.stringify(message));
|
||||
for (const key of selectedKeys) {
|
||||
outboundIpClasses.delete(key);
|
||||
}
|
||||
} catch (err) {
|
||||
Logger.warn({err, entryCount: entries.length}, '[abuse-auto-ban] Failed to publish abuse IP class batch');
|
||||
}
|
||||
}
|
||||
|
||||
function handleIpClassMessage(message: string): void {
|
||||
const msg = parseJsonRecord(message);
|
||||
if (!msg || msg.sender === POD_ID || !Array.isArray(msg.entries)) return;
|
||||
for (const rawEntry of msg.entries) {
|
||||
if (!Array.isArray(rawEntry) || rawEntry.length < 3) continue;
|
||||
const [banKey, lookupIp, ipClass] = rawEntry;
|
||||
if (typeof banKey !== 'string' || typeof lookupIp !== 'string' || !isIpClass(ipClass)) continue;
|
||||
if (ipClass === 'unknown') continue;
|
||||
const signalIp = normalizeSignalIp(lookupIp);
|
||||
if (!signalIp || signalIp.banKey !== banKey) continue;
|
||||
const rec = records.get(banKey);
|
||||
if (!rec) continue;
|
||||
const now = Date.now();
|
||||
if (getOwnIpClass(banKey, now) !== null && !isOwnIpClassNegative(banKey, now)) continue;
|
||||
recordPeerClassHint(banKey, ipClass);
|
||||
maybeFireAutoBan(banKey, rec);
|
||||
}
|
||||
}
|
||||
|
||||
function handleReplicationMessage(channel: string, message: string): void {
|
||||
if (channel === IP_CLASS_CHANNEL) {
|
||||
handleIpClassMessage(message);
|
||||
return;
|
||||
}
|
||||
if (channel !== REPLICATION_CHANNEL) return;
|
||||
const msg = parseJsonRecord(message);
|
||||
if (!msg || msg.sender === POD_ID || !Array.isArray(msg.ticks)) return;
|
||||
@@ -469,11 +666,12 @@ export async function startAbuseReplicationSubscriber(kvClient: IKVProvider | nu
|
||||
};
|
||||
try {
|
||||
await subscription.connect();
|
||||
await subscription.subscribe(REPLICATION_CHANNEL);
|
||||
await subscription.subscribe(REPLICATION_CHANNEL, IP_CLASS_CHANNEL);
|
||||
subscription.on('message', messageHandler);
|
||||
subscription.on('error', errorHandler);
|
||||
flushTimer = setInterval(() => {
|
||||
void flushOutbound();
|
||||
void flushOutboundIpClasses();
|
||||
}, BATCH_FLUSH_MS);
|
||||
if (typeof flushTimer === 'object' && flushTimer && 'unref' in flushTimer) {
|
||||
(flushTimer as {unref(): void}).unref();
|
||||
@@ -514,11 +712,28 @@ export async function drainAbuseAutoBanTasksForTests(): Promise<void> {
|
||||
await Promise.all([...pendingAutoBanTasks]);
|
||||
}
|
||||
|
||||
export async function drainAbuseIpClassLookupsForTests(): Promise<void> {
|
||||
await Promise.all([...pendingIpClassTasks]);
|
||||
}
|
||||
|
||||
export function setAbuseIpClassTtlsForTests(opts: {negativeMs?: number; hintMs?: number; pendingMs?: number}): void {
|
||||
if (opts.negativeMs !== undefined) ipClassNegativeTtlMs = opts.negativeMs;
|
||||
if (opts.hintMs !== undefined) ipClassHintTtlMs = opts.hintMs;
|
||||
if (opts.pendingMs !== undefined) ipClassPendingTtlMs = opts.pendingMs;
|
||||
}
|
||||
|
||||
export function resetAbuseTrackingForTests(): void {
|
||||
records.clear();
|
||||
outboundDeltas.clear();
|
||||
persistentScoreWindows.clear();
|
||||
ipClassCache.clear();
|
||||
ipClassPending.clear();
|
||||
ipClassNegativeUntil.clear();
|
||||
peerIpClassHints.clear();
|
||||
outboundIpClasses.clear();
|
||||
pendingIpClassTasks.clear();
|
||||
pendingAutoBanTasks.clear();
|
||||
ipClassPendingTtlMs = DEFAULT_IP_CLASS_PENDING_TTL_MS;
|
||||
ipClassNegativeTtlMs = DEFAULT_IP_CLASS_NEGATIVE_TTL_MS;
|
||||
ipClassHintTtlMs = DEFAULT_IP_CLASS_HINT_TTL_MS;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import crypto from 'node:crypto';
|
||||
import {lookupAsnByIp, lookupGeoipByIp} from '@pkgs/geoip/src/GeoipLookup';
|
||||
import {createIpInfoService, createUnavailableIpInfoService, type IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {createMiddleware} from 'hono/factory';
|
||||
import type {ApiContext} from '../ApiContext';
|
||||
@@ -58,8 +59,14 @@ import {createIpInfoChecker} from '../risk/adapters/IpInfoAdapter';
|
||||
import {createReverseDnsLookup} from '../risk/adapters/ReverseDnsAdapter';
|
||||
import {DeterministicRiskEngine} from '../risk/DeterministicRiskEngine';
|
||||
import {CassandraHistoricalOutcomeRepository} from '../risk/HistoricalOutcomeRepository';
|
||||
import {createKvIpInfoLookupBudget} from '../risk/IpInfoBudget';
|
||||
import {buildIpInfoCache, buildIpInfoRequestAuditLogger} from '../risk/IpInfoCacheFactory';
|
||||
import {CassandraRegistrationEventsRepository} from '../risk/RegistrationEventsRepository';
|
||||
import {
|
||||
type IpInfoPrescreenVerdict,
|
||||
ipInfoPrescreenOptionsFromEnv,
|
||||
prescreenIpInfoLookup,
|
||||
} from '../risk/RegistrationIpPrescreen';
|
||||
import {CassandraRiskAssessmentRepository} from '../risk/RiskAssessmentRepository';
|
||||
import {createRiskToolbox} from '../risk/RiskToolboxFactory';
|
||||
import {CassandraSuspiciousIpRepository} from '../risk/SuspiciousIpRepository';
|
||||
@@ -268,6 +275,7 @@ export function getIpInfoService(): IpInfoService {
|
||||
apiKey: Config.risk.ipinfoApiKey,
|
||||
cache,
|
||||
auditLogger: buildIpInfoRequestAuditLogger(),
|
||||
budget: createKvIpInfoLookupBudget({getKvClient: getKVClient}),
|
||||
});
|
||||
return _ipInfoService;
|
||||
}
|
||||
@@ -293,7 +301,14 @@ function getRegistrationRiskEvaluator(): IRegistrationRiskEvaluator {
|
||||
return _registrationRiskEvaluator;
|
||||
}
|
||||
const ipInfoService = getIpInfoService();
|
||||
const ipInfoChecker = Config.risk.ipinfoApiKey ? createIpInfoChecker({ipInfoService}) : undefined;
|
||||
const lookupLocalCity = (ip: string) => lookupGeoipByIp(ip, Config.geoip.maxmindDbPath);
|
||||
const lookupLocalAsn = (ip: string) => lookupAsnByIp(ip, Config.geoip.maxmindAsnDbPath);
|
||||
const prescreenOptions = ipInfoPrescreenOptionsFromEnv();
|
||||
const prescreen = async (ip: string): Promise<IpInfoPrescreenVerdict> => {
|
||||
const [city, asn] = await Promise.all([lookupLocalCity(ip), lookupLocalAsn(ip)]);
|
||||
return prescreenIpInfoLookup({countryIso: city.countryCode, asn: asn.asn, asnOrg: asn.asnOrg}, prescreenOptions);
|
||||
};
|
||||
const ipInfoChecker = Config.risk.ipinfoApiKey ? createIpInfoChecker({ipInfoService, prescreen}) : undefined;
|
||||
const cacheService = getCacheService();
|
||||
const reverseDnsLookup = createReverseDnsLookup({cacheService});
|
||||
const toolbox = createRiskToolbox({
|
||||
@@ -305,6 +320,8 @@ function getRegistrationRiskEvaluator(): IRegistrationRiskEvaluator {
|
||||
historicalOutcomeRepository: getHistoricalOutcomeRepository(),
|
||||
suspiciousIpRepository: getSuspiciousIpRepository(),
|
||||
cacheService,
|
||||
lookupLocalCity,
|
||||
lookupLocalAsn,
|
||||
});
|
||||
const engine = new DeterministicRiskEngine(toolbox, {
|
||||
logger: Logger,
|
||||
|
||||
@@ -1,15 +1,21 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {getSameIpDecisionKey} from '@fluxer/ip_utils/src/IpAddress';
|
||||
import type {IpInfoLookupResult} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest';
|
||||
import {AdminRepository} from '../../admin/AdminRepository';
|
||||
import type {ApiTestHarness} from '../../test/ApiTestHarness';
|
||||
import {createApiTestHarness} from '../../test/ApiTestHarness';
|
||||
import type {MockKVProvider} from '../../test/mocks/MockKVProvider';
|
||||
import {
|
||||
drainAbuseAutoBanTasksForTests,
|
||||
drainAbuseIpClassLookupsForTests,
|
||||
hashAuthToken,
|
||||
recordAbuseSignal,
|
||||
resetAbuseTrackingForTests,
|
||||
setAbuseIpClassTtlsForTests,
|
||||
startAbuseReplicationSubscriber,
|
||||
stopAbuseReplicationSubscriber,
|
||||
} from '../AbusiveIpAutoBanner';
|
||||
import {ipBanCache} from '../IpBanMiddleware';
|
||||
import {setInjectedIpInfoService} from '../ServiceMiddleware';
|
||||
@@ -65,6 +71,11 @@ function ipInfoResult(ip: string, overrides: Partial<IpInfoLookupResult> = {}):
|
||||
};
|
||||
}
|
||||
|
||||
function claimCallCount(harness: ApiTestHarness, banKey: string): number {
|
||||
const kvProvider = harness.kvProvider as MockKVProvider;
|
||||
return kvProvider.setnxSpy.mock.calls.filter(([key]) => key === `abuse:ipclass:claim:${banKey}`).length;
|
||||
}
|
||||
|
||||
async function waitForAssertion(assertion: () => void): Promise<void> {
|
||||
const deadline = Date.now() + 1000;
|
||||
let lastError: unknown;
|
||||
@@ -84,6 +95,7 @@ async function waitForAssertion(assertion: () => void): Promise<void> {
|
||||
describe('AbusiveIpAutoBanner', () => {
|
||||
let harness: ApiTestHarness;
|
||||
let adminRepository: AdminRepository;
|
||||
let lookupCount = 0;
|
||||
beforeAll(async () => {
|
||||
harness = await createApiTestHarness();
|
||||
adminRepository = new AdminRepository();
|
||||
@@ -92,13 +104,18 @@ describe('AbusiveIpAutoBanner', () => {
|
||||
await harness.reset();
|
||||
resetAbuseTrackingForTests();
|
||||
ipBanCache.resetCaches();
|
||||
lookupCount = 0;
|
||||
setInjectedIpInfoService({
|
||||
async lookup(ip: string) {
|
||||
lookupCount += 1;
|
||||
return ipInfoResult(ip);
|
||||
},
|
||||
});
|
||||
await stopAbuseReplicationSubscriber();
|
||||
await startAbuseReplicationSubscriber(harness.kvProvider);
|
||||
});
|
||||
afterAll(async () => {
|
||||
await stopAbuseReplicationSubscriber();
|
||||
setInjectedIpInfoService(undefined);
|
||||
await harness.shutdown();
|
||||
});
|
||||
@@ -117,7 +134,7 @@ describe('AbusiveIpAutoBanner', () => {
|
||||
it('does not auto-ban after a single score-only spike', async () => {
|
||||
const ip = '8.8.4.4';
|
||||
recordAbuseSignal(ip, 'http_429', {weight: 150});
|
||||
await new Promise((resolve) => setTimeout(resolve, 25));
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(ipBanCache.isBanned(ip)).toBe(false);
|
||||
await expect(adminRepository.isIpBanned(ip)).resolves.toBe(false);
|
||||
@@ -135,7 +152,7 @@ describe('AbusiveIpAutoBanner', () => {
|
||||
for (let i = 0; i < 10; i += 1) {
|
||||
recordAbuseSignal(ip, 'auth_failure:session', {tokenHash: hashAuthToken(`mobile-invalid-${i}`)});
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 25));
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(ipBanCache.isBanned(ip)).toBe(false);
|
||||
await expect(adminRepository.isIpBanned(ip)).resolves.toBe(false);
|
||||
@@ -153,7 +170,7 @@ describe('AbusiveIpAutoBanner', () => {
|
||||
for (let i = 0; i < 100; i += 1) {
|
||||
recordAbuseSignal(ip, 'auth_failure:session', {tokenHash: hashAuthToken(`mobile-threshold-${i}`)});
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 25));
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(ipBanCache.isBanned(ip)).toBe(false);
|
||||
await expect(adminRepository.isIpBanned(ip)).resolves.toBe(false);
|
||||
@@ -168,4 +185,68 @@ describe('AbusiveIpAutoBanner', () => {
|
||||
await expect(adminRepository.isIpBanned(ip)).resolves.toBe(false);
|
||||
}
|
||||
});
|
||||
it('claims the class lookup exactly once for a burst on the same IP', async () => {
|
||||
const ip = '8.8.8.8';
|
||||
for (let i = 0; i < 10; i += 1) {
|
||||
recordAbuseSignal(ip, 'auth_failure:session', {tokenHash: hashAuthToken(`claim-${i}`)});
|
||||
}
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(claimCallCount(harness, ip)).toBe(1);
|
||||
expect(lookupCount).toBe(1);
|
||||
});
|
||||
it('does not pay for a lookup or ban when another pod owns the class claim', async () => {
|
||||
const ip = '8.8.8.8';
|
||||
await harness.kvProvider.setnx(`abuse:ipclass:claim:${ip}`, 'other-pod', 60);
|
||||
for (let i = 0; i < 10; i += 1) {
|
||||
recordAbuseSignal(ip, 'auth_failure:session', {tokenHash: hashAuthToken(`claim-loser-${i}`)});
|
||||
}
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(lookupCount).toBe(0);
|
||||
expect(ipBanCache.isBanned(ip)).toBe(false);
|
||||
});
|
||||
it('does not classify an IPv4 address that is already banned', async () => {
|
||||
const ip = '8.8.8.8';
|
||||
ipBanCache.banTemp(ip, 3600);
|
||||
for (let i = 0; i < 20; i += 1) {
|
||||
recordAbuseSignal(ip, 'auth_failure:session', {tokenHash: hashAuthToken(`already-banned-${i}`)});
|
||||
}
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(lookupCount).toBe(0);
|
||||
expect(claimCallCount(harness, ip)).toBe(0);
|
||||
});
|
||||
it('does not classify an IPv6 address inside an already banned /64', async () => {
|
||||
const ip = '2606:4700:4700::1111';
|
||||
const banKey = getSameIpDecisionKey(ip) ?? ip;
|
||||
ipBanCache.banTemp(banKey, 3600);
|
||||
for (let i = 0; i < 20; i += 1) {
|
||||
recordAbuseSignal(ip, 'auth_failure:session', {tokenHash: hashAuthToken(`already-banned-v6-${i}`)});
|
||||
}
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(lookupCount).toBe(0);
|
||||
expect(claimCallCount(harness, banKey)).toBe(0);
|
||||
});
|
||||
it('retries a failed classification once the negative TTL elapses', async () => {
|
||||
const ip = '9.9.9.9';
|
||||
setAbuseIpClassTtlsForTests({negativeMs: 50});
|
||||
setInjectedIpInfoService({
|
||||
async lookup(candidateIp: string) {
|
||||
lookupCount += 1;
|
||||
return ipInfoResult(candidateIp, {available: false});
|
||||
},
|
||||
});
|
||||
recordAbuseSignal(ip, 'http_429', {weight: 25});
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(lookupCount).toBe(1);
|
||||
await new Promise((resolve) => setTimeout(resolve, 60));
|
||||
await harness.kvProvider.del(`abuse:ipclass:claim:${ip}`);
|
||||
recordAbuseSignal(ip, 'http_429', {weight: 25});
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
expect(lookupCount).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {IpInfoLookupResult} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest';
|
||||
import type {ApiTestHarness} from '../../test/ApiTestHarness';
|
||||
import {createApiTestHarness} from '../../test/ApiTestHarness';
|
||||
import type {MockKVProvider} from '../../test/mocks/MockKVProvider';
|
||||
import {
|
||||
drainAbuseAutoBanTasksForTests,
|
||||
drainAbuseIpClassLookupsForTests,
|
||||
hashAuthToken,
|
||||
recordAbuseSignal,
|
||||
resetAbuseTrackingForTests,
|
||||
setAbuseIpClassTtlsForTests,
|
||||
startAbuseReplicationSubscriber,
|
||||
stopAbuseReplicationSubscriber,
|
||||
} from '../AbusiveIpAutoBanner';
|
||||
import {ipBanCache} from '../IpBanMiddleware';
|
||||
import {setInjectedIpInfoService} from '../ServiceMiddleware';
|
||||
|
||||
function ipInfoResult(ip: string, overrides: Partial<IpInfoLookupResult> = {}): IpInfoLookupResult {
|
||||
return {
|
||||
ip,
|
||||
available: true,
|
||||
riskNote: 'test',
|
||||
geo: {
|
||||
countryCode: 'US',
|
||||
countryName: 'United States',
|
||||
continent: 'North America',
|
||||
continentCode: 'NA',
|
||||
region: null,
|
||||
regionCode: null,
|
||||
city: null,
|
||||
postalCode: null,
|
||||
timezone: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
accuracyRadiusKm: null,
|
||||
},
|
||||
asn: {
|
||||
asn: 'AS64500',
|
||||
number: 64500,
|
||||
name: 'Test ISP',
|
||||
domain: null,
|
||||
type: null,
|
||||
},
|
||||
mobile: {
|
||||
name: null,
|
||||
mcc: null,
|
||||
mnc: null,
|
||||
},
|
||||
anonymous: {
|
||||
isAnonymous: false,
|
||||
providerName: null,
|
||||
isVpn: false,
|
||||
isProxy: false,
|
||||
isResidentialProxy: false,
|
||||
isTor: false,
|
||||
isRelay: false,
|
||||
percentDaysSeen: null,
|
||||
},
|
||||
flags: {
|
||||
isAnycast: false,
|
||||
isHosting: false,
|
||||
isMobile: false,
|
||||
isSatellite: false,
|
||||
},
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function publishPeerIpClasses(harness: ApiTestHarness, entries: Array<[string, string, unknown]>): void {
|
||||
const kvProvider = harness.kvProvider as MockKVProvider;
|
||||
kvProvider
|
||||
.getSubscription()
|
||||
.simulateMessage('abuse_tracker:ipclass', JSON.stringify({sender: 'other-pod', entries, ts: Date.now()}));
|
||||
}
|
||||
|
||||
function claimCallCount(harness: ApiTestHarness, banKey: string): number {
|
||||
const kvProvider = harness.kvProvider as MockKVProvider;
|
||||
return kvProvider.setnxSpy.mock.calls.filter(([key]) => key === `abuse:ipclass:claim:${banKey}`).length;
|
||||
}
|
||||
|
||||
function recordTokenSignals(ip: string, prefix: string, from: number, to: number): void {
|
||||
for (let i = from; i < to; i += 1) {
|
||||
recordAbuseSignal(ip, 'auth_failure:session', {tokenHash: hashAuthToken(`${prefix}-${i}`)});
|
||||
}
|
||||
}
|
||||
|
||||
async function drainAbuseWork(): Promise<void> {
|
||||
await drainAbuseIpClassLookupsForTests();
|
||||
await drainAbuseAutoBanTasksForTests();
|
||||
}
|
||||
|
||||
describe('AbusiveIpAutoBanner IP class replication', () => {
|
||||
let harness: ApiTestHarness;
|
||||
let lookupCount = 0;
|
||||
beforeAll(async () => {
|
||||
harness = await createApiTestHarness();
|
||||
});
|
||||
beforeEach(async () => {
|
||||
await harness.reset();
|
||||
resetAbuseTrackingForTests();
|
||||
ipBanCache.resetCaches();
|
||||
lookupCount = 0;
|
||||
setInjectedIpInfoService({
|
||||
async lookup(ip: string) {
|
||||
lookupCount += 1;
|
||||
return ipInfoResult(ip);
|
||||
},
|
||||
});
|
||||
await stopAbuseReplicationSubscriber();
|
||||
await startAbuseReplicationSubscriber(harness.kvProvider);
|
||||
});
|
||||
afterAll(async () => {
|
||||
await stopAbuseReplicationSubscriber();
|
||||
setInjectedIpInfoService(undefined);
|
||||
await harness.shutdown();
|
||||
});
|
||||
it('adopts a datacenter class from a peer without paying for its own lookup', async () => {
|
||||
const ip = '8.8.8.8';
|
||||
recordTokenSignals(ip, 'peer-datacenter', 0, 3);
|
||||
publishPeerIpClasses(harness, [[ip, ip, 'datacenter']]);
|
||||
recordTokenSignals(ip, 'peer-datacenter', 3, 10);
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(0);
|
||||
expect(claimCallCount(harness, ip)).toBe(0);
|
||||
expect(ipBanCache.isBanned(ip)).toBe(true);
|
||||
});
|
||||
it('never adopts a mobile class from a peer and leaves the IP bannable', async () => {
|
||||
const ip = '8.8.4.4';
|
||||
recordTokenSignals(ip, 'peer-mobile', 0, 3);
|
||||
publishPeerIpClasses(harness, [[ip, ip, 'mobile']]);
|
||||
recordTokenSignals(ip, 'peer-mobile', 3, 10);
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(0);
|
||||
expect(ipBanCache.isBanned(ip)).toBe(false);
|
||||
publishPeerIpClasses(harness, [[ip, ip, 'datacenter']]);
|
||||
await drainAbuseWork();
|
||||
expect(ipBanCache.isBanned(ip)).toBe(true);
|
||||
});
|
||||
it('ignores an unrecognised class from a peer and classifies the IP itself', async () => {
|
||||
const ip = '4.4.4.4';
|
||||
recordTokenSignals(ip, 'peer-invalid', 0, 3);
|
||||
publishPeerIpClasses(harness, [
|
||||
[ip, ip, 'datacentre'],
|
||||
[ip, ip, 42],
|
||||
]);
|
||||
recordTokenSignals(ip, 'peer-invalid', 3, 10);
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(1);
|
||||
expect(ipBanCache.isBanned(ip)).toBe(true);
|
||||
});
|
||||
it('ignores an unknown class from a peer and classifies the IP itself', async () => {
|
||||
const ip = '9.9.9.9';
|
||||
recordTokenSignals(ip, 'peer-unknown', 0, 3);
|
||||
publishPeerIpClasses(harness, [[ip, ip, 'unknown']]);
|
||||
recordTokenSignals(ip, 'peer-unknown', 3, 10);
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(1);
|
||||
expect(ipBanCache.isBanned(ip)).toBe(true);
|
||||
});
|
||||
it('ignores a peer class for an IP it is not tracking', async () => {
|
||||
const ip = '208.67.222.222';
|
||||
publishPeerIpClasses(harness, [[ip, ip, 'datacenter']]);
|
||||
recordTokenSignals(ip, 'peer-untracked', 0, 10);
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(1);
|
||||
expect(claimCallCount(harness, ip)).toBe(1);
|
||||
});
|
||||
it('accepts a peer mobile class after its own lookup failed and keeps the IP unbanned', async () => {
|
||||
const ip = '199.85.126.10';
|
||||
setInjectedIpInfoService({
|
||||
async lookup(lookupIp: string) {
|
||||
lookupCount += 1;
|
||||
return ipInfoResult(lookupIp, {available: false});
|
||||
},
|
||||
});
|
||||
recordAbuseSignal(ip, 'http_429', {weight: 25});
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(1);
|
||||
publishPeerIpClasses(harness, [[ip, ip, 'mobile']]);
|
||||
recordTokenSignals(ip, 'negative-then-mobile', 0, 10);
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(1);
|
||||
expect(ipBanCache.isBanned(ip)).toBe(false);
|
||||
});
|
||||
it('resumes classifying once a peer class hint expires', async () => {
|
||||
const ip = '77.88.8.8';
|
||||
setAbuseIpClassTtlsForTests({hintMs: 50});
|
||||
recordAbuseSignal(ip, 'http_429', {weight: 3});
|
||||
publishPeerIpClasses(harness, [[ip, ip, 'datacenter']]);
|
||||
recordAbuseSignal(ip, 'http_429', {weight: 25});
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(0);
|
||||
await new Promise((resolve) => setTimeout(resolve, 80));
|
||||
recordAbuseSignal(ip, 'http_429', {weight: 25});
|
||||
await drainAbuseWork();
|
||||
expect(lookupCount).toBe(1);
|
||||
expect(claimCallCount(harness, ip)).toBe(1);
|
||||
expect(ipBanCache.isBanned(ip)).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -197,7 +197,7 @@ export class UserSettings {
|
||||
return {
|
||||
user_id: userId,
|
||||
locale,
|
||||
theme: theme ?? ThemeTypes.SYSTEM,
|
||||
theme: theme ?? ThemeTypes.DARK,
|
||||
status: 'online',
|
||||
status_resets_at: null,
|
||||
status_resets_to: null,
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {IpInfoLookupBudget, IpInfoLookupPriority} from '@pkgs/geoip/src/IpInfoService';
|
||||
import type {IKVProvider} from '@pkgs/kv_client/src/IKVProvider';
|
||||
import {Logger} from '../Logger';
|
||||
|
||||
const BURST_KEY_PREFIX = 'ipinfo:budget:burst:';
|
||||
const MONTH_KEY_PREFIX = 'ipinfo:budget:month:';
|
||||
const MONTH_KEY_TTL_SECONDS = 40 * 24 * 3600;
|
||||
const BURST_REFILL_INTERVAL_MS = 60_000;
|
||||
const BUDGET_LOG_INTERVAL_MS = 60_000;
|
||||
|
||||
let lastBudgetErrorLogMs = 0;
|
||||
|
||||
function positiveNumberFromEnv(name: string, fallback: number): number {
|
||||
const raw = process.env[name];
|
||||
if (!raw) return fallback;
|
||||
const parsed = Number(raw);
|
||||
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
||||
}
|
||||
|
||||
function budgetEnabled(): boolean {
|
||||
return process.env.FLUXER_IPINFO_BUDGET_ENABLED !== '0';
|
||||
}
|
||||
|
||||
function burstConfigFor(priority: IpInfoLookupPriority): {maxTokens: number; refillPerMin: number} {
|
||||
if (priority === 'critical') {
|
||||
return {
|
||||
maxTokens: positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_CRITICAL_BURST', 60),
|
||||
refillPerMin: positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_CRITICAL_REFILL_PER_MIN', 60),
|
||||
};
|
||||
}
|
||||
if (priority === 'background') {
|
||||
return {
|
||||
maxTokens: positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_BACKGROUND_BURST', 120),
|
||||
refillPerMin: positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_BACKGROUND_REFILL_PER_MIN', 30),
|
||||
};
|
||||
}
|
||||
return {
|
||||
maxTokens: positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_STANDARD_BURST', 240),
|
||||
refillPerMin: positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_STANDARD_REFILL_PER_MIN', 120),
|
||||
};
|
||||
}
|
||||
|
||||
function monthlyCeilingFor(priority: IpInfoLookupPriority): number {
|
||||
const monthlyMax = positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_MONTHLY_MAX', 140000);
|
||||
if (priority === 'critical') return monthlyMax;
|
||||
const percent =
|
||||
priority === 'background'
|
||||
? positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_BACKGROUND_MONTHLY_PCT', 60)
|
||||
: positiveNumberFromEnv('FLUXER_IPINFO_BUDGET_STANDARD_MONTHLY_PCT', 90);
|
||||
return Math.floor((monthlyMax * Math.min(percent, 100)) / 100);
|
||||
}
|
||||
|
||||
function currentMonthKey(): string {
|
||||
const now = new Date();
|
||||
const month = String(now.getUTCMonth() + 1).padStart(2, '0');
|
||||
return `${MONTH_KEY_PREFIX}${now.getUTCFullYear()}-${month}`;
|
||||
}
|
||||
|
||||
function logThrottled(payload: Record<string, unknown>, message: string): void {
|
||||
const now = Date.now();
|
||||
if (now - lastBudgetErrorLogMs < BUDGET_LOG_INTERVAL_MS) return;
|
||||
lastBudgetErrorLogMs = now;
|
||||
Logger.warn(payload, message);
|
||||
}
|
||||
|
||||
export function createKvIpInfoLookupBudget(opts: {getKvClient: () => IKVProvider}): IpInfoLookupBudget {
|
||||
return {
|
||||
async tryConsume(priority: IpInfoLookupPriority): Promise<boolean> {
|
||||
if (!budgetEnabled()) {
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
const kv = opts.getKvClient();
|
||||
const burst = burstConfigFor(priority);
|
||||
const consumed = await kv.tryConsumeTokens(
|
||||
`${BURST_KEY_PREFIX}${priority}`,
|
||||
1,
|
||||
burst.maxTokens,
|
||||
burst.refillPerMin,
|
||||
BURST_REFILL_INTERVAL_MS,
|
||||
);
|
||||
if (consumed < 1) {
|
||||
logThrottled({priority, reason: 'burst'}, 'IPInfo lookup budget shed');
|
||||
return false;
|
||||
}
|
||||
const monthKey = currentMonthKey();
|
||||
const used = Number((await kv.get(monthKey)) ?? '0');
|
||||
if (used >= monthlyCeilingFor(priority)) {
|
||||
logThrottled({priority, reason: 'monthly', used}, 'IPInfo lookup budget shed');
|
||||
return false;
|
||||
}
|
||||
const value = await kv.incr(monthKey);
|
||||
if (value === 1) {
|
||||
await kv.expire(monthKey, MONTH_KEY_TTL_SECONDS);
|
||||
}
|
||||
return true;
|
||||
} catch (error) {
|
||||
logThrottled({error, priority}, 'IPInfo lookup budget check failed, admitting lookup');
|
||||
return true;
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
import {getDefaultCassandraClient} from '@pkgs/cassandra/src/Client';
|
||||
import {createCassandraIpInfoCache} from '@pkgs/geoip/src/CassandraIpInfoCache';
|
||||
import {createCassandraIpInfoRequestAuditLogger} from '@pkgs/geoip/src/CassandraIpInfoRequestAudit';
|
||||
import type {IpInfoCache, IpInfoRequestAuditLogger} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {type IpInfoCache, type IpInfoRequestAuditLogger, isCachedIpInfoFailure} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {createPostgresIpInfoCache, createPostgresIpInfoRequestAuditLogger} from '@pkgs/geoip/src/PostgresIpInfoKv';
|
||||
import {createTieredIpInfoCache} from '@pkgs/geoip/src/TieredIpInfoCache';
|
||||
import {getDefaultPostgresClient} from '@pkgs/postgres/src/Client';
|
||||
@@ -22,11 +22,13 @@ export function buildIpInfoCache(options: BuildIpInfoCacheOptions): IpInfoCache
|
||||
getClient: getDefaultPostgresClient,
|
||||
onError: (error, operation) => Logger.warn({error, operation}, 'Postgres IPInfo cache operation failed'),
|
||||
}),
|
||||
skipColdWrite: isCachedIpInfoFailure,
|
||||
});
|
||||
}
|
||||
return createTieredIpInfoCache({
|
||||
hot: options.hot,
|
||||
cold: createCassandraIpInfoCache({getClient: getDefaultCassandraClient}),
|
||||
skipColdWrite: isCachedIpInfoFailure,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {
|
||||
classifyAccountPolicyReverseDnsHostname,
|
||||
isAccountPolicyEducationOrganizationName,
|
||||
isAccountPolicyTrustedCommercialPrivacyProvider,
|
||||
} from './AccountPolicyService';
|
||||
|
||||
const ASN_ENTRY_REGEX = /^\d+$/u;
|
||||
|
||||
export interface LocalIpIntel {
|
||||
countryIso: string | null;
|
||||
asn: number | null;
|
||||
asnOrg: string | null;
|
||||
}
|
||||
|
||||
export interface IpInfoPrescreenOptions {
|
||||
enabled: boolean;
|
||||
allowedAsns: ReadonlySet<number>;
|
||||
}
|
||||
|
||||
export type IpInfoPrescreenVerdict = 'consult' | 'skip';
|
||||
|
||||
export function prescreenIpInfoLookup(local: LocalIpIntel, opts: IpInfoPrescreenOptions): IpInfoPrescreenVerdict {
|
||||
if (!opts.enabled) return 'consult';
|
||||
if (opts.allowedAsns.size === 0) return 'consult';
|
||||
if (local.countryIso === null) return 'consult';
|
||||
if (local.asn === null) return 'consult';
|
||||
if (!opts.allowedAsns.has(local.asn)) return 'consult';
|
||||
if (isAccountPolicyTrustedCommercialPrivacyProvider(local.asnOrg)) return 'consult';
|
||||
if (isAccountPolicyEducationOrganizationName(local.asnOrg)) return 'consult';
|
||||
if (classifyAccountPolicyReverseDnsHostname(local.asnOrg) === 'cellular') return 'consult';
|
||||
return 'skip';
|
||||
}
|
||||
|
||||
export function ipInfoPrescreenOptionsFromEnv(): IpInfoPrescreenOptions {
|
||||
return {
|
||||
enabled: booleanFromEnv(process.env.FLUXER_RISK_IPINFO_PRESCREEN_ENABLED),
|
||||
allowedAsns: asnSetFromEnv(process.env.FLUXER_RISK_IPINFO_PRESCREEN_ALLOW_ASNS),
|
||||
};
|
||||
}
|
||||
|
||||
function booleanFromEnv(rawValue: string | undefined): boolean {
|
||||
if (!rawValue) return false;
|
||||
const normalized = rawValue.trim().toLowerCase();
|
||||
return normalized === '1' || normalized === 'true';
|
||||
}
|
||||
|
||||
function asnSetFromEnv(rawValue: string | undefined): ReadonlySet<number> {
|
||||
const allowedAsns = new Set<number>();
|
||||
if (!rawValue) return allowedAsns;
|
||||
for (const entry of rawValue.split(',')) {
|
||||
const trimmed = entry.trim();
|
||||
if (!ASN_ENTRY_REGEX.test(trimmed)) continue;
|
||||
const asn = Number.parseInt(trimmed, 10);
|
||||
if (!Number.isSafeInteger(asn)) continue;
|
||||
allowedAsns.add(asn);
|
||||
}
|
||||
return allowedAsns;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {ICacheService} from '@pkgs/cache/src/ICacheService';
|
||||
import type {GeoipAsnResult, GeoipResult} from '@pkgs/geoip/src/GeoipLookup';
|
||||
import type {IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import type {IAdminRepository} from '../admin/IAdminRepository';
|
||||
import {createDisposableDomainChecker} from './adapters/DisposableDomainChecker';
|
||||
@@ -9,6 +10,7 @@ import {createDomainAgeChecker} from './adapters/DomainAgeChecker';
|
||||
import {analyzeEmailSyntax} from './adapters/EmailSyntaxAnalyzer';
|
||||
import {createGeoIpAsnAdapter, createGeoIpCityAdapter} from './adapters/GeoIpAdapters';
|
||||
import {createHistoricalOutcomeAdapter} from './adapters/HistoricalOutcomeAdapter';
|
||||
import {unavailableIpInfoAnonymousResult} from './adapters/IpInfoAdapter';
|
||||
import {checkGeoVsLocale} from './adapters/LocaleGeoMatcher';
|
||||
import {analyzeRegistrationTiming} from './adapters/RegistrationTimingAnalyzer';
|
||||
import {analyzeUserAgent} from './adapters/UserAgentAnalyzer';
|
||||
@@ -29,12 +31,20 @@ interface RiskToolboxFactoryOptions {
|
||||
mxResolver?: MxResolver;
|
||||
mxCacheTtlMs?: number;
|
||||
cacheService?: ICacheService;
|
||||
lookupLocalCity?: (ip: string) => Promise<GeoipResult>;
|
||||
lookupLocalAsn?: (ip: string) => Promise<GeoipAsnResult>;
|
||||
}
|
||||
|
||||
export function createRiskToolbox(opts: RiskToolboxFactoryOptions): RiskToolbox {
|
||||
const checkDomainDisposable = createDisposableDomainChecker({adminRepository: opts.adminRepository});
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({ipInfoService: opts.ipInfoService});
|
||||
const lookupGeoIpAsn = createGeoIpAsnAdapter({ipInfoService: opts.ipInfoService});
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({
|
||||
ipInfoService: opts.ipInfoService,
|
||||
lookupLocalCity: opts.lookupLocalCity,
|
||||
});
|
||||
const lookupGeoIpAsn = createGeoIpAsnAdapter({
|
||||
ipInfoService: opts.ipInfoService,
|
||||
lookupLocalAsn: opts.lookupLocalAsn,
|
||||
});
|
||||
const checkMx = createDnsMxChecker({
|
||||
resolver: opts.mxResolver ?? new NodeDnsMxResolver(),
|
||||
cacheTtlMs: opts.mxCacheTtlMs,
|
||||
@@ -46,25 +56,7 @@ export function createRiskToolbox(opts: RiskToolboxFactoryOptions): RiskToolbox
|
||||
});
|
||||
const lookupIpInfo = opts.ipInfoChecker
|
||||
? async (args: {ip: string}) => opts.ipInfoChecker!(args.ip)
|
||||
: async (args: {ip: string}) =>
|
||||
({
|
||||
ip: args.ip,
|
||||
available: false,
|
||||
isAnonymous: false,
|
||||
providerName: null,
|
||||
isVpn: false,
|
||||
isProxy: false,
|
||||
isResidentialProxy: false,
|
||||
isTor: false,
|
||||
isRelay: false,
|
||||
isHosting: false,
|
||||
isMobile: false,
|
||||
asnType: null,
|
||||
asnOrg: null,
|
||||
connectionType: 'unknown',
|
||||
percentDaysSeen: null,
|
||||
riskNote: 'IPInfo not configured (no API key)',
|
||||
}) as IpInfoAnonymousResult;
|
||||
: async (args: {ip: string}) => unavailableIpInfoAnonymousResult(args.ip, 'IPInfo not configured (no API key)');
|
||||
const lookupReverseDns = opts.reverseDnsLookup
|
||||
? async (args: {ip: string}) => opts.reverseDnsLookup!(args.ip)
|
||||
: async (args: {ip: string}) => ({
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {GeoipAsnResult, GeoipResult} from '@pkgs/geoip/src/GeoipLookup';
|
||||
import type {IpInfoLookupResult, IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
import {createGeoIpAsnAdapter, createGeoIpCityAdapter} from '../adapters/GeoIpAdapters';
|
||||
|
||||
function throwingIpInfoService(): IpInfoService {
|
||||
return {
|
||||
lookup: async () => {
|
||||
throw new Error('ipinfo must not be consulted');
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function countingIpInfoService(result: IpInfoLookupResult): {service: IpInfoService; calls: () => number} {
|
||||
let calls = 0;
|
||||
return {
|
||||
service: {
|
||||
lookup: async () => {
|
||||
calls += 1;
|
||||
return result;
|
||||
},
|
||||
},
|
||||
calls: () => calls,
|
||||
};
|
||||
}
|
||||
|
||||
function ipInfoResult(overrides: Partial<IpInfoLookupResult> = {}): IpInfoLookupResult {
|
||||
return {
|
||||
ip: '198.51.100.1',
|
||||
available: true,
|
||||
riskNote: 'test',
|
||||
geo: {
|
||||
countryCode: 'US',
|
||||
countryName: 'United States',
|
||||
continent: 'North America',
|
||||
continentCode: 'NA',
|
||||
region: 'California',
|
||||
regionCode: 'CA',
|
||||
city: 'San Jose',
|
||||
postalCode: null,
|
||||
timezone: 'America/Los_Angeles',
|
||||
latitude: 37.3,
|
||||
longitude: -121.9,
|
||||
accuracyRadiusKm: 20,
|
||||
},
|
||||
asn: {
|
||||
asn: 'AS64500',
|
||||
number: 64500,
|
||||
name: 'Test ISP',
|
||||
domain: null,
|
||||
type: null,
|
||||
},
|
||||
mobile: {
|
||||
name: null,
|
||||
mcc: null,
|
||||
mnc: null,
|
||||
},
|
||||
anonymous: {
|
||||
isAnonymous: false,
|
||||
providerName: null,
|
||||
isVpn: false,
|
||||
isProxy: false,
|
||||
isResidentialProxy: false,
|
||||
isTor: false,
|
||||
isRelay: false,
|
||||
percentDaysSeen: null,
|
||||
},
|
||||
flags: {
|
||||
isAnycast: false,
|
||||
isHosting: false,
|
||||
isMobile: false,
|
||||
isSatellite: false,
|
||||
},
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function geoipResult(overrides: Partial<GeoipResult> = {}): GeoipResult {
|
||||
return {
|
||||
countryCode: 'SE',
|
||||
normalizedIp: '198.51.100.7',
|
||||
city: 'Stockholm',
|
||||
region: 'Stockholm County',
|
||||
regionCode: 'AB',
|
||||
countryName: 'Sweden',
|
||||
latitude: 59.33,
|
||||
longitude: 18.06,
|
||||
accuracyRadiusKm: 5,
|
||||
timeZone: 'Europe/Stockholm',
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function geoipAsnResult(overrides: Partial<GeoipAsnResult> = {}): GeoipAsnResult {
|
||||
return {
|
||||
normalizedIp: '198.51.100.7',
|
||||
asn: 64510,
|
||||
asnOrg: 'Example Broadband ISP',
|
||||
available: true,
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
describe('createGeoIpCityAdapter', () => {
|
||||
it('answers from the local city database without touching IPInfo', async () => {
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({
|
||||
ipInfoService: throwingIpInfoService(),
|
||||
lookupLocalCity: async () => geoipResult(),
|
||||
});
|
||||
await expect(lookupGeoIpCity({ip: '198.51.100.7'})).resolves.toEqual({
|
||||
ip: '198.51.100.7',
|
||||
available: true,
|
||||
found: true,
|
||||
countryIso: 'SE',
|
||||
country: 'Sweden',
|
||||
region: 'Stockholm County',
|
||||
city: 'Stockholm',
|
||||
latitude: 59.33,
|
||||
longitude: 18.06,
|
||||
accuracyRadiusKm: 5,
|
||||
timeZone: 'Europe/Stockholm',
|
||||
});
|
||||
});
|
||||
|
||||
it('normalizes the IP before handing it to the local city database', async () => {
|
||||
const seen: Array<string> = [];
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({
|
||||
ipInfoService: throwingIpInfoService(),
|
||||
lookupLocalCity: async (ip) => {
|
||||
seen.push(ip);
|
||||
return geoipResult();
|
||||
},
|
||||
});
|
||||
await lookupGeoIpCity({ip: '[2001:0db8:0000::0001]'});
|
||||
expect(seen).toEqual(['2001:db8::1']);
|
||||
});
|
||||
|
||||
it('coalesces missing optional local fields to null', async () => {
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({
|
||||
ipInfoService: throwingIpInfoService(),
|
||||
lookupLocalCity: async () => ({
|
||||
countryCode: 'SE',
|
||||
normalizedIp: '198.51.100.7',
|
||||
city: null,
|
||||
region: null,
|
||||
countryName: null,
|
||||
}),
|
||||
});
|
||||
await expect(lookupGeoIpCity({ip: '198.51.100.7'})).resolves.toEqual({
|
||||
ip: '198.51.100.7',
|
||||
available: true,
|
||||
found: true,
|
||||
countryIso: 'SE',
|
||||
country: null,
|
||||
region: null,
|
||||
city: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
accuracyRadiusKm: null,
|
||||
timeZone: null,
|
||||
});
|
||||
});
|
||||
|
||||
it('falls back to IPInfo when the local city database has no country', async () => {
|
||||
const counting = countingIpInfoService(ipInfoResult());
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({
|
||||
ipInfoService: counting.service,
|
||||
lookupLocalCity: async () => geoipResult({countryCode: null}),
|
||||
});
|
||||
await expect(lookupGeoIpCity({ip: '198.51.100.1'})).resolves.toEqual({
|
||||
ip: '198.51.100.1',
|
||||
available: true,
|
||||
found: true,
|
||||
countryIso: 'US',
|
||||
country: 'United States',
|
||||
region: 'California',
|
||||
city: 'San Jose',
|
||||
latitude: 37.3,
|
||||
longitude: -121.9,
|
||||
accuracyRadiusKm: 20,
|
||||
timeZone: 'America/Los_Angeles',
|
||||
});
|
||||
expect(counting.calls()).toBe(1);
|
||||
});
|
||||
|
||||
it('falls back to IPInfo when no local city lookup is wired', async () => {
|
||||
const counting = countingIpInfoService(ipInfoResult());
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({ipInfoService: counting.service});
|
||||
const result = await lookupGeoIpCity({ip: '198.51.100.1'});
|
||||
expect(result.countryIso).toBe('US');
|
||||
expect(counting.calls()).toBe(1);
|
||||
});
|
||||
|
||||
it('returns an available not-found result for an unparseable IP without any lookup', async () => {
|
||||
const lookupGeoIpCity = createGeoIpCityAdapter({
|
||||
ipInfoService: throwingIpInfoService(),
|
||||
lookupLocalCity: async () => {
|
||||
throw new Error('local city must not be consulted');
|
||||
},
|
||||
});
|
||||
await expect(lookupGeoIpCity({ip: 'not-an-ip'})).resolves.toEqual({
|
||||
ip: 'not-an-ip',
|
||||
available: true,
|
||||
found: false,
|
||||
countryIso: null,
|
||||
country: null,
|
||||
region: null,
|
||||
city: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
accuracyRadiusKm: null,
|
||||
timeZone: null,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('createGeoIpAsnAdapter', () => {
|
||||
it('answers from the local ASN database without touching IPInfo', async () => {
|
||||
const lookupGeoIpAsn = createGeoIpAsnAdapter({
|
||||
ipInfoService: throwingIpInfoService(),
|
||||
lookupLocalAsn: async () => geoipAsnResult(),
|
||||
});
|
||||
await expect(lookupGeoIpAsn({ip: '198.51.100.7'})).resolves.toEqual({
|
||||
ip: '198.51.100.7',
|
||||
available: true,
|
||||
found: true,
|
||||
asn: 64510,
|
||||
asnOrg: 'Example Broadband ISP',
|
||||
});
|
||||
});
|
||||
|
||||
it('normalizes the IP before handing it to the local ASN database', async () => {
|
||||
const seen: Array<string> = [];
|
||||
const lookupGeoIpAsn = createGeoIpAsnAdapter({
|
||||
ipInfoService: throwingIpInfoService(),
|
||||
lookupLocalAsn: async (ip) => {
|
||||
seen.push(ip);
|
||||
return geoipAsnResult();
|
||||
},
|
||||
});
|
||||
await lookupGeoIpAsn({ip: '[2001:0db8:0000::0001]'});
|
||||
expect(seen).toEqual(['2001:db8::1']);
|
||||
});
|
||||
|
||||
it('falls back to IPInfo when the local ASN database has no ASN', async () => {
|
||||
const counting = countingIpInfoService(ipInfoResult());
|
||||
const lookupGeoIpAsn = createGeoIpAsnAdapter({
|
||||
ipInfoService: counting.service,
|
||||
lookupLocalAsn: async () => geoipAsnResult({asn: null, asnOrg: null}),
|
||||
});
|
||||
await expect(lookupGeoIpAsn({ip: '198.51.100.1'})).resolves.toEqual({
|
||||
ip: '198.51.100.1',
|
||||
available: true,
|
||||
found: true,
|
||||
asn: 64500,
|
||||
asnOrg: 'Test ISP',
|
||||
});
|
||||
expect(counting.calls()).toBe(1);
|
||||
});
|
||||
|
||||
it('falls back to IPInfo when the local ASN database is unavailable', async () => {
|
||||
const counting = countingIpInfoService(ipInfoResult());
|
||||
const lookupGeoIpAsn = createGeoIpAsnAdapter({
|
||||
ipInfoService: counting.service,
|
||||
lookupLocalAsn: async () => geoipAsnResult({normalizedIp: null, asn: null, asnOrg: null, available: false}),
|
||||
});
|
||||
const result = await lookupGeoIpAsn({ip: '198.51.100.1'});
|
||||
expect(result.asn).toBe(64500);
|
||||
expect(counting.calls()).toBe(1);
|
||||
});
|
||||
|
||||
it('returns an available not-found result for an unparseable IP without any lookup', async () => {
|
||||
const lookupGeoIpAsn = createGeoIpAsnAdapter({
|
||||
ipInfoService: throwingIpInfoService(),
|
||||
lookupLocalAsn: async () => {
|
||||
throw new Error('local ASN must not be consulted');
|
||||
},
|
||||
});
|
||||
await expect(lookupGeoIpAsn({ip: 'not-an-ip'})).resolves.toEqual({
|
||||
ip: 'not-an-ip',
|
||||
available: true,
|
||||
found: false,
|
||||
asn: null,
|
||||
asnOrg: null,
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,156 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {IpInfoLookupContext, IpInfoLookupResult, IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
||||
import {createCurrentBehaviorTestAccountPolicyEvaluator} from '../../test/AccountPolicyTestEvaluator';
|
||||
import {setInjectedAccountPolicyEvaluator} from '../AccountPolicyService';
|
||||
import {createIpInfoChecker, unavailableIpInfoAnonymousResult} from '../adapters/IpInfoAdapter';
|
||||
|
||||
function ipInfoResult(overrides: Partial<IpInfoLookupResult> = {}): IpInfoLookupResult {
|
||||
return {
|
||||
ip: '198.51.100.1',
|
||||
available: true,
|
||||
riskNote: 'live lookup',
|
||||
geo: {
|
||||
countryCode: 'US',
|
||||
countryName: 'United States',
|
||||
continent: 'North America',
|
||||
continentCode: 'NA',
|
||||
region: null,
|
||||
regionCode: null,
|
||||
city: null,
|
||||
postalCode: null,
|
||||
timezone: null,
|
||||
latitude: null,
|
||||
longitude: null,
|
||||
accuracyRadiusKm: null,
|
||||
},
|
||||
asn: {
|
||||
asn: 'AS64500',
|
||||
number: 64500,
|
||||
name: 'Test ISP',
|
||||
domain: null,
|
||||
type: 'isp',
|
||||
},
|
||||
mobile: {
|
||||
name: null,
|
||||
mcc: null,
|
||||
mnc: null,
|
||||
},
|
||||
anonymous: {
|
||||
isAnonymous: true,
|
||||
providerName: 'Example VPN',
|
||||
isVpn: true,
|
||||
isProxy: false,
|
||||
isResidentialProxy: false,
|
||||
isTor: false,
|
||||
isRelay: false,
|
||||
percentDaysSeen: 42,
|
||||
},
|
||||
flags: {
|
||||
isAnycast: false,
|
||||
isHosting: false,
|
||||
isMobile: false,
|
||||
isSatellite: false,
|
||||
},
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function countingIpInfoService(result: IpInfoLookupResult): {
|
||||
service: IpInfoService;
|
||||
calls: () => number;
|
||||
contexts: () => Array<IpInfoLookupContext | undefined>;
|
||||
} {
|
||||
const contexts: Array<IpInfoLookupContext | undefined> = [];
|
||||
return {
|
||||
service: {
|
||||
lookup: async (_ip, context) => {
|
||||
contexts.push(context);
|
||||
return result;
|
||||
},
|
||||
},
|
||||
calls: () => contexts.length,
|
||||
contexts: () => contexts,
|
||||
};
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
setInjectedAccountPolicyEvaluator(createCurrentBehaviorTestAccountPolicyEvaluator());
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
setInjectedAccountPolicyEvaluator(undefined);
|
||||
});
|
||||
|
||||
describe('createIpInfoChecker pre-screen', () => {
|
||||
it('returns an unavailable result with zero lookups when the pre-screen skips', async () => {
|
||||
const counting = countingIpInfoService(ipInfoResult());
|
||||
const checkIpInfo = createIpInfoChecker({
|
||||
ipInfoService: counting.service,
|
||||
prescreen: async () => 'skip',
|
||||
});
|
||||
await expect(checkIpInfo('198.51.100.1')).resolves.toEqual(
|
||||
unavailableIpInfoAnonymousResult('198.51.100.1', 'IPInfo skipped (local pre-screen)'),
|
||||
);
|
||||
expect(counting.calls()).toBe(0);
|
||||
});
|
||||
|
||||
it('calls IPInfo exactly once and preserves the mapping when the pre-screen consults', async () => {
|
||||
const counting = countingIpInfoService(ipInfoResult());
|
||||
const checkIpInfo = createIpInfoChecker({
|
||||
ipInfoService: counting.service,
|
||||
prescreen: async () => 'consult',
|
||||
});
|
||||
await expect(checkIpInfo('198.51.100.1')).resolves.toEqual({
|
||||
ip: '198.51.100.1',
|
||||
available: true,
|
||||
isAnonymous: true,
|
||||
providerName: 'Example VPN',
|
||||
isVpn: true,
|
||||
isProxy: false,
|
||||
isResidentialProxy: false,
|
||||
isTor: false,
|
||||
isRelay: false,
|
||||
isHosting: false,
|
||||
isMobile: false,
|
||||
asnType: 'isp',
|
||||
asnOrg: 'Test ISP',
|
||||
connectionType: 'residential',
|
||||
percentDaysSeen: 42,
|
||||
riskNote: 'live lookup',
|
||||
});
|
||||
expect(counting.calls()).toBe(1);
|
||||
expect(counting.contexts()).toEqual([{source: 'risk.ipinfo_checker', reason: 'registration_risk'}]);
|
||||
});
|
||||
|
||||
it('is identical to a consulting pre-screen when no pre-screen is wired', async () => {
|
||||
const withoutPrescreen = countingIpInfoService(ipInfoResult());
|
||||
const withPrescreen = countingIpInfoService(ipInfoResult());
|
||||
const baseline = await createIpInfoChecker({ipInfoService: withoutPrescreen.service})('198.51.100.1');
|
||||
const consulted = await createIpInfoChecker({
|
||||
ipInfoService: withPrescreen.service,
|
||||
prescreen: async () => 'consult',
|
||||
})('198.51.100.1');
|
||||
expect(baseline).toEqual(consulted);
|
||||
expect(withoutPrescreen.calls()).toBe(1);
|
||||
expect(withPrescreen.calls()).toBe(1);
|
||||
});
|
||||
|
||||
it('never synthesizes a clean attestation for a skipped lookup', () => {
|
||||
const skipped = unavailableIpInfoAnonymousResult('198.51.100.1', 'IPInfo skipped (local pre-screen)');
|
||||
expect(skipped.available).toBe(false);
|
||||
expect(skipped.isAnonymous).toBe(false);
|
||||
expect(skipped.isVpn).toBe(false);
|
||||
expect(skipped.isProxy).toBe(false);
|
||||
expect(skipped.isResidentialProxy).toBe(false);
|
||||
expect(skipped.isTor).toBe(false);
|
||||
expect(skipped.isRelay).toBe(false);
|
||||
expect(skipped.isHosting).toBe(false);
|
||||
expect(skipped.isMobile).toBe(false);
|
||||
expect(skipped.asnType).toBeNull();
|
||||
expect(skipped.asnOrg).toBeNull();
|
||||
expect(skipped.connectionType).toBe('unknown');
|
||||
expect(skipped.percentDaysSeen).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,134 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest';
|
||||
import {MockKVProvider} from '../../test/mocks/MockKVProvider';
|
||||
import {createKvIpInfoLookupBudget} from '../IpInfoBudget';
|
||||
|
||||
const BUDGET_ENV_KEYS = [
|
||||
'FLUXER_IPINFO_BUDGET_ENABLED',
|
||||
'FLUXER_IPINFO_BUDGET_MONTHLY_MAX',
|
||||
'FLUXER_IPINFO_BUDGET_BACKGROUND_MONTHLY_PCT',
|
||||
'FLUXER_IPINFO_BUDGET_STANDARD_MONTHLY_PCT',
|
||||
'FLUXER_IPINFO_BUDGET_CRITICAL_BURST',
|
||||
'FLUXER_IPINFO_BUDGET_STANDARD_BURST',
|
||||
'FLUXER_IPINFO_BUDGET_BACKGROUND_BURST',
|
||||
'FLUXER_IPINFO_BUDGET_CRITICAL_REFILL_PER_MIN',
|
||||
'FLUXER_IPINFO_BUDGET_STANDARD_REFILL_PER_MIN',
|
||||
'FLUXER_IPINFO_BUDGET_BACKGROUND_REFILL_PER_MIN',
|
||||
];
|
||||
|
||||
function monthKey(): string {
|
||||
const now = new Date();
|
||||
const month = String(now.getUTCMonth() + 1).padStart(2, '0');
|
||||
return `ipinfo:budget:month:${now.getUTCFullYear()}-${month}`;
|
||||
}
|
||||
|
||||
describe('IpInfoBudget', () => {
|
||||
const savedEnv = new Map<string, string | undefined>();
|
||||
|
||||
beforeEach(() => {
|
||||
for (const key of BUDGET_ENV_KEYS) {
|
||||
savedEnv.set(key, process.env[key]);
|
||||
delete process.env[key];
|
||||
}
|
||||
process.env.FLUXER_IPINFO_BUDGET_MONTHLY_MAX = '100';
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
for (const [key, value] of savedEnv) {
|
||||
if (value === undefined) {
|
||||
delete process.env[key];
|
||||
} else {
|
||||
process.env[key] = value;
|
||||
}
|
||||
}
|
||||
savedEnv.clear();
|
||||
});
|
||||
|
||||
it('sheds background lookups at the background monthly ceiling while standard still admits', async () => {
|
||||
const kv = new MockKVProvider();
|
||||
await kv.set(monthKey(), '60');
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
expect(await budget.tryConsume('background')).toBe(false);
|
||||
expect(await budget.tryConsume('standard')).toBe(true);
|
||||
});
|
||||
|
||||
it('sheds standard lookups at the standard monthly ceiling', async () => {
|
||||
const kv = new MockKVProvider();
|
||||
await kv.set(monthKey(), '90');
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
expect(await budget.tryConsume('standard')).toBe(false);
|
||||
});
|
||||
|
||||
it('admits critical lookups above the standard ceiling', async () => {
|
||||
const kv = new MockKVProvider();
|
||||
await kv.set(monthKey(), '95');
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
expect(await budget.tryConsume('critical')).toBe(true);
|
||||
});
|
||||
|
||||
it('never increments the monthly counter for a shed lookup', async () => {
|
||||
const kv = new MockKVProvider();
|
||||
await kv.set(monthKey(), '60');
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
const outcomes = [
|
||||
await budget.tryConsume('background'),
|
||||
await budget.tryConsume('background'),
|
||||
await budget.tryConsume('standard'),
|
||||
await budget.tryConsume('critical'),
|
||||
];
|
||||
|
||||
expect(outcomes).toEqual([false, false, true, true]);
|
||||
expect(kv.incrSpy).toHaveBeenCalledTimes(2);
|
||||
expect(await kv.get(monthKey())).toBe('62');
|
||||
});
|
||||
|
||||
it('sheds once the per-priority burst bucket is drained', async () => {
|
||||
process.env.FLUXER_IPINFO_BUDGET_BACKGROUND_BURST = '3';
|
||||
process.env.FLUXER_IPINFO_BUDGET_BACKGROUND_REFILL_PER_MIN = '1';
|
||||
const kv = new MockKVProvider();
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
expect(await budget.tryConsume('background')).toBe(true);
|
||||
expect(await budget.tryConsume('background')).toBe(true);
|
||||
expect(await budget.tryConsume('background')).toBe(true);
|
||||
expect(await budget.tryConsume('background')).toBe(false);
|
||||
expect(await budget.tryConsume('standard')).toBe(true);
|
||||
});
|
||||
|
||||
it('expires the month key only on the first increment', async () => {
|
||||
const kv = new MockKVProvider();
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
expect(await budget.tryConsume('standard')).toBe(true);
|
||||
expect(await budget.tryConsume('standard')).toBe(true);
|
||||
expect(await budget.tryConsume('standard')).toBe(true);
|
||||
|
||||
expect(kv.expireSpy).toHaveBeenCalledTimes(1);
|
||||
expect(kv.expireSpy).toHaveBeenCalledWith(monthKey(), 40 * 24 * 3600);
|
||||
});
|
||||
|
||||
it('fails open for every priority when the KV provider throws', async () => {
|
||||
const kv = new MockKVProvider();
|
||||
vi.spyOn(kv, 'get').mockRejectedValue(new Error('kv unavailable'));
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
expect(await budget.tryConsume('background')).toBe(true);
|
||||
expect(await budget.tryConsume('standard')).toBe(true);
|
||||
expect(await budget.tryConsume('critical')).toBe(true);
|
||||
});
|
||||
|
||||
it('admits everything when the budget is disabled', async () => {
|
||||
process.env.FLUXER_IPINFO_BUDGET_ENABLED = '0';
|
||||
const kv = new MockKVProvider();
|
||||
await kv.set(monthKey(), '1000');
|
||||
const budget = createKvIpInfoLookupBudget({getKvClient: () => kv});
|
||||
|
||||
expect(await budget.tryConsume('background')).toBe(true);
|
||||
expect(kv.tryConsumeTokensSpy).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,276 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {
|
||||
CachedIpInfoFailure,
|
||||
IpInfoCache,
|
||||
IpInfoLookupBudget,
|
||||
IpInfoLookupPriority,
|
||||
IpInfoRequestAuditEvent,
|
||||
IpInfoRequestAuditLogger,
|
||||
} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {createIpInfoService, resolveIpInfoLookupPriority} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {delay, HttpResponse, http} from 'msw';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
import {server} from '../../test/msw/server';
|
||||
|
||||
interface RecordedSet {
|
||||
key: string;
|
||||
value: unknown;
|
||||
ttlSeconds: number | undefined;
|
||||
}
|
||||
|
||||
interface RecordingCache {
|
||||
cache: IpInfoCache;
|
||||
sets: Array<RecordedSet>;
|
||||
}
|
||||
|
||||
function createRecordingCache(): RecordingCache {
|
||||
const store = new Map<string, unknown>();
|
||||
const sets: Array<RecordedSet> = [];
|
||||
return {
|
||||
sets,
|
||||
cache: {
|
||||
async get<T>(key: string): Promise<T | null> {
|
||||
return (store.get(key) as T | undefined) ?? null;
|
||||
},
|
||||
async set<T>(key: string, value: T, ttlSeconds?: number): Promise<void> {
|
||||
store.set(key, value);
|
||||
sets.push({key, value, ttlSeconds});
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function createRecordingAuditLogger(): {logger: IpInfoRequestAuditLogger; events: Array<IpInfoRequestAuditEvent>} {
|
||||
const events: Array<IpInfoRequestAuditEvent> = [];
|
||||
return {
|
||||
events,
|
||||
logger: {
|
||||
async record(event: IpInfoRequestAuditEvent): Promise<void> {
|
||||
events.push(event);
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function useLookupHandler(handler: () => Response | Promise<Response>): {count: () => number} {
|
||||
let calls = 0;
|
||||
server.use(
|
||||
http.get('https://api.ipinfo.io/lookup/:ip', async () => {
|
||||
calls += 1;
|
||||
return await handler();
|
||||
}),
|
||||
);
|
||||
return {count: () => calls};
|
||||
}
|
||||
|
||||
function successPayload(ip: string, anonymous: Record<string, boolean> = {}): Response {
|
||||
return HttpResponse.json({
|
||||
ip,
|
||||
geo: {country_code: 'US', country: 'United States'},
|
||||
as: {asn: 'AS64500', name: 'Test ISP'},
|
||||
anonymous,
|
||||
});
|
||||
}
|
||||
|
||||
describe('IpInfoService caching', () => {
|
||||
it('negative-caches an HTTP error and serves the second lookup without a request', async () => {
|
||||
const requests = useLookupHandler(() => new HttpResponse(null, {status: 500}));
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
const first = await service.lookup('203.0.113.1');
|
||||
const second = await service.lookup('203.0.113.1');
|
||||
|
||||
expect(first.available).toBe(false);
|
||||
expect(second.available).toBe(false);
|
||||
expect(requests.count()).toBe(1);
|
||||
expect(sets).toHaveLength(1);
|
||||
expect(sets[0]?.ttlSeconds).toBe(300);
|
||||
});
|
||||
|
||||
it('negative-caches a request failure for a short window', async () => {
|
||||
useLookupHandler(async () => {
|
||||
await delay(5000);
|
||||
return successPayload('203.0.113.2');
|
||||
});
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
const result = await service.lookup('203.0.113.2');
|
||||
|
||||
expect(result.available).toBe(false);
|
||||
expect(sets[0]?.ttlSeconds).toBe(60);
|
||||
expect((sets[0]?.value as CachedIpInfoFailure).failureOutcome).toBe('request_failed');
|
||||
});
|
||||
|
||||
it('negative-caches a schema mismatch', async () => {
|
||||
useLookupHandler(() => HttpResponse.json({}));
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
const result = await service.lookup('203.0.113.3');
|
||||
|
||||
expect(result.available).toBe(false);
|
||||
expect(sets[0]?.ttlSeconds).toBe(600);
|
||||
expect((sets[0]?.value as CachedIpInfoFailure).failureOutcome).toBe('schema_mismatch');
|
||||
expect((sets[0]?.value as CachedIpInfoFailure).failureHttpStatus).toBe(200);
|
||||
});
|
||||
|
||||
it('negative-caches a quota rejection for longer', async () => {
|
||||
useLookupHandler(() => new HttpResponse(null, {status: 429}));
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
await service.lookup('203.0.113.4');
|
||||
|
||||
expect(sets[0]?.ttlSeconds).toBe(900);
|
||||
});
|
||||
|
||||
it('caps the quota rejection TTL for background lookups', async () => {
|
||||
useLookupHandler(() => new HttpResponse(null, {status: 429}));
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
await service.lookup('203.0.113.5', {source: 'AbusiveIpAutoBanner', reason: 'classify'});
|
||||
|
||||
expect(sets[0]?.ttlSeconds).toBe(120);
|
||||
});
|
||||
|
||||
it('returns a cached failure as a clean unavailable result', async () => {
|
||||
useLookupHandler(() => new HttpResponse(null, {status: 500}));
|
||||
const {cache} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
await service.lookup('203.0.113.6');
|
||||
const cached = await service.lookup('203.0.113.6');
|
||||
|
||||
expect(cached).not.toHaveProperty('cachedFailure');
|
||||
expect(cached).not.toHaveProperty('failureOutcome');
|
||||
expect(cached).not.toHaveProperty('failureHttpStatus');
|
||||
expect(cached).not.toHaveProperty('cachedAtMs');
|
||||
expect(cached.ip).toBe('203.0.113.6');
|
||||
expect(cached.riskNote).toBe('IPInfo HTTP 500');
|
||||
});
|
||||
|
||||
it('writes a cached failure that older readers can still consume', async () => {
|
||||
useLookupHandler(() => new HttpResponse(null, {status: 500}));
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
await service.lookup('203.0.113.7');
|
||||
|
||||
const entry = sets[0]?.value as CachedIpInfoFailure;
|
||||
expect(entry.cachedFailure).toBe(true);
|
||||
expect(entry.failureOutcome).toBe('http_error');
|
||||
expect(entry.failureHttpStatus).toBe(500);
|
||||
expect(typeof entry.cachedAtMs).toBe('number');
|
||||
const legacyView = {...entry, ip: '203.0.113.7'};
|
||||
expect(legacyView.available).toBe(false);
|
||||
expect(legacyView.geo.countryCode).toBeNull();
|
||||
expect(legacyView.asn.number).toBeNull();
|
||||
expect(legacyView.mobile.name).toBeNull();
|
||||
expect(legacyView.anonymous.isAnonymous).toBe(false);
|
||||
expect(legacyView.flags.isMobile).toBe(false);
|
||||
});
|
||||
|
||||
it('keeps the existing success TTL selection', async () => {
|
||||
useLookupHandler(() => successPayload('203.0.113.8'));
|
||||
const plain = createRecordingCache();
|
||||
await createIpInfoService({apiKey: 'token', cache: plain.cache}).lookup('203.0.113.8');
|
||||
|
||||
useLookupHandler(() => successPayload('203.0.113.9', {is_vpn: true}));
|
||||
const anonymous = createRecordingCache();
|
||||
await createIpInfoService({apiKey: 'token', cache: anonymous.cache}).lookup('203.0.113.9');
|
||||
|
||||
expect(plain.sets[0]?.ttlSeconds).toBe(14 * 24 * 60 * 60);
|
||||
expect(anonymous.sets[0]?.ttlSeconds).toBe(7 * 24 * 60 * 60);
|
||||
});
|
||||
|
||||
it('coalesces concurrent lookups across a failure', async () => {
|
||||
const requests = useLookupHandler(() => new HttpResponse(null, {status: 500}));
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const service = createIpInfoService({apiKey: 'token', cache});
|
||||
|
||||
const [first, second] = await Promise.all([service.lookup('203.0.113.10'), service.lookup('203.0.113.10')]);
|
||||
|
||||
expect(requests.count()).toBe(1);
|
||||
expect(sets).toHaveLength(1);
|
||||
expect(first.available).toBe(false);
|
||||
expect(second.available).toBe(false);
|
||||
});
|
||||
|
||||
it('sheds a lookup when the budget refuses it', async () => {
|
||||
const requests = useLookupHandler(() => successPayload('203.0.113.11'));
|
||||
const {cache, sets} = createRecordingCache();
|
||||
const {logger, events} = createRecordingAuditLogger();
|
||||
const refused: Array<IpInfoLookupPriority> = [];
|
||||
const budget: IpInfoLookupBudget = {
|
||||
async tryConsume(priority: IpInfoLookupPriority): Promise<boolean> {
|
||||
refused.push(priority);
|
||||
return priority !== 'background';
|
||||
},
|
||||
};
|
||||
const service = createIpInfoService({apiKey: 'token', cache, auditLogger: logger, budget});
|
||||
|
||||
const result = await service.lookup('203.0.113.11', {source: 'AbusiveIpAutoBanner', reason: 'classify'});
|
||||
|
||||
expect(refused).toEqual(['background']);
|
||||
expect(requests.count()).toBe(0);
|
||||
expect(result.available).toBe(false);
|
||||
expect(result.riskNote).toContain('shed');
|
||||
expect(sets).toHaveLength(0);
|
||||
expect(events).toHaveLength(1);
|
||||
expect(events[0]?.outcome).toBe('budget_shed');
|
||||
expect(events[0]?.httpStatus).toBeNull();
|
||||
});
|
||||
|
||||
it('still coalesces concurrent lookups when a budget is configured', async () => {
|
||||
const requests = useLookupHandler(() => successPayload('203.0.113.13'));
|
||||
const {cache} = createRecordingCache();
|
||||
const consumed: Array<IpInfoLookupPriority> = [];
|
||||
const budget: IpInfoLookupBudget = {
|
||||
async tryConsume(priority: IpInfoLookupPriority): Promise<boolean> {
|
||||
consumed.push(priority);
|
||||
return true;
|
||||
},
|
||||
};
|
||||
const service = createIpInfoService({apiKey: 'token', cache, budget});
|
||||
|
||||
const results = await Promise.all([
|
||||
service.lookup('203.0.113.13', {source: 'risk.geoip_city'}),
|
||||
service.lookup('203.0.113.13', {source: 'risk.geoip_asn'}),
|
||||
service.lookup('203.0.113.13', {source: 'risk.ipinfo_checker'}),
|
||||
]);
|
||||
|
||||
expect(requests.count()).toBe(1);
|
||||
expect(consumed).toEqual(['standard']);
|
||||
expect(results.every((result) => result.available)).toBe(true);
|
||||
});
|
||||
|
||||
it('lets an admitting budget through', async () => {
|
||||
const requests = useLookupHandler(() => successPayload('203.0.113.12'));
|
||||
const {cache} = createRecordingCache();
|
||||
const budget: IpInfoLookupBudget = {
|
||||
async tryConsume(): Promise<boolean> {
|
||||
return true;
|
||||
},
|
||||
};
|
||||
const service = createIpInfoService({apiKey: 'token', cache, budget});
|
||||
|
||||
const result = await service.lookup('203.0.113.12', {source: 'risk.ipinfo_checker'});
|
||||
|
||||
expect(requests.count()).toBe(1);
|
||||
expect(result.available).toBe(true);
|
||||
});
|
||||
|
||||
it('maps every lookup source to a priority', () => {
|
||||
expect(resolveIpInfoLookupPriority('admin.ip_ban')).toBe('critical');
|
||||
expect(resolveIpInfoLookupPriority('admin.scheduled_deletion_suspicious_ip')).toBe('critical');
|
||||
expect(resolveIpInfoLookupPriority('AbusiveIpAutoBanner')).toBe('background');
|
||||
expect(resolveIpInfoLookupPriority('risk.ipinfo_checker')).toBe('standard');
|
||||
expect(resolveIpInfoLookupPriority('risk.geoip_city')).toBe('standard');
|
||||
expect(resolveIpInfoLookupPriority('risk.geoip_asn')).toBe('standard');
|
||||
expect(resolveIpInfoLookupPriority(undefined)).toBe('standard');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,110 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
||||
import {createCurrentBehaviorTestAccountPolicyEvaluator} from '../../test/AccountPolicyTestEvaluator';
|
||||
import {setInjectedAccountPolicyEvaluator} from '../AccountPolicyService';
|
||||
import {
|
||||
type IpInfoPrescreenOptions,
|
||||
ipInfoPrescreenOptionsFromEnv,
|
||||
type LocalIpIntel,
|
||||
prescreenIpInfoLookup,
|
||||
} from '../RegistrationIpPrescreen';
|
||||
|
||||
const CLEAN_LOCAL: LocalIpIntel = {countryIso: 'SE', asn: 64500, asnOrg: 'Example Broadband ISP'};
|
||||
|
||||
function options(overrides: Partial<IpInfoPrescreenOptions> = {}): IpInfoPrescreenOptions {
|
||||
return {enabled: true, allowedAsns: new Set([64500]), ...overrides};
|
||||
}
|
||||
|
||||
function local(overrides: Partial<LocalIpIntel> = {}): LocalIpIntel {
|
||||
return {...CLEAN_LOCAL, ...overrides};
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
setInjectedAccountPolicyEvaluator(createCurrentBehaviorTestAccountPolicyEvaluator());
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
setInjectedAccountPolicyEvaluator(undefined);
|
||||
delete process.env.FLUXER_RISK_IPINFO_PRESCREEN_ENABLED;
|
||||
delete process.env.FLUXER_RISK_IPINFO_PRESCREEN_ALLOW_ASNS;
|
||||
});
|
||||
|
||||
describe('prescreenIpInfoLookup', () => {
|
||||
it('skips the lookup only when every local signal is clean and allowlisted', () => {
|
||||
expect(prescreenIpInfoLookup(local(), options())).toBe('skip');
|
||||
});
|
||||
|
||||
it('consults when the pre-screen is disabled', () => {
|
||||
expect(prescreenIpInfoLookup(local(), options({enabled: false}))).toBe('consult');
|
||||
});
|
||||
|
||||
it('consults when the allowlist is empty', () => {
|
||||
expect(prescreenIpInfoLookup(local(), options({allowedAsns: new Set()}))).toBe('consult');
|
||||
});
|
||||
|
||||
it('consults when the local city database has no country', () => {
|
||||
expect(prescreenIpInfoLookup(local({countryIso: null}), options())).toBe('consult');
|
||||
});
|
||||
|
||||
it('consults when the local ASN database has no ASN', () => {
|
||||
expect(prescreenIpInfoLookup(local({asn: null}), options())).toBe('consult');
|
||||
});
|
||||
|
||||
it('consults when the ASN is not on the allowlist', () => {
|
||||
expect(prescreenIpInfoLookup(local({asn: 64501}), options())).toBe('consult');
|
||||
});
|
||||
|
||||
it('consults for a trusted commercial privacy provider even on the allowlist', () => {
|
||||
expect(prescreenIpInfoLookup(local({asnOrg: 'Example Privacy Relay LLC'}), options())).toBe('consult');
|
||||
});
|
||||
|
||||
it('consults for an education organization even on the allowlist', () => {
|
||||
expect(prescreenIpInfoLookup(local({asnOrg: 'North Example Academy'}), options())).toBe('consult');
|
||||
});
|
||||
|
||||
it('consults for a cellular organization even on the allowlist', () => {
|
||||
expect(prescreenIpInfoLookup(local({asnOrg: 'Example cell-net Wireless'}), options())).toBe('consult');
|
||||
});
|
||||
|
||||
it('skips when the allowlisted ASN carries no organization name to veto', () => {
|
||||
expect(prescreenIpInfoLookup(local({asnOrg: null}), options())).toBe('skip');
|
||||
});
|
||||
});
|
||||
|
||||
describe('ipInfoPrescreenOptionsFromEnv', () => {
|
||||
it('is disabled with an empty allowlist by default', () => {
|
||||
const parsed = ipInfoPrescreenOptionsFromEnv();
|
||||
expect(parsed.enabled).toBe(false);
|
||||
expect(parsed.allowedAsns.size).toBe(0);
|
||||
});
|
||||
|
||||
it('treats only 1 and true as enabled', () => {
|
||||
process.env.FLUXER_RISK_IPINFO_PRESCREEN_ENABLED = '1';
|
||||
expect(ipInfoPrescreenOptionsFromEnv().enabled).toBe(true);
|
||||
process.env.FLUXER_RISK_IPINFO_PRESCREEN_ENABLED = 'TRUE';
|
||||
expect(ipInfoPrescreenOptionsFromEnv().enabled).toBe(true);
|
||||
process.env.FLUXER_RISK_IPINFO_PRESCREEN_ENABLED = 'yes';
|
||||
expect(ipInfoPrescreenOptionsFromEnv().enabled).toBe(false);
|
||||
process.env.FLUXER_RISK_IPINFO_PRESCREEN_ENABLED = '0';
|
||||
expect(ipInfoPrescreenOptionsFromEnv().enabled).toBe(false);
|
||||
});
|
||||
|
||||
it('parses a comma separated allowlist and drops non numeric entries', () => {
|
||||
process.env.FLUXER_RISK_IPINFO_PRESCREEN_ALLOW_ASNS = ' 64500, 64501 ,,notanasn,64502x,-3,64503 ';
|
||||
expect([...ipInfoPrescreenOptionsFromEnv().allowedAsns]).toEqual([64500, 64501, 64503]);
|
||||
});
|
||||
|
||||
it('parses an empty allowlist from an empty or whitespace value', () => {
|
||||
process.env.FLUXER_RISK_IPINFO_PRESCREEN_ALLOW_ASNS = '';
|
||||
expect(ipInfoPrescreenOptionsFromEnv().allowedAsns.size).toBe(0);
|
||||
process.env.FLUXER_RISK_IPINFO_PRESCREEN_ALLOW_ASNS = ' , ,';
|
||||
expect(ipInfoPrescreenOptionsFromEnv().allowedAsns.size).toBe(0);
|
||||
});
|
||||
|
||||
it('yields a consult verdict for every input with the shipped defaults', () => {
|
||||
const shipped = ipInfoPrescreenOptionsFromEnv();
|
||||
expect(prescreenIpInfoLookup(local(), shipped)).toBe('consult');
|
||||
expect(prescreenIpInfoLookup(local({asnOrg: null}), shipped)).toBe('consult');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,130 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {IpInfoCache} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {createTieredIpInfoCache} from '@pkgs/geoip/src/TieredIpInfoCache';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
|
||||
interface RecordedSet {
|
||||
key: string;
|
||||
value: unknown;
|
||||
ttlSeconds: number | undefined;
|
||||
}
|
||||
|
||||
interface RecordingCache {
|
||||
cache: IpInfoCache;
|
||||
store: Map<string, unknown>;
|
||||
sets: Array<RecordedSet>;
|
||||
}
|
||||
|
||||
function createRecordingCache(): RecordingCache {
|
||||
const store = new Map<string, unknown>();
|
||||
const sets: Array<RecordedSet> = [];
|
||||
return {
|
||||
store,
|
||||
sets,
|
||||
cache: {
|
||||
async get<T>(key: string): Promise<T | null> {
|
||||
return (store.get(key) as T | undefined) ?? null;
|
||||
},
|
||||
async set<T>(key: string, value: T, ttlSeconds?: number): Promise<void> {
|
||||
store.set(key, value);
|
||||
sets.push({key, value, ttlSeconds});
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
describe('TieredIpInfoCache', () => {
|
||||
it('clamps the hot TTL to the requested TTL and passes the raw TTL to the cold tier', async () => {
|
||||
const hot = createRecordingCache();
|
||||
const cold = createRecordingCache();
|
||||
const tiered = createTieredIpInfoCache({hot: hot.cache, cold: cold.cache});
|
||||
|
||||
await tiered.set('a', {available: false}, 60);
|
||||
|
||||
expect(hot.sets).toEqual([{key: 'a', value: {available: false}, ttlSeconds: 60}]);
|
||||
expect(cold.sets).toEqual([{key: 'a', value: {available: false}, ttlSeconds: 60}]);
|
||||
});
|
||||
|
||||
it('caps the hot TTL at the configured hot window', async () => {
|
||||
const hot = createRecordingCache();
|
||||
const cold = createRecordingCache();
|
||||
const tiered = createTieredIpInfoCache({hot: hot.cache, cold: cold.cache});
|
||||
|
||||
await tiered.set('a', {available: true}, 100000);
|
||||
|
||||
expect(hot.sets[0]?.ttlSeconds).toBe(600);
|
||||
expect(cold.sets[0]?.ttlSeconds).toBe(100000);
|
||||
});
|
||||
|
||||
it('uses the hot window when no TTL is supplied', async () => {
|
||||
const hot = createRecordingCache();
|
||||
const cold = createRecordingCache();
|
||||
const tiered = createTieredIpInfoCache({hot: hot.cache, cold: cold.cache});
|
||||
|
||||
await tiered.set('a', {available: true});
|
||||
|
||||
expect(hot.sets[0]?.ttlSeconds).toBe(600);
|
||||
expect(cold.sets[0]?.ttlSeconds).toBeUndefined();
|
||||
});
|
||||
|
||||
it('skips the cold write when skipColdWrite matches', async () => {
|
||||
const hot = createRecordingCache();
|
||||
const cold = createRecordingCache();
|
||||
const tiered = createTieredIpInfoCache({
|
||||
hot: hot.cache,
|
||||
cold: cold.cache,
|
||||
skipColdWrite: (value) => (value as {available?: unknown}).available === false,
|
||||
});
|
||||
|
||||
await tiered.set('a', {available: false}, 60);
|
||||
await tiered.set('b', {available: true}, 60);
|
||||
|
||||
expect(hot.sets.map((entry) => entry.key)).toEqual(['a', 'b']);
|
||||
expect(cold.sets.map((entry) => entry.key)).toEqual(['b']);
|
||||
});
|
||||
|
||||
it('promotes a cold hit into the hot tier', async () => {
|
||||
const hot = createRecordingCache();
|
||||
const cold = createRecordingCache();
|
||||
cold.store.set('a', {available: true});
|
||||
const tiered = createTieredIpInfoCache({hot: hot.cache, cold: cold.cache});
|
||||
|
||||
const hit = await tiered.get('a');
|
||||
|
||||
expect(hit).toEqual({available: true});
|
||||
expect(hot.sets).toEqual([{key: 'a', value: {available: true}, ttlSeconds: 600}]);
|
||||
});
|
||||
|
||||
it('never promotes a cold hit that skipColdWrite matches', async () => {
|
||||
const hot = createRecordingCache();
|
||||
const cold = createRecordingCache();
|
||||
cold.store.set('a', {available: false});
|
||||
const tiered = createTieredIpInfoCache({
|
||||
hot: hot.cache,
|
||||
cold: cold.cache,
|
||||
skipColdWrite: (value) => (value as {available?: unknown}).available === false,
|
||||
});
|
||||
|
||||
const hit = await tiered.get('a');
|
||||
|
||||
expect(hit).toEqual({available: false});
|
||||
expect(hot.sets).toEqual([]);
|
||||
});
|
||||
|
||||
it('never writes a zero TTL', async () => {
|
||||
const hot = createRecordingCache();
|
||||
const cold = createRecordingCache();
|
||||
const tiered = createTieredIpInfoCache({hot: hot.cache, cold: cold.cache});
|
||||
|
||||
await tiered.set('a', {available: false}, 60);
|
||||
await tiered.set('b', {available: true}, 100000);
|
||||
await tiered.set('c', {available: true});
|
||||
cold.store.set('d', {available: true});
|
||||
await tiered.get('d');
|
||||
|
||||
for (const entry of [...hot.sets, ...cold.sets]) {
|
||||
expect(entry.ttlSeconds === undefined || entry.ttlSeconds > 0).toBe(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1,15 +1,18 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {parseIpAddress} from '@fluxer/ip_utils/src/IpAddress';
|
||||
import type {GeoipAsnResult, GeoipResult} from '@pkgs/geoip/src/GeoipLookup';
|
||||
import type {IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import type {GeoIpAsnResult, GeoIpCityResult} from '../RiskTypes';
|
||||
|
||||
interface GeoIpCityContext {
|
||||
ipInfoService: IpInfoService;
|
||||
lookupLocalCity?: (ip: string) => Promise<GeoipResult>;
|
||||
}
|
||||
|
||||
interface GeoIpAsnContext {
|
||||
ipInfoService: IpInfoService;
|
||||
lookupLocalAsn?: (ip: string) => Promise<GeoipAsnResult>;
|
||||
}
|
||||
|
||||
export function createGeoIpCityAdapter(ctx: GeoIpCityContext) {
|
||||
@@ -19,6 +22,22 @@ export function createGeoIpCityAdapter(ctx: GeoIpCityContext) {
|
||||
if (!parsed) {
|
||||
return notFound(ip, true);
|
||||
}
|
||||
const local = ctx.lookupLocalCity ? await ctx.lookupLocalCity(parsed.normalized) : null;
|
||||
if (local && local.countryCode !== null) {
|
||||
return {
|
||||
ip,
|
||||
available: true,
|
||||
found: true,
|
||||
countryIso: local.countryCode,
|
||||
country: local.countryName,
|
||||
region: local.region,
|
||||
city: local.city,
|
||||
latitude: local.latitude ?? null,
|
||||
longitude: local.longitude ?? null,
|
||||
accuracyRadiusKm: local.accuracyRadiusKm ?? null,
|
||||
timeZone: local.timeZone ?? null,
|
||||
};
|
||||
}
|
||||
const info = await ctx.ipInfoService.lookup(parsed.normalized, {
|
||||
source: 'risk.geoip_city',
|
||||
reason: 'registration_risk',
|
||||
@@ -63,6 +82,10 @@ export function createGeoIpAsnAdapter(ctx: GeoIpAsnContext) {
|
||||
if (!parsed) {
|
||||
return {ip, available: true, found: false, asn: null, asnOrg: null};
|
||||
}
|
||||
const local = ctx.lookupLocalAsn ? await ctx.lookupLocalAsn(parsed.normalized) : null;
|
||||
if (local && local.asn !== null) {
|
||||
return {ip, available: true, found: true, asn: local.asn, asnOrg: local.asnOrg};
|
||||
}
|
||||
const info = await ctx.ipInfoService.lookup(parsed.normalized, {
|
||||
source: 'risk.geoip_asn',
|
||||
reason: 'registration_risk',
|
||||
|
||||
@@ -2,14 +2,40 @@
|
||||
|
||||
import type {IpInfoService} from '@pkgs/geoip/src/IpInfoService';
|
||||
import {isAccountPolicyEducationOrganizationName} from '../AccountPolicyService';
|
||||
import type {IpInfoPrescreenVerdict} from '../RegistrationIpPrescreen';
|
||||
import type {IpConnectionType, IpInfoAnonymousResult} from '../RiskTypes';
|
||||
|
||||
interface IpInfoCheckerContext {
|
||||
ipInfoService: IpInfoService;
|
||||
prescreen?: (ip: string) => Promise<IpInfoPrescreenVerdict>;
|
||||
}
|
||||
|
||||
export function unavailableIpInfoAnonymousResult(ip: string, riskNote: string): IpInfoAnonymousResult {
|
||||
return {
|
||||
ip,
|
||||
available: false,
|
||||
isAnonymous: false,
|
||||
providerName: null,
|
||||
isVpn: false,
|
||||
isProxy: false,
|
||||
isResidentialProxy: false,
|
||||
isTor: false,
|
||||
isRelay: false,
|
||||
isHosting: false,
|
||||
isMobile: false,
|
||||
asnType: null,
|
||||
asnOrg: null,
|
||||
connectionType: 'unknown',
|
||||
percentDaysSeen: null,
|
||||
riskNote,
|
||||
};
|
||||
}
|
||||
|
||||
export function createIpInfoChecker(ctx: IpInfoCheckerContext) {
|
||||
return async function checkIpInfo(ip: string): Promise<IpInfoAnonymousResult> {
|
||||
if (ctx.prescreen && (await ctx.prescreen(ip)) === 'skip') {
|
||||
return unavailableIpInfoAnonymousResult(ip, 'IPInfo skipped (local pre-screen)');
|
||||
}
|
||||
const result = await ctx.ipInfoService.lookup(ip, {
|
||||
source: 'risk.ipinfo_checker',
|
||||
reason: 'registration_risk',
|
||||
|
||||
@@ -344,7 +344,7 @@ describe('Message Search Permissions', () => {
|
||||
}
|
||||
expect(result.messages.length).toBe(0);
|
||||
});
|
||||
test('age-restricted guild requires include_nsfw: true', async () => {
|
||||
test('age-restricted guild is searchable by an adult member without include_nsfw', async () => {
|
||||
const owner = await createTestAccount(harness, {dateOfBirth: '2000-01-01'});
|
||||
const guild = await createGuild(harness, owner.token, 'Age Restricted Search Guild');
|
||||
const systemChannelId = guild.system_channel_id!;
|
||||
@@ -363,7 +363,7 @@ describe('Message Search Permissions', () => {
|
||||
if (!isSearchResult(excluded)) {
|
||||
expect.fail('Expected search result but got indexing response');
|
||||
}
|
||||
expect(excluded.messages.length).toBe(0);
|
||||
expect(excluded.messages.some((m) => m.channel_id === systemChannelId)).toBe(true);
|
||||
const included = await createBuilder<MessageSearchResponse>(harness, owner.token)
|
||||
.post('/search/messages')
|
||||
.body({
|
||||
@@ -379,6 +379,30 @@ describe('Message Search Permissions', () => {
|
||||
expect(included.messages.length).toBeGreaterThan(0);
|
||||
expect(included.messages.some((m) => m.channel_id === systemChannelId)).toBe(true);
|
||||
});
|
||||
test('age-restricted guild is searchable in a channel pinned to nsfw_override: false', async () => {
|
||||
const owner = await createTestAccount(harness, {dateOfBirth: '2000-01-01'});
|
||||
const guild = await createGuild(harness, owner.token, 'Age Restricted Override Guild');
|
||||
const channel = await createBuilder<{id: string; nsfw_override?: boolean | null}>(harness, owner.token)
|
||||
.post(`/guilds/${guild.id}/channels`)
|
||||
.body({name: 'override-channel', type: ChannelTypes.GUILD_TEXT, nsfw: false})
|
||||
.execute();
|
||||
expect(channel.nsfw_override).toBe(false);
|
||||
await sendChannelMessage(harness, owner.token, channel.id, 'age restricted override searchable message');
|
||||
await updateGuild(harness, owner.token, guild.id, {nsfw_level: GuildNSFWLevel.AGE_RESTRICTED});
|
||||
await markGuildChannelsAsIndexed(harness, owner.token, guild.id);
|
||||
const result = await createBuilder<MessageSearchResponse>(harness, owner.token)
|
||||
.post('/search/messages')
|
||||
.body({
|
||||
content: 'age restricted override searchable',
|
||||
context_guild_id: guild.id,
|
||||
})
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.execute();
|
||||
if (!isSearchResult(result)) {
|
||||
expect.fail('Expected search result but got indexing response');
|
||||
}
|
||||
expect(result.messages.some((m) => m.channel_id === channel.id)).toBe(true);
|
||||
});
|
||||
test('underage user cannot search messages in an age-restricted guild', async () => {
|
||||
const owner = await createTestAccount(harness, {dateOfBirth: '2000-01-01'});
|
||||
const underageMember = await createTestAccount(harness, {dateOfBirth: '2012-01-01'});
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {resetGeoipReadersForTesting} from '@pkgs/geoip/src/GeoipLookup';
|
||||
import {resetSudoModeServiceForTesting} from '../auth/services/SudoModeService';
|
||||
import {resetSsoRequestUrlPolicyForTesting} from '../instance/SsoConfigValidation';
|
||||
import {resetGlobalLimitConfigServiceForTesting} from '../limits/LimitConfigService';
|
||||
@@ -32,6 +33,7 @@ export function resetServiceStateForTesting(): void {
|
||||
torExitListCache.shutdown();
|
||||
torExitListCache.clearForTesting();
|
||||
urlBlocklistCache.resetForTesting();
|
||||
resetGeoipReadersForTesting();
|
||||
fileShaCache.resetForTesting();
|
||||
phraseBlocklistCache.resetForTesting();
|
||||
bannedAvatarHashCache.resetForTesting();
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {HttpResponse, http} from 'msw';
|
||||
|
||||
export function createIpInfoLookupHandler() {
|
||||
return http.get('https://api.ipinfo.io/lookup/:ip', ({params}) => {
|
||||
const ip = typeof params.ip === 'string' ? params.ip : '198.51.100.1';
|
||||
return HttpResponse.json({
|
||||
ip,
|
||||
geo: {
|
||||
city: 'Ashburn',
|
||||
region: 'Virginia',
|
||||
region_code: 'VA',
|
||||
country: 'United States',
|
||||
country_code: 'US',
|
||||
continent: 'North America',
|
||||
continent_code: 'NA',
|
||||
},
|
||||
as: {
|
||||
asn: 'AS64500',
|
||||
name: 'Test ISP',
|
||||
domain: 'example.com',
|
||||
type: 'isp',
|
||||
},
|
||||
anonymous: {},
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import {setupServer} from 'msw/node';
|
||||
import {createBunnyEdgeHandlers} from './handlers/BunnyEdgeHandlers';
|
||||
import {createIpInfoLookupHandler} from './handlers/IpInfoHandlers';
|
||||
import {createNcmecHandlers} from './handlers/NcmecHandlers';
|
||||
import {createOnionooDetailsHandler} from './handlers/OnionooHandlers';
|
||||
import {createOpenNsfwHandlers} from './handlers/OpenNsfwHandlers';
|
||||
@@ -11,6 +12,7 @@ export const server = setupServer(
|
||||
...createBunnyEdgeHandlers(),
|
||||
...createNcmecHandlers(),
|
||||
...createOpenNsfwHandlers(),
|
||||
createIpInfoLookupHandler(),
|
||||
createOnionooDetailsHandler(),
|
||||
createPwnedPasswordsRangeHandler(),
|
||||
);
|
||||
|
||||
@@ -441,16 +441,25 @@ function collectGuildText(doc: SearchableGuild): Array<string | null> {
|
||||
return [doc.name, doc.vanityUrlCode, doc.discoveryDescription, ...doc.discoveryTags];
|
||||
}
|
||||
|
||||
const sortGuildsByCreatedAt = sortNumericField<SearchableGuild, GuildSearchFilters>('createdAt', 'asc');
|
||||
const sortGuildsByMemberCount = sortNumericField<SearchableGuild, GuildSearchFilters>('memberCount', 'desc');
|
||||
|
||||
function sortGuilds(left: SearchableGuild, right: SearchableGuild, filters: GuildSearchFilters, query: string): number {
|
||||
const sorter = filters.sortBy === 'memberCount' ? sortGuildsByMemberCount : sortGuildsByCreatedAt;
|
||||
const delta = sorter(left, right, filters, query);
|
||||
if (delta !== 0) return delta;
|
||||
const leftId = BigInt(left.id);
|
||||
const rightId = BigInt(right.id);
|
||||
if (leftId === rightId) return 0;
|
||||
return leftId > rightId ? -1 : 1;
|
||||
}
|
||||
|
||||
class InMemoryGuildSearchService
|
||||
extends InMemorySearchServiceBase<GuildSearchFilters, SearchableGuild>
|
||||
implements IGuildSearchService
|
||||
{
|
||||
constructor() {
|
||||
super(
|
||||
matchesGuildFilters,
|
||||
collectGuildText,
|
||||
sortNumericField<SearchableGuild, GuildSearchFilters>('createdAt', 'asc'),
|
||||
);
|
||||
super(matchesGuildFilters, collectGuildText, sortGuilds);
|
||||
}
|
||||
|
||||
async indexGuild(guild: Guild, discovery?: GuildDiscoveryContext): Promise<void> {
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {afterEach, describe, expect, it} from 'vitest';
|
||||
import {setCachedDateOfBirthCollection} from '../instance/DateOfBirthCollectionCache';
|
||||
import {canUserAccessNsfwContent} from './AgeUtils';
|
||||
|
||||
const ADULT_DATE_OF_BIRTH = '1990-01-01';
|
||||
const MINOR_DATE_OF_BIRTH = '2020-01-01';
|
||||
|
||||
describe('canUserAccessNsfwContent', () => {
|
||||
afterEach(() => {
|
||||
setCachedDateOfBirthCollection(true);
|
||||
});
|
||||
|
||||
it('allows a bot whatever the instance collects', () => {
|
||||
setCachedDateOfBirthCollection(true);
|
||||
expect(canUserAccessNsfwContent({isBot: true, dateOfBirth: null})).toBe(true);
|
||||
});
|
||||
|
||||
it('allows an adult when the instance collects a date of birth', () => {
|
||||
setCachedDateOfBirthCollection(true);
|
||||
expect(canUserAccessNsfwContent({isBot: false, dateOfBirth: ADULT_DATE_OF_BIRTH})).toBe(true);
|
||||
});
|
||||
|
||||
it('blocks a minor when the instance collects a date of birth', () => {
|
||||
setCachedDateOfBirthCollection(true);
|
||||
expect(canUserAccessNsfwContent({isBot: false, dateOfBirth: MINOR_DATE_OF_BIRTH})).toBe(false);
|
||||
});
|
||||
|
||||
it('blocks a missing date of birth when the instance collects one', () => {
|
||||
setCachedDateOfBirthCollection(true);
|
||||
expect(canUserAccessNsfwContent({isBot: false, dateOfBirth: null})).toBe(false);
|
||||
});
|
||||
|
||||
it('allows a missing date of birth when the instance collects none', () => {
|
||||
setCachedDateOfBirthCollection(false);
|
||||
expect(canUserAccessNsfwContent({isBot: false, dateOfBirth: null})).toBe(true);
|
||||
});
|
||||
|
||||
it('allows an account with a minor date of birth when the instance collects none', () => {
|
||||
setCachedDateOfBirthCollection(false);
|
||||
expect(canUserAccessNsfwContent({isBot: false, dateOfBirth: MINOR_DATE_OF_BIRTH})).toBe(true);
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,7 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {instanceCollectsDateOfBirth} from '../instance/DateOfBirthCollectionCache';
|
||||
|
||||
export function calculateAge(
|
||||
dateOfBirth:
|
||||
| {
|
||||
@@ -53,5 +55,8 @@ export function canUserAccessNsfwContent(user: NsfwEligibilityUser): boolean {
|
||||
if (user.isBot) {
|
||||
return true;
|
||||
}
|
||||
if (!instanceCollectsDateOfBirth()) {
|
||||
return true;
|
||||
}
|
||||
return isUserAdult(user.dateOfBirth);
|
||||
}
|
||||
|
||||
@@ -102,6 +102,7 @@ async function parseWebhookMultipartMessageData(
|
||||
onPayloadParsed(payload) {
|
||||
parsedPayload = payload;
|
||||
},
|
||||
actor: 'webhook',
|
||||
},
|
||||
);
|
||||
if (!parsedPayload) {
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {Permissions} from '@fluxer/constants/src/ChannelConstants';
|
||||
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
||||
import {createTestAccount} from '../../auth/tests/AuthTestUtils';
|
||||
import {loadFixture} from '../../channel/tests/AttachmentTestUtils';
|
||||
import {createGuild} from '../../guild/tests/GuildTestUtils';
|
||||
import {createPermissionOverwrite} from '../../channel/tests/ChannelTestUtils';
|
||||
import {acceptInvite, addMemberRole, createGuild, createRole} from '../../guild/tests/GuildTestUtils';
|
||||
import {type ApiTestHarness, createApiTestHarness} from '../../test/ApiTestHarness';
|
||||
import {HTTP_STATUS} from '../../test/TestConstants';
|
||||
import {createWebhook, deleteWebhook, executeWebhookWithAttachments} from './WebhookTestUtils';
|
||||
import {createChannelInvite, createWebhook, deleteWebhook, executeWebhookWithAttachments} from './WebhookTestUtils';
|
||||
|
||||
describe('Webhook multipart attachment uploads', () => {
|
||||
let harness: ApiTestHarness;
|
||||
@@ -92,6 +94,36 @@ describe('Webhook multipart attachment uploads', () => {
|
||||
expect(response.status).toBe(HTTP_STATUS.BAD_REQUEST);
|
||||
await deleteWebhook(harness, webhook.id, owner.token);
|
||||
});
|
||||
it('executes multipart webhook requests when the creator is denied attach files', async () => {
|
||||
const owner = await createTestAccount(harness);
|
||||
const creator = await createTestAccount(harness);
|
||||
const guild = await createGuild(harness, owner.token, 'Webhook creator denied attach files guild');
|
||||
const channelId = guild.system_channel_id!;
|
||||
const invite = await createChannelInvite(harness, owner.token, channelId);
|
||||
await acceptInvite(harness, creator.token, invite.code);
|
||||
const webhookManagerRole = await createRole(harness, owner.token, guild.id, {
|
||||
name: 'Webhook Manager',
|
||||
permissions: Permissions.MANAGE_WEBHOOKS.toString(),
|
||||
});
|
||||
await addMemberRole(harness, owner.token, guild.id, creator.userId, webhookManagerRole.id);
|
||||
const webhook = await createWebhook(harness, channelId, creator.token, 'Denied Creator Webhook');
|
||||
await createPermissionOverwrite(harness, owner.token, channelId, creator.userId, {
|
||||
type: 1,
|
||||
allow: '0',
|
||||
deny: Permissions.ATTACH_FILES.toString(),
|
||||
});
|
||||
const {response, json} = await executeWebhookWithAttachments(harness, {
|
||||
webhookId: webhook.id,
|
||||
webhookToken: webhook.token,
|
||||
payload: {
|
||||
attachments: [{id: 0, filename: 'denied_creator.png'}],
|
||||
},
|
||||
files: [{index: 0, filename: 'denied_creator.png', data: loadFixture('yeah.png')}],
|
||||
});
|
||||
expect(response.status).toBe(HTTP_STATUS.OK);
|
||||
expect(json?.attachments?.length).toBe(1);
|
||||
await deleteWebhook(harness, webhook.id, owner.token);
|
||||
});
|
||||
it('rejects multipart webhook requests when file indices do not match metadata IDs', async () => {
|
||||
const owner = await createTestAccount(harness);
|
||||
const guild = await createGuild(harness, owner.token, 'Webhook multipart id mismatch guild');
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
|
||||
import {DELETED_USER_ID, DELETED_USER_USERNAME} from '@fluxer/constants/src/UserConstants';
|
||||
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
||||
import {createTestAccount} from '../../auth/tests/AuthTestUtils';
|
||||
@@ -13,10 +12,6 @@ import {createWebhook, executeWebhook, executeWebhookWithAttachments, getChannel
|
||||
|
||||
const VANISHED_CREATOR_ID = createUserID(999999999999999997n);
|
||||
|
||||
function parseErrorCode(text: string): string | undefined {
|
||||
return (JSON.parse(text) as {code?: string}).code;
|
||||
}
|
||||
|
||||
describe('Webhook whose creating account cannot be resolved', () => {
|
||||
let harness: ApiTestHarness;
|
||||
beforeEach(async () => {
|
||||
@@ -49,13 +44,13 @@ describe('Webhook whose creating account cannot be resolved', () => {
|
||||
expect(listed?.user.id).toBe(VANISHED_CREATOR_ID.toString());
|
||||
expect(listed?.user.username).toBe(DELETED_USER_USERNAME);
|
||||
});
|
||||
it('answers a multipart execution for a webhook with no creator id with an access decision', async () => {
|
||||
it('executes a multipart payload for a webhook with no creator id', async () => {
|
||||
const owner = await createTestAccount(harness);
|
||||
const guild = await createGuild(harness, owner.token, 'Null creator multipart guild');
|
||||
const channelId = guild.system_channel_id!;
|
||||
const webhook = await createWebhook(harness, channelId, owner.token, 'Null Creator Multipart Webhook');
|
||||
await new WebhookRepository().update(createWebhookID(BigInt(webhook.id)), {creatorId: null});
|
||||
const {response, text} = await executeWebhookWithAttachments(harness, {
|
||||
const {response, json} = await executeWebhookWithAttachments(harness, {
|
||||
webhookId: webhook.id,
|
||||
webhookToken: webhook.token,
|
||||
payload: {
|
||||
@@ -63,16 +58,16 @@ describe('Webhook whose creating account cannot be resolved', () => {
|
||||
},
|
||||
files: [{index: 0, filename: 'orphaned.txt', data: Buffer.from('uploaded by an orphaned webhook')}],
|
||||
});
|
||||
expect(response.status).toBe(HTTP_STATUS.FORBIDDEN);
|
||||
expect(parseErrorCode(text)).toBe(APIErrorCodes.ACCESS_DENIED);
|
||||
expect(response.status).toBe(HTTP_STATUS.OK);
|
||||
expect(json?.attachments?.[0].filename).toBe('orphaned.txt');
|
||||
});
|
||||
it('answers a multipart execution for a webhook whose creator row is gone with an access decision', async () => {
|
||||
it('executes a multipart payload for a webhook whose creator row is gone', async () => {
|
||||
const owner = await createTestAccount(harness);
|
||||
const guild = await createGuild(harness, owner.token, 'Vanished creator multipart guild');
|
||||
const channelId = guild.system_channel_id!;
|
||||
const webhook = await createWebhook(harness, channelId, owner.token, 'Vanished Creator Multipart Webhook');
|
||||
await new WebhookRepository().update(createWebhookID(BigInt(webhook.id)), {creatorId: VANISHED_CREATOR_ID});
|
||||
const {response, text} = await executeWebhookWithAttachments(harness, {
|
||||
const {response, json} = await executeWebhookWithAttachments(harness, {
|
||||
webhookId: webhook.id,
|
||||
webhookToken: webhook.token,
|
||||
payload: {
|
||||
@@ -80,8 +75,8 @@ describe('Webhook whose creating account cannot be resolved', () => {
|
||||
},
|
||||
files: [{index: 0, filename: 'vanished.txt', data: Buffer.from('uploaded by a vanished creator')}],
|
||||
});
|
||||
expect(response.status).toBe(HTTP_STATUS.FORBIDDEN);
|
||||
expect(parseErrorCode(text)).toBe(APIErrorCodes.ACCESS_DENIED);
|
||||
expect(response.status).toBe(HTTP_STATUS.OK);
|
||||
expect(json?.attachments?.[0].filename).toBe('vanished.txt');
|
||||
});
|
||||
it('executes a json payload for a webhook with no creator id', async () => {
|
||||
const owner = await createTestAccount(harness);
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
import {DiscoveryApplicationStatus} from '@fluxer/constants/src/DiscoveryConstants';
|
||||
import type {WorkerTaskHandler} from '@pkgs/worker/src/contracts/WorkerTask';
|
||||
import type {GuildID} from '../../BrandedTypes';
|
||||
import {GuildDiscoveryRepository} from '../../guild/repositories/GuildDiscoveryRepository';
|
||||
import {getGuildSearchService} from '../../SearchFactory';
|
||||
import {mapWithConcurrency} from '../../utils/ConcurrencyUtils';
|
||||
@@ -17,7 +16,7 @@ const syncDiscoveryIndex: WorkerTaskHandler = async (_payload, helpers) => {
|
||||
helpers.logger.warn('Search service not available, skipping discovery index sync');
|
||||
return;
|
||||
}
|
||||
const {guildRepository, gatewayService} = getWorkerDependencies();
|
||||
const {guildRepository} = getWorkerDependencies();
|
||||
const discoveryRepository = new GuildDiscoveryRepository();
|
||||
const approvedRows = await discoveryRepository.listByStatus(DiscoveryApplicationStatus.APPROVED);
|
||||
if (approvedRows.length === 0) {
|
||||
@@ -25,21 +24,6 @@ const syncDiscoveryIndex: WorkerTaskHandler = async (_payload, helpers) => {
|
||||
return;
|
||||
}
|
||||
const guildIds = approvedRows.map((row) => row.guild_id);
|
||||
let freshCounts = new Map<
|
||||
GuildID,
|
||||
{
|
||||
memberCount: number;
|
||||
onlineCount: number;
|
||||
}
|
||||
>();
|
||||
try {
|
||||
freshCounts = await gatewayService.getDiscoveryGuildCounts(guildIds);
|
||||
} catch (error) {
|
||||
helpers.logger.warn(
|
||||
{error: error instanceof Error ? error.message : String(error)},
|
||||
'Failed to fetch fresh guild counts from gateway, using database values',
|
||||
);
|
||||
}
|
||||
let synced = 0;
|
||||
for (let i = 0; i < guildIds.length; i += BATCH_SIZE) {
|
||||
const batch = guildIds.slice(i, i + BATCH_SIZE);
|
||||
@@ -54,7 +38,7 @@ const syncDiscoveryIndex: WorkerTaskHandler = async (_payload, helpers) => {
|
||||
if (!guild) return null;
|
||||
const discoveryRow = discoveryRows[index];
|
||||
if (!discoveryRow || discoveryRow.status !== DiscoveryApplicationStatus.APPROVED) return null;
|
||||
return {guild, discoveryRow, counts: freshCounts.get(guildId)};
|
||||
return {guild, discoveryRow};
|
||||
})
|
||||
.filter((update): update is NonNullable<typeof update> => update != null);
|
||||
await mapWithConcurrency(updates, UPDATE_CONCURRENCY, (update) =>
|
||||
@@ -63,7 +47,6 @@ const syncDiscoveryIndex: WorkerTaskHandler = async (_payload, helpers) => {
|
||||
categoryId: update.discoveryRow.category_type,
|
||||
primaryLanguage: update.discoveryRow.primary_language ?? null,
|
||||
tags: update.discoveryRow.custom_tags ?? [],
|
||||
memberCount: update.counts?.memberCount,
|
||||
}),
|
||||
);
|
||||
synced += updates.length;
|
||||
|
||||
@@ -7,114 +7,65 @@
|
||||
|
||||
## Fluxer modifications
|
||||
|
||||
Changes applied on top of the upstream v2.17.2 source. Previously maintained as
|
||||
a pnpm patch at `patches/[email protected]`; now maintained as regular
|
||||
source edits in this package.
|
||||
Changes applied on top of the upstream v2.17.2 source. These were previously a pnpm patch at `patches/[email protected]` and are now plain source edits in this package.
|
||||
|
||||
1. **AV1 E2EE support** (`src/e2ee/worker/av1Crypto.ts`, `FrameCryptor.ts`, `e2ee.worker.ts`)
|
||||
OBU-level AV1 encryption and decryption for end-to-end encrypted voice/video.
|
||||
|
||||
OBU-level AV1 encryption and decryption for end-to-end encrypted voice and video.
|
||||
|
||||
2. **UpdateTrackContext message** (`src/e2ee/types.ts`, worker dispatch)
|
||||
Replaced `updateCodec` with richer `updateTrackContext` carrying participant
|
||||
identity and track ID, preventing codec mismatch on track reuse.
|
||||
|
||||
`updateCodec` replaced with `updateTrackContext`, which carries participant identity and track id so a reused track cannot pick up the wrong codec.
|
||||
|
||||
3. **E2EEManager state tracking** (`src/e2ee/E2eeManager.ts`)
|
||||
Added `getE2EETransformState()` / `setE2EETransformState()` for proper
|
||||
transform lifecycle management.
|
||||
|
||||
4. **Screenshare scalability mode** (`src/room/participant/LocalParticipant.ts`)
|
||||
Preserve caller-supplied `scalabilityMode` for screen shares instead of forcing
|
||||
`L3T3_KEY`, so VP9/AV1 screen shares can use the browser's compatible default
|
||||
unless Fluxer explicitly requests an SVC layer layout.
|
||||
`getE2EETransformState()` and `setE2EETransformState()` for transform lifecycle management.
|
||||
|
||||
4. **Screen share scalability mode** (`src/room/participant/LocalParticipant.ts`)
|
||||
|
||||
A caller-supplied `scalabilityMode` is preserved for screen shares instead of being forced to `L3T3_KEY`, so VP9 and AV1 screen shares use the browser default unless Fluxer asks for a specific SVC layout.
|
||||
|
||||
5. **E2EE frame layout guards** (`src/e2ee/worker/FrameCryptor.ts`)
|
||||
Validate encrypted frame trailer, IV, tag, and clear-prefix bounds before
|
||||
constructing typed-array views, and drop malformed encrypted frames without
|
||||
tearing down the transform stream.
|
||||
|
||||
Encrypted frame trailer, IV, tag and clear-prefix bounds are validated before any typed-array view is constructed, and malformed frames are dropped without tearing down the transform stream.
|
||||
|
||||
6. **Encrypted backup codec publishing** (`src/room/participant/LocalParticipant.ts`, `src/e2ee/E2eeManager.ts`)
|
||||
Allows backup codec tracks to be advertised and published while E2EE is
|
||||
enabled, and attaches sender transforms to backup codec senders using their
|
||||
cloned media track ID and codec.
|
||||
|
||||
Backup codec tracks can be advertised and published while E2EE is on, with sender transforms attached using the cloned media track id and codec.
|
||||
|
||||
7. **Publisher codec preferences** (`src/room/RTCEngine.ts`)
|
||||
Applies `RTCRtpTransceiver.setCodecPreferences()` to publisher transceivers
|
||||
so browser SDP follows the selected primary or backup codec, and prefers
|
||||
H.264 profiles that use Chromium's external/hardware encoder before the
|
||||
OpenH264 software profile.
|
||||
|
||||
`setCodecPreferences()` is applied to publisher transceivers so the browser's SDP follows the selected primary or backup codec. H.264 profiles rank Baseline `42001f` first, then Constrained Baseline `42e01f`, then everything else. Main, High and Constrained High rank last on purpose.
|
||||
|
||||
livekit-server registers H.264 High `640032` on the publisher peer connection but filters it off the subscriber peer connection, and its `CodecParametersFuzzySearch` falls back to a mime-only match. A High publication therefore reaches subscribers under their `42e01f` payload type and decodes to nothing on a Constrained-Baseline-only decoder such as Firefox's OpenH264 GMP. `42001f` is the one profile Chromium's accelerated encoder factory advertises that such a decoder can still handle, because Chromium's VAAPI encoder and OpenH264 both write a Constrained Baseline SPS for `H264PROFILE_BASELINE`.
|
||||
|
||||
The trade is that livekit-server does not register `42001f` either, so Windows and macOS negotiate `42e01f`, which Chromium's accelerated encoder factory does not advertise there (`kPlatformH264CbpEncoding` is off by default on Windows, and `IsH264ConstrainedBaselineProfileAvailableForAcceleratedEncoder` returns false on Apple). Those publishers fall back to software H.264, which is what an unpatched browser does anyway. Linux, ChromeOS and Android keep hardware encoding.
|
||||
|
||||
8. **Media publishing defaults** (`src/room/defaults.ts`, `src/room/utils.ts`, `src/room/track/options.ts`)
|
||||
Falls back to H.264, then VP9, VP8, AV1, and HEVC/H.265 according to actual
|
||||
sender capabilities, pairs advanced codecs with H.264 backup simulcast, and
|
||||
uses maintain-resolution screen-share defaults with a 4K60-ready bitrate cap.
|
||||
The order puts AV1 and HEVC last because both are opt-in in Fluxer, so a
|
||||
fallback inside `publishTrack` must not land on a codec the user did not
|
||||
enable. Fluxer picks the codec itself before publishing, so this list only
|
||||
applies when the client overrides the request, such as the reconnect
|
||||
republish that runs outside Fluxer's own flows.
|
||||
|
||||
Codec fallback follows actual sender capabilities in the order H.264, VP9, VP8, AV1, HEVC. Advanced codecs are paired with an H.264 backup simulcast, and screen shares default to maintain-resolution with a 4K60-ready bitrate cap. AV1 and HEVC come last because both are opt-in in Fluxer, so a fallback inside `publishTrack` must not land on a codec the user did not enable. Fluxer picks the codec itself before publishing, so this order only applies when the client overrides the request, such as the reconnect republish that runs outside Fluxer's own flows.
|
||||
|
||||
9. **High-fidelity Opus SDP munging** (`src/room/PCTransport.ts`)
|
||||
Forces Opus RED/FEC, stereo signaling, 10 ms packet time, no DTX, and a
|
||||
510 kbps maximum average bitrate in local offers and remote answers.
|
||||
|
||||
Local offers and remote answers are munged to force Opus RED and FEC, 10 ms packet time, no DTX, and a 510 kbps maximum average bitrate. Stereo signalling stays opt-in. `stereo=1` and `sprop-stereo=1` are added only for publications whose `TrackBitrateInfo.stereo` is set (studio mode above the stereo bitrate threshold, and screen-share audio) and for the subscriber mids the server advertised as stereo, so a mono microphone is not encoded and decoded as a two-channel stream.
|
||||
|
||||
10. **Remote audio volume restore at exactly zero** (`src/room/track/RemoteAudioTrack.ts`)
|
||||
`attach()`, `connectWebAudio()` and `getVolume()` guarded the remembered
|
||||
`elementVolume` with a truthiness check, so a track deliberately held at `0`
|
||||
came back at full volume whenever it was re-attached or its Web Audio graph
|
||||
was rebuilt. All three guards now test `!== undefined`. Note that remote
|
||||
gains above `1.0` are only legal because `setVolume()` takes the Web Audio
|
||||
`gainNode` branch; the `el.volume` branch would throw `IndexSizeError`.
|
||||
`webAudioMix` must stay unconditional.
|
||||
|
||||
`attach()`, `connectWebAudio()` and `getVolume()` guarded the remembered `elementVolume` with a truthiness check, so a track deliberately held at `0` came back at full volume whenever it was re-attached or its Web Audio graph was rebuilt. All three now test `!== undefined`. Remote gains above `1.0` are only legal because `setVolume()` takes the Web Audio `gainNode` branch, as the `el.volume` branch would throw `IndexSizeError`, so `webAudioMix` must stay unconditional.
|
||||
|
||||
11. **Processor teardown before source stop** (`src/room/track/LocalTrack.ts`)
|
||||
`stop()` called `super.stop()` first, killing the source `MediaStreamTrack`
|
||||
and closing the readable feeding a track processor before `processor.destroy()`
|
||||
ran. A camera-effect worker therefore saw input EOF before its owner's stop
|
||||
command and reported an operational failure during an ordinary camera-off.
|
||||
The processor is now captured, detached, and its teardown initiated before
|
||||
`super.stop()`.
|
||||
|
||||
12. **Transactional source and processor swaps** (`src/room/track/LocalTrack.ts`,
|
||||
`LocalVideoTrack.ts`, `LocalAudioTrack.ts`)
|
||||
`setMediaStreamTrack()` applied the new source, restarted the processor and
|
||||
re-armed the sender with no unwind path, so a failure anywhere in the middle
|
||||
left a half-applied track: listeners moved, elements detached, sender pointing
|
||||
at a dead track. It now takes `SetMediaStreamTrackOptions`
|
||||
(`force`, `deferEndedListener`, `preservePreviousTrack`) and, on failure,
|
||||
restores the previous source, constraints, `enabled` state, listeners,
|
||||
processor and sender, throwing `TrackInvalidError` when the previous source is
|
||||
no longer `live` because an ended track cannot be restored. Both errors are
|
||||
surfaced together as an `AggregateError` when the unwind itself fails.
|
||||
`stageTrackReplacement()` / `commitStagedTrackReplacement()` expose a two-phase
|
||||
swap: the candidate becomes the active source with its `ended` listener
|
||||
deferred and the previous source preserved, and only the commit adopts the
|
||||
`ended` listener and clears the staged identity, so a caller can validate its
|
||||
publication before the swap is observable. `replaceTrack()` and `restart()`
|
||||
guard the `providedByUser` flip behind a `replacementCommitted` flag.
|
||||
`restart()` still detaches and stops the previous source before calling
|
||||
`getUserMedia()`, as upstream does, because Safari ends a freshly acquired
|
||||
track with a capture failure while the old track for the same device is
|
||||
live. `setSimulcastTrackSender()` routes an already-installed processor's
|
||||
`processedTrack` to a newly registered secondary sender so a backup codec
|
||||
never publishes raw frames while the primary is processed.
|
||||
Processor install and teardown in all three classes roll the processed/raw
|
||||
sender track back, including `LocalVideoTrack`'s secondary simulcast senders,
|
||||
and aggregate every cleanup failure instead of discarding it.
|
||||
`stop()` called `super.stop()` first, killing the source `MediaStreamTrack` and closing the readable that feeds a track processor before `processor.destroy()` ran. A camera-effect worker therefore saw input EOF before its owner's stop command and reported an operational failure during an ordinary camera-off. The processor is now captured, detached and torn down before `super.stop()`.
|
||||
|
||||
13. **Start bitrate for every video codec** (`src/room/PCTransport.ts`,
|
||||
`src/room/participant/LocalParticipant.ts`, `src/room/participant/publishUtils.ts`)
|
||||
`x-google-start-bitrate` was reachable only by AV1 and VP9, gated twice: the
|
||||
publish path registered a track bitrate only for SVC codecs, and the offer
|
||||
munging returned early for everything else. H264, H265 and VP8 therefore
|
||||
opened at the Chromium default and had to ramp, which showed up as a 3000 kbps
|
||||
screen share encoding at 346 kbps twenty seconds in. The bitrate is now
|
||||
registered for every video codec from the highest encoding
|
||||
(`maxEncodingBitrate()`, so a simulcast ladder contributes its top layer), and
|
||||
the offer munging applies the start bitrate whenever a max bitrate is known.
|
||||
The dependency descriptor extension stays SVC-only.
|
||||
`appendStartBitrateToFmtp()` holds the fmtp edit so it can be tested, and
|
||||
`setTrackCodecBitrate()` now replaces an entry for the same cid or transceiver
|
||||
instead of appending, since `trackBitrates` is never cleared.
|
||||
12. **Transactional source and processor swaps** (`src/room/track/LocalTrack.ts`, `LocalVideoTrack.ts`, `LocalAudioTrack.ts`)
|
||||
|
||||
`setMediaStreamTrack()` applied the new source, restarted the processor and re-armed the sender with no unwind path, so a failure part-way through left a half-applied track with listeners moved, elements detached and the sender pointing at a dead track. It now takes `SetMediaStreamTrackOptions` (`force`, `deferEndedListener`, `preservePreviousTrack`) and, on failure, restores the previous source, constraints, `enabled` state, listeners, processor and sender. It throws `TrackInvalidError` when the previous source is no longer `live`, because an ended track cannot be restored, and surfaces both failures as an `AggregateError` when the unwind itself fails.
|
||||
|
||||
`stageTrackReplacement()` and `commitStagedTrackReplacement()` add a two-phase swap. The candidate becomes the active source with its `ended` listener deferred and the previous source preserved, and only the commit adopts the `ended` listener and clears the staged identity, so a caller can validate its publication before the swap is observable. `replaceTrack()` and `restart()` guard the `providedByUser` flip behind a `replacementCommitted` flag. `restart()` still detaches and stops the previous source before calling `getUserMedia()`, as upstream does, because Safari ends a freshly acquired track with a capture failure while the old track for the same device is still live. `setSimulcastTrackSender()` routes an installed processor's `processedTrack` to a newly registered secondary sender so a backup codec never publishes raw frames while the primary is processed. Processor install and teardown in all three classes roll the processed and raw sender track back, including `LocalVideoTrack`'s secondary simulcast senders, and aggregate every cleanup failure instead of discarding it.
|
||||
|
||||
13. **Start bitrate for every video codec** (`src/room/PCTransport.ts`, `src/room/participant/LocalParticipant.ts`, `src/room/participant/publishUtils.ts`)
|
||||
|
||||
`x-google-start-bitrate` was reachable only by AV1 and VP9 because it was gated twice. The publish path registered a track bitrate only for SVC codecs, and the offer munging returned early for everything else. H.264, H.265 and VP8 therefore opened at the Chromium default and had to ramp, which showed up as a 3000 kbps screen share encoding at 346 kbps twenty seconds in. The bitrate is now registered for every video codec from the highest encoding (`maxEncodingBitrate()`, so a simulcast ladder contributes its top layer), and the offer munging applies it whenever a max bitrate is known. The dependency descriptor extension stays SVC-only. `appendStartBitrateToFmtp()` holds the fmtp edit so it can be tested, and `setTrackCodecBitrate()` replaces an entry for the same cid or transceiver instead of appending, since `trackBitrates` is never cleared.
|
||||
|
||||
## Updating from upstream
|
||||
|
||||
|
||||
@@ -3,12 +3,43 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
import type {MediaDescription} from 'sdp-transform';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
import {appendStartBitrateToFmtp} from './PCTransport.ts';
|
||||
import type {TrackBitrateInfo} from './PCTransport.ts';
|
||||
import {appendStartBitrateToFmtp, collectStereoMids, ensureAudioNackAndStereo, ensureOpusFmtp} from './PCTransport.ts';
|
||||
|
||||
function mediaWithFmtp(entries: Array<{payload: number; config: string}>): MediaDescription {
|
||||
return {fmtp: entries} as unknown as MediaDescription;
|
||||
}
|
||||
|
||||
function opusMedia(config: string, mid = '0'): MediaDescription {
|
||||
return {
|
||||
type: 'audio',
|
||||
mid,
|
||||
port: 9,
|
||||
protocol: 'UDP/TLS/RTP/SAVPF',
|
||||
rtp: [{payload: 109, codec: 'opus', rate: 48000, encoding: 2}],
|
||||
fmtp: [{payload: 109, config}],
|
||||
} as unknown as MediaDescription;
|
||||
}
|
||||
|
||||
function offerMedia(mid: string, trackId: string): MediaDescription {
|
||||
const media = opusMedia('useinbandfec=1', mid);
|
||||
media.msid = `- ${trackId}`;
|
||||
return media;
|
||||
}
|
||||
|
||||
function audioBitrateInfo(mid: string | null, trackId: string, stereo: boolean): TrackBitrateInfo {
|
||||
return {
|
||||
transceiver: {mid, sender: {track: {id: trackId}}} as unknown as RTCRtpTransceiver,
|
||||
codec: 'opus',
|
||||
maxbr: 320,
|
||||
stereo,
|
||||
};
|
||||
}
|
||||
|
||||
function opusConfig(media: MediaDescription): string {
|
||||
return media.fmtp.find((fmtp) => fmtp.payload === 109)?.config ?? '';
|
||||
}
|
||||
|
||||
describe('appendStartBitrateToFmtp', () => {
|
||||
it('appends the start bitrate to a non-SVC codec fmtp line', () => {
|
||||
const media = mediaWithFmtp([
|
||||
@@ -44,3 +75,72 @@ describe('appendStartBitrateToFmtp', () => {
|
||||
expect(media.fmtp[0]?.config).toBe('profile-level-id=42e01f');
|
||||
});
|
||||
});
|
||||
|
||||
describe('ensureOpusFmtp', () => {
|
||||
it('does not force stereo on a mono publication', () => {
|
||||
const media = opusMedia('maxplaybackrate=48000;stereo=0;useinbandfec=1');
|
||||
ensureOpusFmtp(media, 48000, false);
|
||||
const config = opusConfig(media);
|
||||
expect(config).toContain('minptime=10');
|
||||
expect(config).toContain('useinbandfec=1');
|
||||
expect(config).toContain('usedtx=0');
|
||||
expect(config).toContain('maxaveragebitrate=48000');
|
||||
expect(config).not.toContain('stereo=1');
|
||||
});
|
||||
|
||||
it('keeps stereo for a stereo publication', () => {
|
||||
const media = opusMedia('maxplaybackrate=48000;useinbandfec=1');
|
||||
ensureOpusFmtp(media, 320000, true);
|
||||
const config = opusConfig(media);
|
||||
expect(config).toContain('stereo=1');
|
||||
expect(config).toContain('sprop-stereo=1');
|
||||
expect(config).toContain('maxaveragebitrate=320000');
|
||||
});
|
||||
|
||||
it('preserves a stereo parameter the server negotiated', () => {
|
||||
const media = opusMedia('minptime=10;stereo=1');
|
||||
ensureOpusFmtp(media, 48000, false);
|
||||
expect(opusConfig(media)).toContain('stereo=1');
|
||||
});
|
||||
});
|
||||
|
||||
describe('ensureAudioNackAndStereo', () => {
|
||||
it('only stamps stereo on the listed mids', () => {
|
||||
const mono = opusMedia('useinbandfec=1', '0');
|
||||
ensureAudioNackAndStereo(mono as never, ['1'], []);
|
||||
expect(opusConfig(mono)).not.toContain('stereo=1');
|
||||
|
||||
const stereo = opusMedia('useinbandfec=1', '1');
|
||||
ensureAudioNackAndStereo(stereo as never, ['1'], []);
|
||||
expect(opusConfig(stereo)).toContain('stereo=1');
|
||||
expect(opusConfig(stereo)).toContain('sprop-stereo=1');
|
||||
});
|
||||
});
|
||||
|
||||
describe('collectStereoMids', () => {
|
||||
it('matches the offer media section by msid before the transceiver has a mid', () => {
|
||||
const media = [offerMedia('0', 'mic-track'), offerMedia('1', 'screenshare-track')];
|
||||
expect(collectStereoMids([audioBitrateInfo(null, 'screenshare-track', true)], media)).toEqual(['1']);
|
||||
});
|
||||
|
||||
it('stamps stereo on the first offer for a new stereo publication', () => {
|
||||
const media = [offerMedia('0', 'mic-track'), offerMedia('1', 'screenshare-track')];
|
||||
const stereoMids = collectStereoMids([audioBitrateInfo(null, 'screenshare-track', true)], media);
|
||||
for (const m of media) {
|
||||
ensureAudioNackAndStereo(m as never, stereoMids, []);
|
||||
}
|
||||
expect(opusConfig(media[0]!)).not.toContain('stereo=1');
|
||||
expect(opusConfig(media[1]!)).toContain('stereo=1');
|
||||
expect(opusConfig(media[1]!)).toContain('sprop-stereo=1');
|
||||
});
|
||||
|
||||
it('uses the assigned mid once renegotiation has one', () => {
|
||||
const media = [offerMedia('0', 'mic-track'), offerMedia('1', 'screenshare-track')];
|
||||
expect(collectStereoMids([audioBitrateInfo('1', 'screenshare-track', true)], media)).toEqual(['1']);
|
||||
});
|
||||
|
||||
it('leaves mono publications out', () => {
|
||||
const media = [offerMedia('0', 'mic-track')];
|
||||
expect(collectStereoMids([audioBitrateInfo(null, 'mic-track', false)], media)).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -11,11 +11,12 @@ import {NegotiationError, UnexpectedConnectionState} from './errors.ts';
|
||||
import type {LoggerOptions} from './types.ts';
|
||||
import {ddExtensionURI, isFireFox, isSafari, isSVCCodec} from './utils.ts';
|
||||
|
||||
interface TrackBitrateInfo {
|
||||
export interface TrackBitrateInfo {
|
||||
cid?: string;
|
||||
transceiver?: RTCRtpTransceiver;
|
||||
codec: string;
|
||||
maxbr: number;
|
||||
stereo?: boolean;
|
||||
}
|
||||
|
||||
const startBitrateFraction = 0.7;
|
||||
@@ -25,8 +26,6 @@ const requiredOpusFmtpParameters = {
|
||||
minptime: '10',
|
||||
useinbandfec: '1',
|
||||
usedtx: '0',
|
||||
stereo: '1',
|
||||
'sprop-stereo': '1',
|
||||
};
|
||||
const debounceInterval = 20;
|
||||
export const PCEvents = {
|
||||
@@ -156,20 +155,18 @@ export default class PCTransport extends EventEmitter {
|
||||
sdpParsed.media.forEach((media) => {
|
||||
const mid = getMidString(media.mid!);
|
||||
if (media.type === 'audio') {
|
||||
ensureOpusFmtp(media);
|
||||
this.trackBitrates.some((trackbr): boolean => {
|
||||
if (!trackbr.transceiver || mid !== trackbr.transceiver.mid) {
|
||||
return false;
|
||||
}
|
||||
const codecPayload = getCodecPayload(media, trackbr.codec);
|
||||
if (codecPayload === 0) {
|
||||
return true;
|
||||
}
|
||||
if (trackbr.codec.toLowerCase() === 'opus') {
|
||||
ensureOpusFmtp(media, trackbr.maxbr > 0 ? trackbr.maxbr * 1000 : opusMaxAverageBitrateBps);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
const trackbr = this.trackBitrates.find(
|
||||
(br) => br.transceiver !== undefined && mid === br.transceiver.mid && br.codec.toLowerCase() === 'opus',
|
||||
);
|
||||
if (trackbr && getCodecPayload(media, trackbr.codec) !== 0) {
|
||||
ensureOpusFmtp(
|
||||
media,
|
||||
trackbr.maxbr > 0 ? trackbr.maxbr * 1000 : opusMaxAverageBitrateBps,
|
||||
trackbr.stereo === true,
|
||||
);
|
||||
} else {
|
||||
ensureOpusFmtp(media);
|
||||
}
|
||||
}
|
||||
});
|
||||
mungedSDP = write(sdpParsed);
|
||||
@@ -240,10 +237,11 @@ export default class PCTransport extends EventEmitter {
|
||||
const offer = await this.pc.createOffer(options);
|
||||
this.log.debug('original offer', {sdp: offer.sdp, ...this.logContext});
|
||||
const sdpParsed = parse(offer.sdp ?? '');
|
||||
const stereoMids = collectStereoMids(this.trackBitrates, sdpParsed.media);
|
||||
sdpParsed.media.forEach((media) => {
|
||||
ensureIPAddrMatchVersion(media);
|
||||
if (media.type === 'audio') {
|
||||
ensureAudioNackAndStereo(media, ['all'], []);
|
||||
ensureAudioNackAndStereo(media, stereoMids, []);
|
||||
} else if (media.type === 'video') {
|
||||
this.trackBitrates.some((trackbr): boolean => {
|
||||
if (!media.msid || !trackbr.cid || !media.msid.includes(trackbr.cid)) {
|
||||
@@ -587,7 +585,11 @@ function ensureAudioRedFmtp(media: MediaDescription, opusPayload: number): void
|
||||
}
|
||||
}
|
||||
|
||||
function ensureOpusFmtp(media: MediaDescription, maxAverageBitrateBps: number = opusMaxAverageBitrateBps): number {
|
||||
export function ensureOpusFmtp(
|
||||
media: MediaDescription,
|
||||
maxAverageBitrateBps: number = opusMaxAverageBitrateBps,
|
||||
stereo = false,
|
||||
): number {
|
||||
const opusPayload = getCodecPayload(media, 'opus');
|
||||
if (opusPayload <= 0) return 0;
|
||||
media.ptime = opusPacketTimeMs;
|
||||
@@ -596,6 +598,10 @@ function ensureOpusFmtp(media: MediaDescription, maxAverageBitrateBps: number =
|
||||
for (const [key, value] of Object.entries(requiredOpusFmtpParameters)) {
|
||||
config = setFmtpParameter(config, key, value);
|
||||
}
|
||||
if (stereo) {
|
||||
config = setFmtpParameter(config, 'stereo', '1');
|
||||
config = setFmtpParameter(config, 'sprop-stereo', '1');
|
||||
}
|
||||
if (maxAverageBitrateBps > 0) {
|
||||
config = setFmtpParameter(config, 'maxaveragebitrate', String(maxAverageBitrateBps));
|
||||
}
|
||||
@@ -604,18 +610,18 @@ function ensureOpusFmtp(media: MediaDescription, maxAverageBitrateBps: number =
|
||||
return opusPayload;
|
||||
}
|
||||
|
||||
function ensureAudioNackAndStereo(
|
||||
export function ensureAudioNackAndStereo(
|
||||
media: {
|
||||
type: string;
|
||||
port: number;
|
||||
protocol: string;
|
||||
payloads?: string | undefined;
|
||||
} & MediaDescription,
|
||||
_stereoMids: Array<string>,
|
||||
stereoMids: Array<string>,
|
||||
nackMids: Array<string>,
|
||||
) {
|
||||
const mid = getMidString(media.mid!);
|
||||
const opusPayload = ensureOpusFmtp(media);
|
||||
const opusPayload = ensureOpusFmtp(media, opusMaxAverageBitrateBps, stereoMids.includes(mid));
|
||||
if (opusPayload > 0) {
|
||||
if (!media.rtcpFb) {
|
||||
media.rtcpFb = [];
|
||||
@@ -629,6 +635,32 @@ function ensureAudioNackAndStereo(
|
||||
}
|
||||
}
|
||||
|
||||
export function collectStereoMids(
|
||||
trackBitrates: Array<TrackBitrateInfo>,
|
||||
media: Array<MediaDescription>,
|
||||
): Array<string> {
|
||||
const stereoMids: Array<string> = [];
|
||||
for (const trackbr of trackBitrates) {
|
||||
if (trackbr.stereo !== true || !trackbr.transceiver) {
|
||||
continue;
|
||||
}
|
||||
if (trackbr.transceiver.mid) {
|
||||
stereoMids.push(getMidString(trackbr.transceiver.mid));
|
||||
continue;
|
||||
}
|
||||
const trackId = trackbr.transceiver.sender.track?.id;
|
||||
if (trackId === undefined) {
|
||||
continue;
|
||||
}
|
||||
for (const m of media) {
|
||||
if (m.type === 'audio' && m.mid !== undefined && m.msid?.includes(trackId)) {
|
||||
stereoMids.push(getMidString(m.mid));
|
||||
}
|
||||
}
|
||||
}
|
||||
return stereoMids;
|
||||
}
|
||||
|
||||
function extractStereoAndNackAudioFromOffer(offer: RTCSessionDescriptionInit): {
|
||||
stereoMids: Array<string>;
|
||||
nackMids: Array<string>;
|
||||
|
||||
@@ -27,7 +27,59 @@ describe('selectPublisherCodecPreferences', () => {
|
||||
const highProfile = codec('video/H264', 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f');
|
||||
const rtx = codec('video/rtx');
|
||||
const preferences = selectPublisherCodecPreferences('h264', [openH264, rtx, externalBaseline, highProfile]);
|
||||
expect(preferences).toEqual([externalBaseline, highProfile, openH264, rtx]);
|
||||
expect(preferences).toEqual([externalBaseline, openH264, highProfile, rtx]);
|
||||
});
|
||||
|
||||
it('ranks Constrained Baseline above Main, High and Constrained High', () => {
|
||||
const constrainedBaseline = codec(
|
||||
'video/H264',
|
||||
'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f',
|
||||
);
|
||||
const mainProfile = codec('video/H264', 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f');
|
||||
const highProfileLevel31 = codec(
|
||||
'video/H264',
|
||||
'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f',
|
||||
);
|
||||
const highProfileLevel51 = codec(
|
||||
'video/H264',
|
||||
'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640033',
|
||||
);
|
||||
const constrainedHigh = codec(
|
||||
'video/H264',
|
||||
'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640c1f',
|
||||
);
|
||||
const preferences = selectPublisherCodecPreferences('h264', [
|
||||
mainProfile,
|
||||
highProfileLevel31,
|
||||
highProfileLevel51,
|
||||
constrainedHigh,
|
||||
constrainedBaseline,
|
||||
]);
|
||||
expect(preferences).toEqual([
|
||||
constrainedBaseline,
|
||||
mainProfile,
|
||||
highProfileLevel31,
|
||||
highProfileLevel51,
|
||||
constrainedHigh,
|
||||
]);
|
||||
});
|
||||
|
||||
it('keeps Constrained Baseline packetization-mode=1 ahead of Constrained Baseline packetization-mode=0 and High', () => {
|
||||
const constrainedBaselineMode0 = codec(
|
||||
'video/H264',
|
||||
'level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f',
|
||||
);
|
||||
const constrainedBaselineMode1 = codec(
|
||||
'video/H264',
|
||||
'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f',
|
||||
);
|
||||
const highProfile = codec('video/H264', 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640033');
|
||||
const preferences = selectPublisherCodecPreferences('h264', [
|
||||
highProfile,
|
||||
constrainedBaselineMode0,
|
||||
constrainedBaselineMode1,
|
||||
]);
|
||||
expect(preferences).toEqual([constrainedBaselineMode1, constrainedBaselineMode0, highProfile]);
|
||||
});
|
||||
|
||||
it('keeps non-H.264 codecs in browser capability order and appends RTX', () => {
|
||||
|
||||
@@ -96,7 +96,7 @@ const videoCodecMimeTypes: Record<VideoCodec, Array<string>> = {
|
||||
vp8: ['video/vp8'],
|
||||
};
|
||||
const h264OpenH264ProfileLevelId = '42e01f';
|
||||
const h264PreferredHardwareProfileLevelIds = new Set(['42001f', '4d001f', '64001f']);
|
||||
const h264PreferredHardwareProfileLevelIds = new Set(['42001f']);
|
||||
type RtpCodecCapability = RTCRtpCapabilities['codecs'][number] & {sdpFmtpLine?: string};
|
||||
|
||||
enum PCState {
|
||||
@@ -1656,8 +1656,8 @@ function getH264PublisherCodecScore(codec: RtpCodecCapability): number {
|
||||
const packetizationMode = getFmtpParameter(codec.sdpFmtpLine, 'packetization-mode');
|
||||
const packetizationScore = packetizationMode === '1' ? 0 : 1;
|
||||
if (profileLevelId && h264PreferredHardwareProfileLevelIds.has(profileLevelId)) return packetizationScore;
|
||||
if (profileLevelId && profileLevelId !== h264OpenH264ProfileLevelId) return 10 + packetizationScore;
|
||||
if (profileLevelId === h264OpenH264ProfileLevelId) return 20 + packetizationScore;
|
||||
if (profileLevelId === h264OpenH264ProfileLevelId) return 10 + packetizationScore;
|
||||
if (profileLevelId) return 20 + packetizationScore;
|
||||
return 30 + packetizationScore;
|
||||
}
|
||||
|
||||
|
||||
@@ -1040,6 +1040,7 @@ export default class LocalParticipant extends Participant {
|
||||
transceiver: trackTransceiver,
|
||||
codec: 'opus',
|
||||
maxbr: encodings[0]?.maxBitrate ? encodings[0].maxBitrate / 1000 : 0,
|
||||
stereo: isStereo,
|
||||
});
|
||||
}
|
||||
} else if (track.codec) {
|
||||
|
||||
@@ -25,7 +25,6 @@ import * as ModalCommands from '@app/features/ui/commands/ModalCommands';
|
||||
import {modal} from '@app/features/ui/commands/ModalCommands';
|
||||
import * as PopoutCommands from '@app/features/ui/commands/PopoutCommands';
|
||||
import * as TextCopyCommands from '@app/features/ui/commands/TextCopyCommands';
|
||||
import * as ToastCommands from '@app/features/ui/commands/ToastCommands';
|
||||
import {MockAvatar} from '@app/features/ui/components/MockAvatar';
|
||||
import {StatusIndicator} from '@app/features/ui/components/StatusIndicator';
|
||||
import FocusRing from '@app/features/ui/focus_ring/FocusRing';
|
||||
@@ -52,9 +51,8 @@ import Users from '@app/features/user/state/Users';
|
||||
import * as NicknameUtils from '@app/features/user/utils/NicknameUtils';
|
||||
import * as ProfileDisplayUtils from '@app/features/user/utils/ProfileDisplayUtils';
|
||||
import {createMockProfile} from '@app/features/user/utils/ProfileUtils';
|
||||
import {COPIED_STATS_JSON_DESCRIPTOR} from '@app/features/voice/components/StatsForNerdsCopyDescriptors';
|
||||
import {copyVoiceDiagnostics} from '@app/features/voice/commands/VoiceDiagnosticsCommands';
|
||||
import MediaEngine from '@app/features/voice/engine/MediaEngineFacade';
|
||||
import {buildStatsForNerdsCopyPayload, collectStatsForNerdsSnapshot} from '@app/features/voice/utils/StatsForNerdsCopy';
|
||||
import {MEDIA_PROXY_PROFILE_BANNER_SIZE_POPOUT} from '@fluxer/constants/src/MediaProxyAssetSizes';
|
||||
import {StatusTypes} from '@fluxer/constants/src/StatusConstants';
|
||||
import type {MessageDescriptor} from '@lingui/core';
|
||||
@@ -462,12 +460,7 @@ export const UserAreaPopout = observer(() => {
|
||||
});
|
||||
}, [i18n]);
|
||||
const handleCopyStats = useCallback(() => {
|
||||
const data = collectStatsForNerdsSnapshot();
|
||||
void buildStatsForNerdsCopyPayload(data).then((payload) => {
|
||||
void navigator.clipboard.writeText(JSON.stringify(payload, null, 2)).then(() => {
|
||||
ToastCommands.createToast({type: 'success', children: i18n._(COPIED_STATS_JSON_DESCRIPTOR)});
|
||||
});
|
||||
});
|
||||
void copyVoiceDiagnostics(i18n);
|
||||
}, [i18n]);
|
||||
const handleCopyUserTag = useCallback(() => {
|
||||
if (!currentUser) {
|
||||
|
||||
@@ -1277,6 +1277,7 @@ const SKELETON_NAGBAR_ROW_SHAPES: Record<NagbarType, SkeletonNagbarRowShape> = {
|
||||
[NagbarType.PREMIUM_ONBOARDING]: {tone: SkeletonNagbarTone.BRAND, hasActions: true},
|
||||
[NagbarType.GIFT_INVENTORY]: {tone: SkeletonNagbarTone.BRAND, hasActions: true},
|
||||
[NagbarType.DESKTOP_DOWNLOAD]: {tone: SkeletonNagbarTone.BRAND, hasActions: true},
|
||||
[NagbarType.DESKTOP_UPDATE_READY]: {tone: SkeletonNagbarTone.BRAND, hasActions: true},
|
||||
[NagbarType.GUILD_MEMBERSHIP_CTA]: {tone: SkeletonNagbarTone.BRAND, hasActions: true},
|
||||
[NagbarType.VISIONARY_MFA]: {tone: SkeletonNagbarTone.BRAND, hasActions: true},
|
||||
[NagbarType.VOICE_SESSION_RESTORE]: {tone: SkeletonNagbarTone.VOICE, hasActions: true},
|
||||
|
||||
@@ -11,6 +11,7 @@ import Config from '@app/features/app/config/Config';
|
||||
import {isClientReconnecting} from '@app/features/app/state/ClientReadiness';
|
||||
import Initialization from '@app/features/app/state/Initialization';
|
||||
import RuntimeConfig from '@app/features/app/state/RuntimeConfig';
|
||||
import Updater from '@app/features/app/state/Updater';
|
||||
import Authentication from '@app/features/auth/state/Authentication';
|
||||
import Channels from '@app/features/channel/state/Channels';
|
||||
import DeveloperOptions from '@app/features/devtools/state/DeveloperOptions';
|
||||
@@ -230,6 +231,7 @@ export const useNagbarConditions = (): NagbarConditions => {
|
||||
const canShowLinuxInputAccess = NativePermission.shouldShowLinuxInputAccessNagbar;
|
||||
const canShowSoftwareEncoder = SoftwareEncoderWarning.showWarning;
|
||||
const canShowStreamerMode = StreamerMode.shouldShowNagbar;
|
||||
const canShowDesktopUpdateReady = Updater.shouldShowUpdateReadyNagbar;
|
||||
const canShowBuildEnvironment =
|
||||
!BUILD_ENVIRONMENT_HIDDEN_RELEASE_CHANNELS.has(Config.PUBLIC_RELEASE_CHANNEL) &&
|
||||
!nagbarState.buildEnvironmentDismissedThisSession;
|
||||
@@ -288,6 +290,7 @@ export const useNagbarConditions = (): NagbarConditions => {
|
||||
canShowLinuxInputAccess,
|
||||
canShowSoftwareEncoder,
|
||||
canShowStreamerMode,
|
||||
canShowDesktopUpdateReady,
|
||||
};
|
||||
};
|
||||
export const useActiveNagbars = (conditions: NagbarConditions): Array<NagbarState> => {
|
||||
@@ -407,6 +410,12 @@ export const useActiveNagbars = (conditions: NagbarConditions): Array<NagbarStat
|
||||
visible: conditions.canShowStreamerMode,
|
||||
dismissible: true,
|
||||
},
|
||||
{
|
||||
type: NagbarType.DESKTOP_UPDATE_READY,
|
||||
priority: -1.5,
|
||||
visible: conditions.canShowDesktopUpdateReady,
|
||||
dismissible: true,
|
||||
},
|
||||
];
|
||||
return selectVisibleNagbars(nagbars);
|
||||
}, [conditions]);
|
||||
|
||||
@@ -15,6 +15,7 @@ export const NagbarType = {
|
||||
PREMIUM_ONBOARDING: 'premium-onboarding',
|
||||
GIFT_INVENTORY: 'gift-inventory',
|
||||
DESKTOP_DOWNLOAD: 'desktop-download',
|
||||
DESKTOP_UPDATE_READY: 'desktop-update-ready',
|
||||
GUILD_MEMBERSHIP_CTA: 'guild-membership-cta',
|
||||
VISIONARY_MFA: 'visionary-mfa',
|
||||
VOICE_SESSION_RESTORE: 'voice-session-restore',
|
||||
@@ -50,6 +51,7 @@ export interface NagbarConditions {
|
||||
canShowPremiumOnboarding: boolean;
|
||||
canShowGiftInventory: boolean;
|
||||
canShowDesktopDownload: boolean;
|
||||
canShowDesktopUpdateReady: boolean;
|
||||
canShowGuildMembershipCta: boolean;
|
||||
canShowVisionaryMfa: boolean;
|
||||
canShowVoiceSessionRestore: boolean;
|
||||
|
||||
@@ -7,6 +7,7 @@ import {ConnectionNagbar} from '@app/features/app/components/layout/app_layout/n
|
||||
import {CorruptedInstallationNagbar} from '@app/features/app/components/layout/app_layout/nagbars/CorruptedInstallationNagbar';
|
||||
import {DesktopDownloadNagbar} from '@app/features/app/components/layout/app_layout/nagbars/DesktopDownloadNagbar';
|
||||
import {DesktopNotificationNagbar} from '@app/features/app/components/layout/app_layout/nagbars/DesktopNotificationNagbar';
|
||||
import {DesktopUpdateReadyNagbar} from '@app/features/app/components/layout/app_layout/nagbars/DesktopUpdateReadyNagbar';
|
||||
import {EmailVerificationNagbar} from '@app/features/app/components/layout/app_layout/nagbars/EmailVerificationNagbar';
|
||||
import {GiftInventoryNagbar} from '@app/features/app/components/layout/app_layout/nagbars/GiftInventoryNagbar';
|
||||
import {GuildMembershipCtaNagbar} from '@app/features/app/components/layout/app_layout/nagbars/GuildMembershipCtaNagbar';
|
||||
@@ -153,6 +154,14 @@ export const NagbarContainer: React.FC<NagbarContainerProps> = observer(({nagbar
|
||||
data-flx="app.app-layout.nagbar-container.desktop-download-nagbar"
|
||||
/>
|
||||
);
|
||||
case NagbarType.DESKTOP_UPDATE_READY:
|
||||
return (
|
||||
<DesktopUpdateReadyNagbar
|
||||
key={nagbar.type}
|
||||
isMobile={mobileLayout.enabled}
|
||||
data-flx="app.app-layout.nagbar-container.desktop-update-ready-nagbar"
|
||||
/>
|
||||
);
|
||||
case NagbarType.GUILD_MEMBERSHIP_CTA:
|
||||
return (
|
||||
<GuildMembershipCtaNagbar
|
||||
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {Nagbar} from '@app/features/app/components/layout/Nagbar';
|
||||
import {NagbarButton} from '@app/features/app/components/layout/NagbarButton';
|
||||
import {NagbarContent} from '@app/features/app/components/layout/NagbarContent';
|
||||
import {NAGBAR_TONES, NagbarToneKind} from '@app/features/app/components/layout/NagbarTones';
|
||||
import {PRODUCT_NAME} from '@app/features/app/config/I18nDisplayConstants';
|
||||
import Updater from '@app/features/app/state/Updater';
|
||||
import {
|
||||
DESKTOP_VERSION_HAS_BEEN_DOWNLOADED_DESCRIPTOR,
|
||||
RESTART_FLUXER_DESCRIPTOR,
|
||||
THE_DESKTOP_UPDATE_HAS_BEEN_DOWNLOADED_DESCRIPTOR,
|
||||
} from '@app/features/updater/commands/UpdaterModalCommands';
|
||||
import {useLingui} from '@lingui/react/macro';
|
||||
import {observer} from 'mobx-react-lite';
|
||||
|
||||
export const DesktopUpdateReadyNagbar = observer(({isMobile}: {isMobile: boolean}) => {
|
||||
const {i18n} = useLingui();
|
||||
const version = Updater.updateInfo.native.version;
|
||||
return (
|
||||
<Nagbar
|
||||
isMobile={isMobile}
|
||||
backgroundColor={NAGBAR_TONES[NagbarToneKind.BRAND].backgroundColor}
|
||||
textColor={NAGBAR_TONES[NagbarToneKind.BRAND].textColor}
|
||||
dismissible
|
||||
onDismiss={Updater.dismissUpdateReadyNagbar}
|
||||
data-flx="app.app-layout.nagbars.desktop-update-ready-nagbar.nagbar"
|
||||
>
|
||||
<NagbarContent
|
||||
isMobile={isMobile}
|
||||
onDismiss={Updater.dismissUpdateReadyNagbar}
|
||||
message={
|
||||
version
|
||||
? i18n._(DESKTOP_VERSION_HAS_BEEN_DOWNLOADED_DESCRIPTOR, {version, productName: PRODUCT_NAME})
|
||||
: i18n._(THE_DESKTOP_UPDATE_HAS_BEEN_DOWNLOADED_DESCRIPTOR, {productName: PRODUCT_NAME})
|
||||
}
|
||||
actions={
|
||||
<NagbarButton
|
||||
isMobile={isMobile}
|
||||
onClick={() => void Updater.applyUpdate()}
|
||||
data-flx="app.app-layout.nagbars.desktop-update-ready-nagbar.restart-button"
|
||||
>
|
||||
{i18n._(RESTART_FLUXER_DESCRIPTOR, {productName: PRODUCT_NAME})}
|
||||
</NagbarButton>
|
||||
}
|
||||
data-flx="app.app-layout.nagbars.desktop-update-ready-nagbar.nagbar-content"
|
||||
/>
|
||||
</Nagbar>
|
||||
);
|
||||
});
|
||||
@@ -430,7 +430,7 @@ export const SelfHostedSetupWizardGate = observer(() => {
|
||||
const [submitError, setSubmitError] = useState<string | null>(null);
|
||||
const [stepNavigationLocked, setStepNavigationLocked] = useState(false);
|
||||
const [wizardSnapshot, setWizardSnapshot] = useState(createSetupWizardSnapshot);
|
||||
const [setupTheme, setSetupTheme] = useState<ThemeType>(ThemeTypes.SYSTEM);
|
||||
const [setupTheme, setSetupTheme] = useState<ThemeType>(ThemeTypes.DARK);
|
||||
const [forceUnauthenticatedSetup, setForceUnauthenticatedSetup] = useState(false);
|
||||
const [integrationDraft, setIntegrationDraft] = useState<ServiceIntegrationDraft>(() => ({
|
||||
...DEFAULT_INTEGRATION_DRAFT,
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
// @vitest-environment happy-dom
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {useAntiShiftFloating} from '@app/features/app/hooks/useAntiShiftFloating';
|
||||
import {act, createElement, useLayoutEffect, useState} from 'react';
|
||||
import {createRoot, type Root} from 'react-dom/client';
|
||||
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
|
||||
|
||||
let host: HTMLDivElement;
|
||||
let root: Root;
|
||||
let target: HTMLDivElement;
|
||||
|
||||
function PortalLikeFloating({onReady}: {onReady: (isReady: boolean) => void}) {
|
||||
const {setFloating, state} = useAntiShiftFloating(target, true, {placement: 'top'});
|
||||
const [mounted, setMounted] = useState(false);
|
||||
useLayoutEffect(() => {
|
||||
setMounted(true);
|
||||
}, []);
|
||||
onReady(state.isReady);
|
||||
return mounted ? createElement('div', {ref: setFloating, 'data-testid': 'floating'}) : null;
|
||||
}
|
||||
|
||||
async function settle(): Promise<void> {
|
||||
for (let attempt = 0; attempt < 20; attempt += 1) {
|
||||
await act(async () => {
|
||||
await new Promise((resolve) => requestAnimationFrame(() => resolve(null)));
|
||||
await Promise.resolve();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
host = document.createElement('div');
|
||||
target = document.createElement('div');
|
||||
document.body.append(host, target);
|
||||
root = createRoot(host);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
act(() => {
|
||||
root.unmount();
|
||||
});
|
||||
document.body.replaceChildren();
|
||||
});
|
||||
|
||||
describe('useAntiShiftFloating', () => {
|
||||
it('positions a floating element that mounts after the first commit', async () => {
|
||||
const readyStates: Array<boolean> = [];
|
||||
act(() => {
|
||||
root.render(createElement(PortalLikeFloating, {onReady: (isReady) => readyStates.push(isReady)}));
|
||||
});
|
||||
await settle();
|
||||
expect(readyStates.at(-1)).toBe(true);
|
||||
expect(host.querySelector<HTMLElement>('[data-testid="floating"]')?.style.visibility).toBe('visible');
|
||||
});
|
||||
});
|
||||
@@ -279,6 +279,11 @@ export function useAntiShiftFloating(
|
||||
constrainHeight = false,
|
||||
} = options;
|
||||
const floatingRef = useRef<HTMLElement>(null);
|
||||
const [floatingElement, setFloatingElement] = useState<HTMLElement | null>(null);
|
||||
const setFloating = useCallback((element: HTMLElement | null) => {
|
||||
floatingRef.current = element;
|
||||
setFloatingElement(element);
|
||||
}, []);
|
||||
const [state, setState] = useState<FloatingState>(() => {
|
||||
const {x, y} = target ? getInitialGuess(target, placement, offsetMainAxis, offsetCrossAxis) : {x: -9999, y: -9999};
|
||||
return {x, y, isReady: false, offsetX: 0, offsetY: 0, placement};
|
||||
@@ -481,7 +486,7 @@ export function useAntiShiftFloating(
|
||||
};
|
||||
}, []);
|
||||
useLayoutEffect(() => {
|
||||
if (!enabled || target == null || floatingRef.current == null) {
|
||||
if (!enabled || target == null || floatingElement == null) {
|
||||
setState((prev) => ({...prev, isReady: false, offsetX: 0, offsetY: 0}));
|
||||
return;
|
||||
}
|
||||
@@ -489,7 +494,7 @@ export function useAntiShiftFloating(
|
||||
setState((prev) => ({...prev, isReady: false, offsetX: 0, offsetY: 0}));
|
||||
return;
|
||||
}
|
||||
const floating = floatingRef.current;
|
||||
const floating = floatingElement;
|
||||
updatePosition();
|
||||
if (shouldAutoUpdate) {
|
||||
const cleanupCallbacks = [
|
||||
@@ -502,7 +507,7 @@ export function useAntiShiftFloating(
|
||||
}
|
||||
};
|
||||
} else if (shouldObserveFloatingResize) {
|
||||
cleanupRef.current = observeFloatingResize(floatingRef.current, updatePosition);
|
||||
cleanupRef.current = observeFloatingResize(floating, updatePosition);
|
||||
}
|
||||
return () => {
|
||||
positionRevisionRef.current += 1;
|
||||
@@ -519,9 +524,18 @@ export function useAntiShiftFloating(
|
||||
}
|
||||
setState((prev) => ({...prev, isReady: false, offsetX: 0, offsetY: 0}));
|
||||
};
|
||||
}, [enabled, target, shouldAutoUpdate, shouldObserveFloatingResize, updatePosition, updatePositionNow]);
|
||||
}, [
|
||||
enabled,
|
||||
target,
|
||||
floatingElement,
|
||||
shouldAutoUpdate,
|
||||
shouldObserveFloatingResize,
|
||||
updatePosition,
|
||||
updatePositionNow,
|
||||
]);
|
||||
return {
|
||||
ref: floatingRef,
|
||||
setFloating,
|
||||
state,
|
||||
style: {
|
||||
position: 'fixed' as const,
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
// @vitest-environment happy-dom
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {installVoiceMenuTestBootstrap} from '@app/features/ui/action_menu/items/__fixtures__/VoiceMenuTestBootstrap';
|
||||
import type {UpdaterEvent} from '@app/types/electron.d';
|
||||
import {afterEach, describe, expect, test, vi} from 'vitest';
|
||||
|
||||
const {pushUpdateReadyModal} = vi.hoisted(() => ({pushUpdateReadyModal: vi.fn()}));
|
||||
|
||||
vi.mock('@app/features/updater/commands/UpdaterModalCommands', () => ({
|
||||
pushDesktopUpdateDownloadFailedModal: vi.fn(),
|
||||
pushDesktopUpdateInstallFailedModal: vi.fn(),
|
||||
pushManualUpdateAvailableModal: vi.fn(),
|
||||
pushUnsupportedUpdateModal: vi.fn(),
|
||||
pushUpdateAvailableModal: vi.fn(),
|
||||
pushUpdateCheckFailedModal: vi.fn(),
|
||||
pushUpdateReadyModal,
|
||||
pushUpToDateModal: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('@lingui/core/macro', () => ({
|
||||
msg: (descriptor: {message: string}) => descriptor,
|
||||
}));
|
||||
|
||||
vi.mock('@app/features/platform/utils/ClientInfo', () => ({
|
||||
getClientInfo: () =>
|
||||
Promise.resolve({desktopVersion: '1.0.0', desktopChannel: 'canary', desktopArch: 'x64', arch: 'x64'}),
|
||||
}));
|
||||
|
||||
installVoiceMenuTestBootstrap();
|
||||
|
||||
let nativeEventListener: ((event: UpdaterEvent) => void) | null = null;
|
||||
let onUpdaterCheck: (() => void) | null = null;
|
||||
let loadedUpdater: {dispose: () => void} | null = null;
|
||||
|
||||
function installElectronApi(): void {
|
||||
nativeEventListener = null;
|
||||
onUpdaterCheck = null;
|
||||
(window as unknown as {electron: unknown}).electron = {
|
||||
platform: 'win32',
|
||||
buildChannel: 'canary',
|
||||
onUpdaterEvent: (listener: (event: UpdaterEvent) => void) => {
|
||||
nativeEventListener = listener;
|
||||
return () => {
|
||||
nativeEventListener = null;
|
||||
};
|
||||
},
|
||||
updaterCheck: () => {
|
||||
onUpdaterCheck?.();
|
||||
return Promise.resolve();
|
||||
},
|
||||
updaterDownload: () => Promise.resolve(),
|
||||
updaterInstall: () => Promise.resolve(),
|
||||
};
|
||||
}
|
||||
|
||||
function emit(event: UpdaterEvent): void {
|
||||
if (!nativeEventListener) throw new Error('Updater never subscribed to native updater events');
|
||||
nativeEventListener(event);
|
||||
}
|
||||
|
||||
async function loadUpdater() {
|
||||
vi.resetModules();
|
||||
installElectronApi();
|
||||
const {default: Updater} = await import('@app/features/app/state/Updater');
|
||||
loadedUpdater = Updater;
|
||||
await vi.waitFor(() => {
|
||||
expect(nativeEventListener).not.toBeNull();
|
||||
expect(Updater.lastCheckedAt).not.toBeNull();
|
||||
});
|
||||
pushUpdateReadyModal.mockClear();
|
||||
return Updater;
|
||||
}
|
||||
|
||||
function emitUserDownloadCompletion(version: string): void {
|
||||
emit({type: 'available', context: 'user', version, downloadSize: 1000, downloadStarted: true});
|
||||
emit({type: 'downloaded', context: 'user', version});
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
loadedUpdater?.dispose();
|
||||
loadedUpdater = null;
|
||||
});
|
||||
|
||||
describe('updater update-ready surface', () => {
|
||||
test('does not push a blocking modal when a user-initiated download finishes outside a check', async () => {
|
||||
const Updater = await loadUpdater();
|
||||
emitUserDownloadCompletion('2.0.0');
|
||||
expect(Updater.nativeUpdateReady).toBe(true);
|
||||
expect(pushUpdateReadyModal).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('announces the ready update through a dismissible nagbar instead', async () => {
|
||||
const Updater = await loadUpdater();
|
||||
expect(Updater.shouldShowUpdateReadyNagbar).toBe(false);
|
||||
emitUserDownloadCompletion('2.0.0');
|
||||
expect(Updater.shouldShowUpdateReadyNagbar).toBe(true);
|
||||
Updater.dismissUpdateReadyNagbar();
|
||||
expect(Updater.shouldShowUpdateReadyNagbar).toBe(false);
|
||||
emit({type: 'downloaded', context: 'background', version: '2.1.0'});
|
||||
expect(Updater.shouldShowUpdateReadyNagbar).toBe(true);
|
||||
});
|
||||
|
||||
test('still answers a user-initiated check with the update ready modal', async () => {
|
||||
const Updater = await loadUpdater();
|
||||
emitUserDownloadCompletion('2.0.0');
|
||||
pushUpdateReadyModal.mockClear();
|
||||
onUpdaterCheck = () => emit({type: 'available', context: 'user', version: '2.0.0', downloadStarted: false});
|
||||
await Updater.checkForUpdates(true, true);
|
||||
expect(pushUpdateReadyModal).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
@@ -131,6 +131,7 @@ class Updater {
|
||||
private backgroundCheckInterval: number | null = null;
|
||||
private backgroundCheckCleanups: Array<() => void> = [];
|
||||
private unsubscribeNativeEvents: (() => void) | null = null;
|
||||
private updateReadyNagbarDismissedVersion: string | null = null;
|
||||
|
||||
constructor() {
|
||||
makeAutoObservable(this, {}, {autoBind: true});
|
||||
@@ -193,6 +194,18 @@ class Updater {
|
||||
return this.updateInfo.native.available && this.updateInfo.native.downloaded;
|
||||
}
|
||||
|
||||
get shouldShowUpdateReadyNagbar(): boolean {
|
||||
return (
|
||||
this.nativeUpdateReady &&
|
||||
!this.updateInfo.native.installing &&
|
||||
this.updateReadyNagbarDismissedVersion !== this.updateReadyNagbarVersionKey
|
||||
);
|
||||
}
|
||||
|
||||
private get updateReadyNagbarVersionKey(): string {
|
||||
return this.updateInfo.native.version ?? 'unknown';
|
||||
}
|
||||
|
||||
get nativeDownloadInFlight(): boolean {
|
||||
return this.updateInfo.native.downloading && !this.updateInfo.native.downloaded;
|
||||
}
|
||||
@@ -348,9 +361,6 @@ class Updater {
|
||||
break;
|
||||
}
|
||||
this.transition({type: 'native.downloaded', version: event.version ?? null});
|
||||
if (shouldShowImmediateUserResult) {
|
||||
this.showCurrentUpdateState();
|
||||
}
|
||||
break;
|
||||
case 'progress':
|
||||
if (!shouldSurfaceNativeDesktopUpdate || !this.nativeDownloadProgressSupported) {
|
||||
@@ -661,6 +671,10 @@ class Updater {
|
||||
}
|
||||
}
|
||||
|
||||
dismissUpdateReadyNagbar(): void {
|
||||
this.updateReadyNagbarDismissedVersion = this.updateReadyNagbarVersionKey;
|
||||
}
|
||||
|
||||
reset(): void {
|
||||
this.transition({type: 'reset'});
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ import {
|
||||
resolveChannelMessagesWindowStatus,
|
||||
selectChannelMessagesFillerVisible,
|
||||
selectChannelMessagesSpacerHeight,
|
||||
selectChannelMessagesTailGapId,
|
||||
selectChannelMessagesTailProbeId,
|
||||
selectChannelMessagesWindowBar,
|
||||
} from '@app/features/messaging/state/ChannelMessagesLoadStateMachine';
|
||||
import MessageEdit from '@app/features/messaging/state/MessageEdit';
|
||||
@@ -66,7 +68,11 @@ import {clsx} from 'clsx';
|
||||
import {runInAction} from 'mobx';
|
||||
import {observer, useLocalObservable} from 'mobx-react-lite';
|
||||
import type React from 'react';
|
||||
import {useCallback, useEffect, useMemo, useRef} from 'react';
|
||||
import {useCallback, useEffect, useMemo, useRef, useState} from 'react';
|
||||
|
||||
const TAIL_PROBE_MAX_ATTEMPTS = 2;
|
||||
const TAIL_PROBE_MIN_INTERVAL_MS = 10_000;
|
||||
const tailProbeAttemptedAt = new Map<string, number>();
|
||||
|
||||
const MESSAGE_LIST_FOR_DESCRIPTOR = msg({
|
||||
message: 'Message list for {channelName}',
|
||||
@@ -167,6 +173,9 @@ export const Messages = observer(function Messages({
|
||||
const scrollerContainerRef = useRef<HTMLDivElement | null>(null);
|
||||
const lastStateSnapshotRef = useRef<MessagesStateSnapshot | null>(null);
|
||||
const recoveryFetchChannelIdRef = useRef<string | null>(null);
|
||||
const tailProbeKeyRef = useRef<string | null>(null);
|
||||
const tailProbeAttemptsRef = useRef<{key: string; attempts: number} | null>(null);
|
||||
const [settledTailProbeKey, setSettledTailProbeKey] = useState<string | null>(null);
|
||||
interface MessageState extends MessagesStateSnapshot {
|
||||
highlightedMessageId: string | null;
|
||||
isAtBottom: boolean;
|
||||
@@ -202,6 +211,17 @@ export const Messages = observer(function Messages({
|
||||
});
|
||||
const windowBar = selectChannelMessagesWindowBar(windowStatus);
|
||||
const windowNeedsPage = windowStatus.needsPage;
|
||||
const tailInput = {
|
||||
status: windowStatus,
|
||||
loading: safeMessages.loadingMore || safeMessages.probeLoading,
|
||||
newestLoadedMessageId: safeMessages.last()?.id ?? null,
|
||||
knownLatestMessageId: state.lastReadStateMessageId,
|
||||
};
|
||||
const tailWatermarkMessageId = state.lastReadStateMessageId;
|
||||
const tailGapMessageId = selectChannelMessagesTailGapId(tailInput);
|
||||
const tailProbeMessageId = selectChannelMessagesTailProbeId(tailInput);
|
||||
const tailGapKey = tailGapMessageId == null ? null : `${tailGapMessageId}:${tailWatermarkMessageId}`;
|
||||
const tailProbeKey = tailProbeMessageId == null ? null : `${tailProbeMessageId}:${tailWatermarkMessageId}`;
|
||||
const canAutoAck = shouldAutoAck({
|
||||
channelActive: allowAutoAck,
|
||||
windowFocused: isWindowFocused,
|
||||
@@ -454,6 +474,47 @@ export const Messages = observer(function Messages({
|
||||
}
|
||||
});
|
||||
}, [channel.id, isGatewayConnected, selectedChannelId, windowNeedsPage, state.messageVersion]);
|
||||
useEffect(() => {
|
||||
if (!isGatewayConnected) {
|
||||
tailProbeKeyRef.current = null;
|
||||
return;
|
||||
}
|
||||
if (tailProbeMessageId == null || tailProbeKey == null || tailWatermarkMessageId == null) {
|
||||
return;
|
||||
}
|
||||
if (selectedChannelId !== channel.id || tailProbeKeyRef.current === tailProbeKey) {
|
||||
return;
|
||||
}
|
||||
const lastAttemptAt = tailProbeAttemptedAt.get(tailProbeKey);
|
||||
if (lastAttemptAt != null && Date.now() - lastAttemptAt < TAIL_PROBE_MIN_INTERVAL_MS) {
|
||||
return;
|
||||
}
|
||||
tailProbeKeyRef.current = tailProbeKey;
|
||||
tailProbeAttemptedAt.set(tailProbeKey, Date.now());
|
||||
void MessageCommands.fetchMessages(channel.id, null, tailProbeMessageId, MAX_MESSAGES_PER_CHANNEL, undefined, {
|
||||
tailProbe: {
|
||||
watermarkMessageId: tailWatermarkMessageId,
|
||||
onSettled: (settlement) => {
|
||||
if (settlement === 'applied') {
|
||||
setSettledTailProbeKey(tailProbeKey);
|
||||
return;
|
||||
}
|
||||
if (settlement === 'failed') {
|
||||
const attempts =
|
||||
tailProbeAttemptsRef.current?.key === tailProbeKey ? tailProbeAttemptsRef.current.attempts : 0;
|
||||
if (attempts >= TAIL_PROBE_MAX_ATTEMPTS) {
|
||||
setSettledTailProbeKey(tailProbeKey);
|
||||
return;
|
||||
}
|
||||
tailProbeAttemptsRef.current = {key: tailProbeKey, attempts: attempts + 1};
|
||||
}
|
||||
if (tailProbeKeyRef.current === tailProbeKey) {
|
||||
tailProbeKeyRef.current = null;
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
}, [channel.id, isGatewayConnected, selectedChannelId, tailProbeKey, tailProbeMessageId, tailWatermarkMessageId]);
|
||||
useMessageListKeyboardNavigation({
|
||||
containerRef: scrollManager.ref,
|
||||
channelId: channel.id,
|
||||
@@ -488,10 +549,11 @@ export const Messages = observer(function Messages({
|
||||
}, []);
|
||||
useEffect(() => {
|
||||
if (!canAutoAck || !state.isAtBottom || !state.messages?.ready) return;
|
||||
if (tailGapKey != null && settledTailProbeKey !== tailGapKey) return;
|
||||
if (ReadStates.hasUnread(channel.id)) {
|
||||
ReadStateCommands.ackWithStickyUnread(channel.id);
|
||||
}
|
||||
}, [canAutoAck, state.isAtBottom, state.messages?.ready, channel.id]);
|
||||
}, [canAutoAck, state.isAtBottom, state.messages?.ready, tailGapKey, settledTailProbeKey, channel.id]);
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
const readState = ReadStates.getIfExists(channel.id);
|
||||
|
||||
+4
-14
@@ -17,7 +17,6 @@ import {
|
||||
UNPIN_GROUP_DM_DESCRIPTOR,
|
||||
} from '@app/features/channel/utils/ChannelMessageDescriptors';
|
||||
import {isGroupDmFull} from '@app/features/channel/utils/GroupDmUtils';
|
||||
import Guilds from '@app/features/guild/state/Guilds';
|
||||
import {
|
||||
ADD_TO_FAVORITES_DESCRIPTOR,
|
||||
COPY_CHANNEL_ID_DESCRIPTOR,
|
||||
@@ -32,7 +31,6 @@ import {
|
||||
REMOVE_FROM_FAVORITES_DESCRIPTOR,
|
||||
} from '@app/features/i18n/utils/CommonMessageDescriptors';
|
||||
import * as InviteUtils from '@app/features/invite/utils/InviteUtils';
|
||||
import {getEffectiveChannelMatureContent} from '@app/features/messaging/utils/ContentWarningUtils';
|
||||
import Permission from '@app/features/permissions/state/Permission';
|
||||
import ReadStates from '@app/features/read_state/state/ReadStates';
|
||||
import {AddFriendsToGroupModal} from '@app/features/relationship/components/modals/AddFriendsToGroupModal';
|
||||
@@ -56,7 +54,6 @@ import {modal} from '@app/features/ui/commands/ModalCommands';
|
||||
import type {MenuGroupType, MenuItemType} from '@app/features/ui/menu_bottom_sheet/MenuBottomSheet';
|
||||
import {MenuBottomSheet} from '@app/features/ui/menu_bottom_sheet/MenuBottomSheet';
|
||||
import type {User} from '@app/features/user/models/User';
|
||||
import Users from '@app/features/user/state/Users';
|
||||
import {Permissions} from '@fluxer/constants/src/ChannelConstants';
|
||||
import {useLingui} from '@lingui/react/macro';
|
||||
import type React from 'react';
|
||||
@@ -251,21 +248,14 @@ export const MoreOptionsSheet: React.FC<MoreOptionsSheetProps> = ({
|
||||
guildId: channel.guildId,
|
||||
});
|
||||
if (canManageChannels) {
|
||||
const guildForChannel = channel.guildId ? Guilds.getGuild(channel.guildId) : undefined;
|
||||
const currentUser = Users.getCurrentUser();
|
||||
const nsfwBlockedForMinor =
|
||||
getEffectiveChannelMatureContent(channel, guildForChannel ?? null) &&
|
||||
!!currentUser &&
|
||||
!currentUser.matureContentAllowed;
|
||||
const managerItems: Array<MenuItemType> = [];
|
||||
if (!nsfwBlockedForMinor) {
|
||||
managerItems.push({
|
||||
const managerItems: Array<MenuItemType> = [
|
||||
{
|
||||
id: 'edit-channel',
|
||||
icon: <EditIcon size={20} data-flx="channel.channel-details-bottom-sheet.edit-icon--2" />,
|
||||
label: i18n._(EDIT_CHANNEL_DESCRIPTOR),
|
||||
onClick: onEditChannel,
|
||||
});
|
||||
}
|
||||
},
|
||||
];
|
||||
managerItems.push({
|
||||
id: 'delete-channel',
|
||||
icon: <DeleteIcon size={20} data-flx="channel.channel-details-bottom-sheet.delete-icon" />,
|
||||
|
||||
@@ -99,9 +99,10 @@ export const DiscoveryPage = observer(function DiscoveryPage() {
|
||||
return Math.min(SKELETON_DISCOVERY_MAX_COLUMNS, Math.max(1, columnsThatFit));
|
||||
}, [containerWidth, zoomLevel]);
|
||||
const guilds = Discovery.guilds;
|
||||
const loadedCount = Discovery.loadedCount;
|
||||
const searchActive = Discovery.query.length > 0;
|
||||
const rowCount = columns > 0 ? Math.ceil(guilds.length / columns) : 0;
|
||||
const hasMore = guilds.length < Discovery.total;
|
||||
const hasMore = loadedCount < Discovery.total;
|
||||
const virtualizer = useVirtualizer({
|
||||
count: rowCount,
|
||||
getScrollElement: () => scrollerRef.current?.getViewportElement() ?? null,
|
||||
@@ -114,10 +115,10 @@ export const DiscoveryPage = observer(function DiscoveryPage() {
|
||||
return;
|
||||
}
|
||||
void Discovery.search({
|
||||
offset: guilds.length,
|
||||
offset: loadedCount,
|
||||
limit: PAGE_SIZE,
|
||||
});
|
||||
}, [guilds.length, hasMore]);
|
||||
}, [loadedCount, hasMore]);
|
||||
useEffect(() => {
|
||||
const items = virtualizer.getVirtualItems();
|
||||
const lastItem = items[items.length - 1];
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {DiscoveryGuild, DiscoverySearchResponse} from '@app/features/discovery/commands/DiscoveryCommands';
|
||||
import * as DiscoveryCommands from '@app/features/discovery/commands/DiscoveryCommands';
|
||||
import {beforeEach, describe, expect, test, vi} from 'vitest';
|
||||
|
||||
import Discovery from './Discovery';
|
||||
|
||||
vi.mock('@app/features/discovery/commands/DiscoveryCommands', () => ({
|
||||
searchGuilds: vi.fn(),
|
||||
getCategories: vi.fn(),
|
||||
}));
|
||||
|
||||
function guild(id: string, memberCount: number): DiscoveryGuild {
|
||||
return {
|
||||
id,
|
||||
name: `Guild ${id}`,
|
||||
icon: null,
|
||||
banner: null,
|
||||
description: null,
|
||||
category_type: 0,
|
||||
primary_language: null,
|
||||
custom_tags: [],
|
||||
member_count: memberCount,
|
||||
online_count: 0,
|
||||
features: [],
|
||||
verification_level: 0,
|
||||
};
|
||||
}
|
||||
|
||||
function page(guilds: Array<DiscoveryGuild>, total: number): DiscoverySearchResponse {
|
||||
return {guilds, total, categoryCounts: null};
|
||||
}
|
||||
|
||||
describe('Discovery.search', () => {
|
||||
beforeEach(() => {
|
||||
vi.mocked(DiscoveryCommands.searchGuilds).mockReset();
|
||||
Discovery.reset();
|
||||
});
|
||||
|
||||
test('does not append a guild that a previous page already returned', async () => {
|
||||
vi.mocked(DiscoveryCommands.searchGuilds)
|
||||
.mockResolvedValueOnce(page([guild('1', 50), guild('2', 40)], 4))
|
||||
.mockResolvedValueOnce(page([guild('2', 40), guild('3', 30)], 4));
|
||||
await Discovery.search({limit: 2, offset: 0});
|
||||
await Discovery.search({limit: 2, offset: Discovery.loadedCount});
|
||||
expect(Discovery.guilds.map((entry) => entry.id)).toEqual(['1', '2', '3']);
|
||||
});
|
||||
|
||||
test('advances the pagination offset by what the server returned, not by what survived deduping', async () => {
|
||||
vi.mocked(DiscoveryCommands.searchGuilds)
|
||||
.mockResolvedValueOnce(page([guild('1', 50), guild('2', 40)], 4))
|
||||
.mockResolvedValueOnce(page([guild('2', 40), guild('3', 30)], 4));
|
||||
await Discovery.search({limit: 2, offset: 0});
|
||||
await Discovery.search({limit: 2, offset: Discovery.loadedCount});
|
||||
expect(Discovery.loadedCount).toBe(4);
|
||||
});
|
||||
});
|
||||
@@ -8,6 +8,7 @@ const DEFAULT_DISCOVERY_PAGE_SIZE = 36;
|
||||
|
||||
class Discovery {
|
||||
guilds: Array<DiscoveryGuild> = [];
|
||||
loadedCount = 0;
|
||||
total = 0;
|
||||
loading = false;
|
||||
error = false;
|
||||
@@ -53,6 +54,7 @@ class Discovery {
|
||||
this.error = false;
|
||||
if (offset === 0 && searchModeChanged) {
|
||||
this.guilds = [];
|
||||
this.loadedCount = 0;
|
||||
this.total = 0;
|
||||
}
|
||||
this.query = query;
|
||||
@@ -78,8 +80,10 @@ class Discovery {
|
||||
if (offset === 0) {
|
||||
this.guilds = result.guilds;
|
||||
} else {
|
||||
this.guilds = [...this.guilds, ...result.guilds];
|
||||
const seen = new Set(this.guilds.map((guild) => guild.id));
|
||||
this.guilds = [...this.guilds, ...result.guilds.filter((guild) => !seen.has(guild.id))];
|
||||
}
|
||||
this.loadedCount = offset + result.guilds.length;
|
||||
this.total = result.total;
|
||||
this.categoryCounts = result.categoryCounts;
|
||||
this.loading = false;
|
||||
@@ -136,6 +140,7 @@ class Discovery {
|
||||
reset(): void {
|
||||
this.activeSearchToken += 1;
|
||||
this.guilds = [];
|
||||
this.loadedCount = 0;
|
||||
this.total = 0;
|
||||
this.categoryCounts = null;
|
||||
this.loading = false;
|
||||
|
||||
@@ -13,7 +13,6 @@ import {handleFavoriteMemeDelete} from '@app/features/expressions/events/Favorit
|
||||
import {handleFavoriteMemeUpdate} from '@app/features/expressions/events/FavoriteMemeUpdate';
|
||||
import {handleWebhooksUpdate} from '@app/features/expressions/events/WebhooksUpdate';
|
||||
import {handleReady} from '@app/features/gateway/events/GatewayReady';
|
||||
import {handleResumed} from '@app/features/gateway/events/GatewayResumed';
|
||||
import type {GatewaySocket} from '@app/features/gateway/transport/GatewaySocket';
|
||||
import {handleChannelMemberCountsUpdate} from '@app/features/guild/events/ChannelMemberCountsUpdate';
|
||||
import {handleGuildBanAdd, handleGuildBanRemove} from '@app/features/guild/events/GuildBan';
|
||||
@@ -92,7 +91,6 @@ export type GatewayHandlerRegistry = Map<string, GatewayEventHandler>;
|
||||
export function createHandlerRegistry(): GatewayHandlerRegistry {
|
||||
const registry: GatewayHandlerRegistry = new Map();
|
||||
registry.set('READY', handleReady as GatewayEventHandler);
|
||||
registry.set('RESUMED', handleResumed as GatewayEventHandler);
|
||||
registry.set('AUTH_SESSION_CHANGE', handleAuthSessionChange as GatewayEventHandler);
|
||||
registry.set('USER_UPDATE', handleUserUpdate as GatewayEventHandler);
|
||||
registry.set('USER_SETTINGS_UPDATE', handleUserSettingsUpdate as GatewayEventHandler);
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import Messages from '@app/features/messaging/state/MessagingMessages';
|
||||
|
||||
export function handleResumed(): void {
|
||||
Messages.handleResumed();
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import GeoIP from '@app/features/app/state/GeoIP';
|
||||
import Initialization from '@app/features/app/state/Initialization';
|
||||
import RuntimeConfig from '@app/features/app/state/RuntimeConfig';
|
||||
import RuntimeCrash from '@app/features/app/state/RuntimeCrash';
|
||||
import Channels from '@app/features/channel/state/Channels';
|
||||
import FavoriteMemes from '@app/features/expressions/state/FavoriteMemes';
|
||||
import {
|
||||
createHandlerRegistry,
|
||||
@@ -23,10 +24,12 @@ import {
|
||||
GatewayState,
|
||||
type GatewayVoiceStateUpdateParams,
|
||||
} from '@app/features/gateway/transport/GatewaySocket';
|
||||
import {selectGuildActivationTarget} from '@app/features/gateway/transport/GuildActivationTarget';
|
||||
import GuildMatureContentAgree from '@app/features/guild/state/GuildMatureContentAgree';
|
||||
import GuildMembers from '@app/features/member/state/GuildMembers';
|
||||
import MemberSearch from '@app/features/member/state/MemberSearch';
|
||||
import Messages from '@app/features/messaging/state/MessagingMessages';
|
||||
import Navigation from '@app/features/navigation/state/Navigation';
|
||||
import SelectedGuild from '@app/features/navigation/state/SelectedGuild';
|
||||
import Permission from '@app/features/permissions/state/Permission';
|
||||
import SessionManager from '@app/features/platform/state/AuthSession';
|
||||
@@ -55,6 +58,7 @@ interface DesiredSession {
|
||||
class GatewayConnection {
|
||||
socket: GatewaySocket | null = null;
|
||||
isConnected: boolean = false;
|
||||
connectionEpoch: number = 0;
|
||||
isConnecting: boolean = false;
|
||||
isReady: boolean = false;
|
||||
sessionId: string | null = null;
|
||||
@@ -166,11 +170,11 @@ class GatewayConnection {
|
||||
deferUntilModulesLoaded(() => {
|
||||
reaction(
|
||||
() => ({
|
||||
guildId: SelectedGuild.selectedGuildId,
|
||||
guildId: this.activationGuildId,
|
||||
nonce: SelectedGuild.selectionNonce,
|
||||
}),
|
||||
({guildId}) => {
|
||||
if (!guildId || guildId === FAVORITES_GUILD_ID) {
|
||||
if (!guildId) {
|
||||
this.pendingGuildSyncId = null;
|
||||
return;
|
||||
}
|
||||
@@ -339,6 +343,9 @@ class GatewayConnection {
|
||||
if (!isCurrent()) {
|
||||
return;
|
||||
}
|
||||
if (newState === GatewayState.Connected || previousState === GatewayState.Connected) {
|
||||
this.connectionEpoch += 1;
|
||||
}
|
||||
this.isConnected = newState === GatewayState.Connected;
|
||||
this.isConnecting = newState === GatewayState.Connecting || newState === GatewayState.Reconnecting;
|
||||
if (newState === GatewayState.Connected) {
|
||||
@@ -445,8 +452,17 @@ class GatewayConnection {
|
||||
}
|
||||
}
|
||||
|
||||
private get activationGuildId(): string | null {
|
||||
const channelId = Navigation.channelId;
|
||||
const channel = channelId ? Channels.getChannel(channelId) : undefined;
|
||||
return selectGuildActivationTarget({
|
||||
selectedGuildId: SelectedGuild.selectedGuildId,
|
||||
openChannelGuildId: channel?.guildId ?? null,
|
||||
});
|
||||
}
|
||||
|
||||
private flushPendingGuildSync(): void {
|
||||
const guildId = this.pendingGuildSyncId ?? SelectedGuild.selectedGuildId;
|
||||
const guildId = this.pendingGuildSyncId ?? this.activationGuildId;
|
||||
if (!guildId || guildId === FAVORITES_GUILD_ID) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {FAVORITES_GUILD_ID} from '@fluxer/constants/src/AppConstants';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
import {selectGuildActivationTarget} from './GuildActivationTarget';
|
||||
|
||||
describe('selectGuildActivationTarget', () => {
|
||||
it('returns the selected guild on a guild route', () => {
|
||||
expect(selectGuildActivationTarget({selectedGuildId: '1', openChannelGuildId: '1'})).toBe('1');
|
||||
});
|
||||
|
||||
it('returns the selected guild when no channel is open', () => {
|
||||
expect(selectGuildActivationTarget({selectedGuildId: '1', openChannelGuildId: null})).toBe('1');
|
||||
});
|
||||
|
||||
it('returns the owning guild of a channel opened from the favorites route', () => {
|
||||
expect(selectGuildActivationTarget({selectedGuildId: null, openChannelGuildId: '1'})).toBe('1');
|
||||
});
|
||||
|
||||
it('ignores the favorites pseudo guild and falls through to the open channel', () => {
|
||||
expect(selectGuildActivationTarget({selectedGuildId: FAVORITES_GUILD_ID, openChannelGuildId: '1'})).toBe('1');
|
||||
});
|
||||
|
||||
it('returns null on the favorites route while no channel is open', () => {
|
||||
expect(selectGuildActivationTarget({selectedGuildId: FAVORITES_GUILD_ID, openChannelGuildId: null})).toBeNull();
|
||||
});
|
||||
|
||||
it('returns null for a private channel', () => {
|
||||
expect(selectGuildActivationTarget({selectedGuildId: null, openChannelGuildId: null})).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {FAVORITES_GUILD_ID} from '@fluxer/constants/src/AppConstants';
|
||||
|
||||
export function selectGuildActivationTarget(input: {
|
||||
selectedGuildId: string | null;
|
||||
openChannelGuildId: string | null;
|
||||
}): string | null {
|
||||
if (input.selectedGuildId && input.selectedGuildId !== FAVORITES_GUILD_ID) {
|
||||
return input.selectedGuildId;
|
||||
}
|
||||
return input.openChannelGuildId;
|
||||
}
|
||||
@@ -2483,6 +2483,11 @@ msgstr "إضافة عنصر"
|
||||
msgid "Add local files"
|
||||
msgstr "إضافة ملفات محلية"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "إضافة ردود فعل جديدة على الرسائل في هذه القناة."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "إضافة رد فعل"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "إضافة ردود فعل"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "تمت إضافة الأدوار."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "أُضيف إلى الإشارات المرجعية"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "اضبط مستوى التكبير/التصغير العام للتطبيق. استخدم {zoomIn} / {zoomOut} للضبط بسرعة."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "مسؤول"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "مُعيّن للإلغاء بالفعل"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "أبلغ فريق السلامة في {productName} عن هذه الرسالة أيضًا"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "يجب تمكين إذن \"{viewChannelPermissionLabel}\" لقناة واحدة على الأقل لـ {EVERYONE_MENTION} لكي يعمل عنوان URL المخصص. حاليًا، لا توجد قنوات مرئية لـ {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "إرفاق ملفات"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "الصوت"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "الصوت والفيديو"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "حظر العضو"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "حظر الأعضاء"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "حظر الأعضاء من المجتمع، مع خيار حذف رسائلهم الأخيرة."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "الإعدادات الأساسية وعناوين URL المسموح ب
|
||||
msgid "Basic text inputs"
|
||||
msgstr "حقول إدخال النص الأساسية"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "كن مسموعًا فوق الأعضاء الآخرين في هذه القناة أثناء الضغط على مفتاح التحدث (الأولوية)."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "كن مسموعًا فوق الأعضاء الآخرين أثناء الضغط على مفتاح التحدث (الأولوية)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "وضع إشارة مرجعية على الرسالة"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "تمت الإضافة إلى العلامات المرجعية."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "تجاوز منع الإشارة"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "تجاوز الوضع البطيء"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "تغيير أسماء المستعارة للأعضاء الآخرين."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "تغيير الاسم المستعار الخاص"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "نموذج تغيير اسم المستخدم"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "غيّر ما يمكن للمستخدمين الذين لا يملكون \"{readMessageHistoryPermissionLabel}\" رؤيته"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "تغيير منطقة الصوت التي تستخدمها قناة صوتية."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "غيّر منطقة الصوت التي يستخدمها هذا القناة."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "القناة {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "الوصول إلى القناة"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "أقسام تفاصيل القناة"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "تم نسخ معرّف القناة"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "رابط القناة"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "تم نسخ رابط القناة"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "مؤشرات الكتابة في قائمة القنوات"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "إدارة القنوات"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "صوت المجتمع"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "على مستوى المجتمع"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "قم بتوصيل ميكروفون وحاول مرة أخرى."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "الاتصال بالصوت"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "نسخ معرّف القناة"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "نسخ رابط القناة"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "تعذر تنزيل تحديث سطح المكتب"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "تعذر تكرار هذه القناة"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "تعذر فتح بوابة الفوترة"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "تعذر تثبيت هذه المحادثة"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "تعذّر إلغاء حظر المستخدم"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "تعذر إلغاء تثبيت هذه المحادثة"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "إنشاء رسالة مباشرة"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "إنشاء إيموجي وملصقات"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "إنشاء دعوة"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "إنشاء روابط دعوة"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "إنشاء الأدوار أو تعديلها أو حذفها الأقل من دورك الأعلى. يسمح أيضًا بتعديل تجاوزات أذونات القناة."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "إنشاء webhooks لهذه القناة أو تعديلها أو حذفها."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "إسكات الجهاز"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "كتم صوت الأعضاء"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "كتم صوت الأعضاء الآخرين في قناة الصوت هذه، حتى لا يتمكنوا من السمع أو التحدث."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "إسكات الأعضاء الآخرين في قنوات الصوت، بحيث لا يمكنهم السمع أو التحدث."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "يتم إيقاف تشغيله افتراضيًا على الهاتف ا
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "حذف \"{stickerName}\"؟ لا يمكن التراجع عن هذا ال
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "حذف {channelLabel}؟ لا يمكن التراجع عن هذا الإجراء."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "حذف الرسائل"
|
||||
msgid "Delete my messages"
|
||||
msgstr "حذف رسائلي"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "حذف رسائل الأعضاء الآخرين في هذه القناة. يتم التحكم في التثبيت بشكل منفصل."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "حذف هذه الرسالة"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "هل تريد حذف هذه الرسالة؟ لا يمكن التراجع عن هذا الإجراء."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "اسحب الملفات وأفلتها هنا للتحميل"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "اسحب ملفات الإيموجي وأفلتها هنا"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "اسحب الأعضاء بين القنوات التي يمكنهم الوصول إليها."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "اسحب الأعضاء بين قنوات الصوت التي يمكنهم الوصول إليها، وافصلهم عن الصوت."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "اسحب الأعضاء من قناة الصوت هذه إلى قنوات يمكنهم الوصول إليها، وافصلهم عن الصوت."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "تكرار"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "تكرار القناة"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "تعديل الفئة"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "تعديل القناة"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "تعديل أو حذف الرموز التعبيرية والملصقات التي أنشأها أعضاء آخرون."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "تعديل التجاوزات للأدوار والأعضاء في هذه القناة."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "نموذج مصحح الأخطاء المضمن"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "تضمين الروابط"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "تجاهل الإبلاغ عن رسائل مزعجة"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "هل تريد تجاهل طلب الصداقة من {displayName}؟"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "تجاهل فترة التهدئة البطيئة لهذه القناة."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "تجاهل الافتراضي"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "نافذة الدعوة المنبثقة"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "معاينة نافذة الدعوة المنبثقة"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "ادعُ أشخاصًا جددًا إلى المجتمع باستخدام رابط لهذه القناة."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "دعوة أشخاص جدد إلى المجتمع باستخدام رابط دعوة."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "الانضمام من هذا الجهاز"
|
||||
msgid "Join the call"
|
||||
msgstr "الانضمام للمكالمة"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "انضم إلى هذه القناة الصوتية واستمع إلى الآخرين. حرمانها مع \"عرض القناة\" لـ {everyoneMention} يجعل القناة خاصة."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "الانضمام إلى مكالمة صوتية"
|
||||
msgid "Join voice channel"
|
||||
msgstr "الانضمام إلى القناة الصوتية"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "انضم إلى قنوات الصوت واستمع للآخرين."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "الانتقال إلى أول رسالة غير مقروءة"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "الانتقال إلى الرسالة"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "الانتقال إلى الصفحة"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "الانتقال إلى الوقت الحالي"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "طرد العضو"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "طرد الأعضاء"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "إدارة المستخدمين المحظورين"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "إدارة القناة"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "إدارة القنوات"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "إدارة المجتمع"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "إدارة ميزات المجتمع"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "إدارة الرموز التعبيرية والملصقات"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "إدارة روابط الدعوة لهذه القناة."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "إدارة الرسائل"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "إدارة الألقاب"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "إدارة طرق الدفع"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "إدارة الأذونات"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "إدارة رموز الهدايا وعناوين URL للهدايا التي تم شراؤها"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "إدارة الأدوار"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "إدارة الاشتراك"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "إدارة خطاطيف الويب"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "عناصر التحكم في الإشارة"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "الإشارة إلى الجميع أو إلى أي دور (حتى لو لم يكن الدور قابلاً للإشارة إليه)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "الإشارة إلى الجميع أو أي دور في هذه القناة (حتى لو لم يتم تعيين الدور ليكون قابلاً للإشارة إليه)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "رابط الرسالة"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "قائمة الرسائل"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "قائمة الرسائل لـ {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "الرسائل"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "الرسائل والوسائط"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "تم حذف الرسائل"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "فشل تحميل الرسائل"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "المشرف"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "إشراف"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "نقل العنصر للأعلى"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "نقل الأعضاء"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "كتم المفضلة"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "كتم صوت الأعضاء"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "كتم الميكروفون"
|
||||
msgid "Mute notifications"
|
||||
msgstr "كتم الإشعارات"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "كتم أعضاء آخرين في قناة الصوت هذه للجميع."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "كتم أعضاء آخرين في قنوات الصوت للجميع."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "لا يوجد مستخدمون محظورون"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "فتح تفاصيل القناة لـ {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "فتح الدردشة"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "تثبيت الرسالة"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "تثبيت الرسائل"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "تثبيت الرسائل"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "ثبّت الرسائل هنا ليراها الجميع."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "تثبيت أو إلغاء تثبيت أي رسالة في هذه القناة."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "تثبيت أو إلغاء تثبيت أي رسالة."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "مجموعة مثبتة"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "محادثة جماعية مثبتة"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "إعطاء الأولوية للمتحدثين"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "متحدث ذو أولوية"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "قراءة الرسالة بصوت عالٍ"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "قراءة سجل الرسائل"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "قراءة سجل الرسائل"
|
||||
msgid "Read messages"
|
||||
msgstr "قراءة الرسائل"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "قراءة الرسائل المرسلة قبل فتحهم للقناة. بدونها، يرون فقط الرسائل التي تصل أثناء فتحها."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "قراءة الرسائل المرسلة في هذه القناة قبل فتحها. بدونها، سيرون فقط الرسائل التي تصل أثناء فتحها."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "إزالة الأيقونة"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "إزالتها من القناة للجميع."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "إزالة الأعضاء من المجتمع. يمكنهم الانضمام مرة أخرى بدعوة جديدة."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "تمت إزالة الرفض لـ {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "أُزيل من الإشارات المرجعية"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "إعادة تسمية :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "إعادة تسمية هذه القناة وتعديل إعداداتها."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "رمز مفتاح الأمان"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "نموذج رقم تعريف المفتاح الأمني"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "عرض القنوات افتراضيًا. تظل القنوات التي ترفضها مخفية."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "شاهد كيف تبدو دعوتك للزوار."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "الاطّلاع على قائمة الأعضاء للقنوات في هذا المجتمع."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "الاطّلاع على قائمة أعضاء هذه القناة."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "عرض هذه القناة. حظرها لـ {everyoneMention} يجعل القناة خاصة."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "إرسال رسالة"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "إرسال الرسائل"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "إرسال الرسائل"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "إرسال الرسائل معطّل"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "إرسال الرسائل في القنوات."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "إرسال رسائل في هذه القناة."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "إرسال رابط إعادة التعيين"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "إرسال الوسائط المحفوظة {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "إرسال رسائل تحويل النص إلى كلام."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "إرسال رسائل تحويل النص إلى كلام باستخدام /tts. يسمع الأعضاء الذين قاموا بتشغيل تحويل النص إلى كلام قراءتها بصوت عالٍ."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "إرسال إلى"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "إرسال رسائل تحويل النص إلى كلام"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "تم تعيين مستوى التحقق إلى <0>بلا</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "تعيين منطقة الصوت"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "إظهار زر الحذف"
|
||||
msgid "Show download button"
|
||||
msgstr "إظهار زر التنزيل"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "عرض معاينات مضمنة للروابط التي يرسلونها في هذه القناة."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "عرض معاينات مضمنة للروابط التي يرسلونها."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "حدث خطأ ما."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "حدث خطأ ما. يرجى المحاولة مرة أخرى بعد قليل."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "الطبقات المكانية والزمانية"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "التحدث"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "إعدادات البث"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "بث الفيديو"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "يسري فورًا. قد يتم تطبيق رسوم نسبية عبر {
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "التحدث في المكالمات واختبار الإدخال الخاص بك."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "تحدث في قناة الصوت هذه. بدونها، يظل الأعضاء مكتومي الصوت حتى يقوم شخص لديه إذن \"كتم صوت الأعضاء\" بإلغاء كتم صوتهم."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "تحدث في قنوات الصوت. بدون هذه الإذن، يظل الأعضاء مكتومي الصوت حتى يقوم شخص لديه إذن \"كتم الأعضاء\" بإلغاء كتمهم."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "اختيار تنسيق الوقت"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "إيقاف الأعضاء مؤقتًا"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "إيقاف البث"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "أوقف تشغيل خصوصية البث قبل عرض تفاصيل تسجيل الدخول أو أمان الحساب."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "تشغيل الكاميرا أو مشاركة الشاشة في قناة الصوت هذه."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "تشغيل الكاميرا أو مشاركة الشاشة في قنوات الصوت."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "المجموعة غير المثبتة"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "محادثة جماعية غير مثبتة"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "تحميل إيموجي"
|
||||
msgid "Upload file"
|
||||
msgstr "تحميل ملف"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "تحميل الملفات والوسائط في الرسائل."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "تحميل الملفات والوسائط في هذه القناة."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "استخدام بريد إلكتروني مختلف"
|
||||
msgid "Use email"
|
||||
msgstr "استخدام البريد الإلكتروني"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "استخدم الرموز التعبيرية من مجتمعات أخرى في هذه القناة."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "استخدام الرموز التعبيرية من المجتمعات الأخرى."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "استخدام الرموز التعبيرية الخارجية"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "استخدام الملصقات الخارجية"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "استخدام الوسائط المحفوظة"
|
||||
msgid "Use selection"
|
||||
msgstr "استخدام التحديد"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "استخدم الملصقات من مجتمعات أخرى في هذه القناة."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "استخدم الملصقات من المجتمعات الأخرى مع {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "استخدم الملصقات من مجتمعات أخرى."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "استخدم معاينات الفيديو والكاميرا."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "استخدام نشاط الصوت"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "عرض ملف {userName} الشخصي"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "عرض سجل النشاط"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "عرض عناصر التحكم في المكالمة"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "عرض القناة"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "عرض أعضاء القناة"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "مع وجود خطأ"
|
||||
msgid "Withdraw"
|
||||
msgstr "سحب"
|
||||
|
||||
#. 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."
|
||||
msgstr "بدون هذا الإذن، يلزم استخدام الضغط للتحدث في هذه القناة."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "لقد تم إيقافك مؤقتًا. تم إيقاف المراسلة والتفاعلات والصوت مؤقتًا حتى انتهاء المهلة."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "أنت تشاهد الرسائل القديمة"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "لقد وصلت إلى الحد الأقصى من المجتمعات"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -1305,6 +1305,9 @@
|
||||
{
|
||||
"msgid": "Add a Klipy API key to enable GIF search at runtime."
|
||||
},
|
||||
{
|
||||
"msgid": "Add new reactions to messages in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Adds a manual audio source picker to the stream settings menu. Without it, a shared window already captures that app and a shared screen captures your desktop."
|
||||
},
|
||||
@@ -1353,9 +1356,18 @@
|
||||
{
|
||||
"msgid": "Automatic ({codec})"
|
||||
},
|
||||
{
|
||||
"msgid": "Ban members from the community, with the option to delete their recent messages."
|
||||
},
|
||||
{
|
||||
"msgid": "Banned {targetUserTag} from the community"
|
||||
},
|
||||
{
|
||||
"msgid": "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
},
|
||||
{
|
||||
"msgid": "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
},
|
||||
{
|
||||
"msgid": "Bluesky connections"
|
||||
},
|
||||
@@ -1377,6 +1389,12 @@
|
||||
{
|
||||
"msgid": "Change stream"
|
||||
},
|
||||
{
|
||||
"msgid": "Change which voice region a voice channel uses."
|
||||
},
|
||||
{
|
||||
"msgid": "Change which voice region this channel uses."
|
||||
},
|
||||
{
|
||||
"msgid": "Choices"
|
||||
},
|
||||
@@ -1443,9 +1461,15 @@
|
||||
{
|
||||
"msgid": "Custom emoji {emojiName} from {communityName}"
|
||||
},
|
||||
{
|
||||
"msgid": "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
},
|
||||
{
|
||||
"msgid": "Decide how premium limits apply to people on this instance."
|
||||
},
|
||||
{
|
||||
"msgid": "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
},
|
||||
{
|
||||
"msgid": "Delete user"
|
||||
},
|
||||
@@ -1467,6 +1491,12 @@
|
||||
{
|
||||
"msgid": "Disable direct messages and friend requests"
|
||||
},
|
||||
{
|
||||
"msgid": "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
},
|
||||
{
|
||||
"msgid": "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
},
|
||||
{
|
||||
"msgid": "Duplicate role"
|
||||
},
|
||||
@@ -1560,6 +1590,9 @@
|
||||
{
|
||||
"msgid": "If you can't verify by SMS"
|
||||
},
|
||||
{
|
||||
"msgid": "Ignore this channel's slowmode cooldown."
|
||||
},
|
||||
{
|
||||
"msgid": "Image assets"
|
||||
},
|
||||
@@ -1575,9 +1608,21 @@
|
||||
{
|
||||
"msgid": "Input level"
|
||||
},
|
||||
{
|
||||
"msgid": "Invite new people to the community with a link to this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Invite new people to the community with an invite link."
|
||||
},
|
||||
{
|
||||
"msgid": "Italic"
|
||||
},
|
||||
{
|
||||
"msgid": "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
},
|
||||
{
|
||||
"msgid": "Join voice channels and hear others."
|
||||
},
|
||||
{
|
||||
"msgid": "Keep Neko still"
|
||||
},
|
||||
@@ -1611,12 +1656,21 @@
|
||||
{
|
||||
"msgid": "May cause compatibility issues for viewers. We’re working on improving this."
|
||||
},
|
||||
{
|
||||
"msgid": "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
},
|
||||
{
|
||||
"msgid": "Microphone ({deviceLabel})"
|
||||
},
|
||||
{
|
||||
"msgid": "Mirror tiers"
|
||||
},
|
||||
{
|
||||
"msgid": "Mute other members in this voice channel for everyone."
|
||||
},
|
||||
{
|
||||
"msgid": "Mute other members in voice channels for everyone."
|
||||
},
|
||||
{
|
||||
"msgid": "My community"
|
||||
},
|
||||
@@ -1680,6 +1734,12 @@
|
||||
{
|
||||
"msgid": "Pin Neko to the top-right of the chat input instead of following your cursor"
|
||||
},
|
||||
{
|
||||
"msgid": "Pin or unpin any message in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Pin or unpin any message."
|
||||
},
|
||||
{
|
||||
"msgid": "Pop out user"
|
||||
},
|
||||
@@ -1725,12 +1785,21 @@
|
||||
{
|
||||
"msgid": "Public registration is closed."
|
||||
},
|
||||
{
|
||||
"msgid": "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
},
|
||||
{
|
||||
"msgid": "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
},
|
||||
{
|
||||
"msgid": "Reason (optional)."
|
||||
},
|
||||
{
|
||||
"msgid": "Registration"
|
||||
},
|
||||
{
|
||||
"msgid": "Remove members from the community. They can rejoin with a new invite."
|
||||
},
|
||||
{
|
||||
"msgid": "Removed timeout from {targetUserTag}"
|
||||
},
|
||||
@@ -1848,12 +1917,21 @@
|
||||
{
|
||||
"msgid": "Security key PIN form"
|
||||
},
|
||||
{
|
||||
"msgid": "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
},
|
||||
{
|
||||
"msgid": "Self-host setup"
|
||||
},
|
||||
{
|
||||
"msgid": "Send file messages in order"
|
||||
},
|
||||
{
|
||||
"msgid": "Send messages in channels."
|
||||
},
|
||||
{
|
||||
"msgid": "Send messages in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Sequential send"
|
||||
},
|
||||
@@ -1896,6 +1974,12 @@
|
||||
{
|
||||
"msgid": "Show connection volume controls"
|
||||
},
|
||||
{
|
||||
"msgid": "Show embedded previews for links they send in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Show embedded previews for links they send."
|
||||
},
|
||||
{
|
||||
"msgid": "Show fewer filters"
|
||||
},
|
||||
@@ -2010,12 +2094,30 @@
|
||||
{
|
||||
"msgid": "Turn off audio sharing for this source or try again in a moment."
|
||||
},
|
||||
{
|
||||
"msgid": "Turn on a camera or share a screen in this voice channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Unable to send verification code"
|
||||
},
|
||||
{
|
||||
"msgid": "Unavailable"
|
||||
},
|
||||
{
|
||||
"msgid": "Upload files and media in messages."
|
||||
},
|
||||
{
|
||||
"msgid": "Upload files and media in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Use emoji from other communities in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Use stickers from other communities in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Use stickers from other communities."
|
||||
},
|
||||
{
|
||||
"msgid": "Use system-wide push-to-talk and shortcuts."
|
||||
},
|
||||
@@ -2055,6 +2157,9 @@
|
||||
{
|
||||
"msgid": "Who can join"
|
||||
},
|
||||
{
|
||||
"msgid": "Without this permission, push-to-talk is required in this channel."
|
||||
},
|
||||
{
|
||||
"msgid": "Wordmark"
|
||||
},
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Добавяне на елемент"
|
||||
msgid "Add local files"
|
||||
msgstr "Добавяне на локални файлове"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Добавяне на нови реакции към съобщения в този канал."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Добавяне на реакция"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Добавяне на реакции"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Добавени роли."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Добавено към отметки"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Настройте общото ниво на мащабиране на приложението. Използвайте {zoomIn} / {zoomOut} за бърза настройка."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Администратор"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Вече е насрочено за анулиране"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Също така докладвай това съобщение на екипа за безопасност на {productName}"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "За да работи персонализираният URL адрес, поне един канал трябва да има активирано разрешение \"{viewChannelPermissionLabel}\" за {EVERYONE_MENTION}. В момента няма канали, които да са видими за {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Прикачване на файлове"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Аудио"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Аудио и видео"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Забрани потребител"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Забраняване на достъп на членове"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Забранете членове от общността, с опция за изтриване на техните скорошни съобщения."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Основни настройки и разрешени URI адреси
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Основни текстови полета"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Бъдете чути над други членове в този канал, докато държите клавиша за натискане за говорене (приоритет)."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Бъдете чути над други членове, докато държите клавиша за приоритетно говорене (натисни и говори)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Отбелязване на съобщение"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Добавено към отметките."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Заобикаляне на заглушаването на споменавания"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Заобикаляне на бавен режим"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Промяна на прякорите на другите членове."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Промяна на собствен псевдоним"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Формуляр за промяна на потребителско и
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Променете какво могат да виждат потребители без \"{readMessageHistoryPermissionLabel}\""
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Промени региона на гласовия канал."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Промени региона на гласовия сървър за този канал."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Канал {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Достъп до канал"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Раздели с подробности за канала"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Идентификаторът на канала е копиран"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "линк към канал"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Връзката към канала е копирана"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Индикатори за писане в списъка с канали"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Управление на канали"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Гласови функции на общността"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "За цялата общност"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Свържете микрофон и опитайте отново."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Свързване с гласов канал"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Копирай ID на канала"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Копиране на връзка към канала"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Неуспешно изтегляне на актуализацията за настолната версия"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Не успяхме да дублираме този канал"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Не може да се отвори порталът за плащане"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Разговорът не можа да бъде закачен"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Потребителят не можа да бъде отблокиран"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Разговорът не можа да бъде отменен"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Създаване на лично съобщение"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Създаване на емоджита и стикери"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Създаване на покана"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Създаване на връзки за покани"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Създаване, редактиране или изтриване на роли под вашата най-висока роля. Позволява също редактиране на отменяния на разрешения за канали."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Създаване, редактиране или изтриване на уебкуки за този канал."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Изключване на звука на устройството"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Заглушаване на членове"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Заглуши други членове в този гласов канал, така че да не могат да чуват или говорят."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Заглуши други членове във гласови канали, така че да не могат да чуват или говорят."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "По подразбиране е изключено на мобилни
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Изтриване на \"{stickerName}\"? Това действие н
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Изтриване на {channelLabel}? Това действие не може да бъде отменено."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Изтриване на съобщения"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Изтриване на моите съобщения"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Изтриване на съобщения от други членове в този канал. Закачането се контролира отделно."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Изтриване на това съобщение"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Да изтрия ли това съобщение? Действието не може да бъде отменено."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Плъзнете и пуснете файлове за качване т
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Плъзнете и пуснете емоджи файлове тук"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Плъзнете членове между канали, до които имат достъп."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Премествайте членове между гласови канали, до които имат достъп, и ги изключвайте от гласов чат."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Премествайте членове от този гласов канал в канали, до които имат достъп, и ги изключвайте от гласовия чат."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Дублиране"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Дублиране на канала"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Редактиране на категория"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Редактиране на канала"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Редактиране или изтриване на емоджита и стикери, създадени от други членове."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Редактиране на отменяния за роли и членове в този канал."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Формуляр за отстраняване на грешки при вграждане"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Вграждане на връзки"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Игнориране на сигнал за спам"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Игнориране на поканата за приятелство от {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Игнорирай забавянето в този канал."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Игнориране на виртуални"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Модален прозорец за покани"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Визуализация на покана"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Поканете нови хора в общността с връзка към този канал."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Поканете нови хора в общността чрез покана за връзка."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Присъединяване от това устройство"
|
||||
msgid "Join the call"
|
||||
msgstr "Присъединяване към разговора"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Присъединете се към този гласов канал и чуйте другите. Отказването му заедно с „Преглед на канала“ за {everyoneMention} прави канала частен."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Присъединяване към гласово повикване"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Присъединяване към гласов канал"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Присъединявай се към гласови канали и слушай другите."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Към първото непрочетено съобщение"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Към съобщението"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Отиване на страница"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Към най-новите"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Изгони член"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Изгонване на членове"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Управление на блокирани потребители"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Управление на канала"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Управление на канали"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Управление на общността"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Управление на функциите на общността"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Управление на емоджита и стикери"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Управлявайте връзките за покани за този канал."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Управление на съобщения"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Управление на прякори"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Управление на методите за плащане"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Управление на разрешенията"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Управление на закупени кодове за подаръци и URL адреси за подаръци"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Управление на роли"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Управление на абонамент"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Управление на уебкуки"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Контроли за споменаване"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Споменете всички или всяка роля (дори ако ролята не е настроена да може да бъде споменавана)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Упоменаване на всички или на която и да е роля в този канал (дори ако ролята не е настроена да бъде споменавана)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Връзка към съобщението"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Списък със съобщения"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Списък със съобщения за {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Съобщения"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Съобщения и медия"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Изтрити съобщения"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Съобщенията не можаха да се заредят"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Модератор"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Модерация"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Премести елемент нагоре"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Преместване на членове"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Изключване на известията за любими"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Изключване на звука на членове"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Изключване на микрофона"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Изключване на известията"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Заглуши други членове в този гласов канал за всички."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Заглуши други членове във гласови канали за всички."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Няма блокирани потребители"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Отваряне на подробности за канала \"{channe
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Отваряне на чата"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Закачи съобщението"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Закачане на съобщения"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Закачане на съобщения"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Закачете съобщения тук, за да ги виждат всички."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Закачете или откачете всяко съобщение в този канал."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Закачане или откачане на всяко съобщение."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Закачена група"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Закачен групов чат"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Приоритизиране на говорещите"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Приоритетен говорител"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Прочитане на съобщението на глас"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Преглед на историята на съобщенията"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Преглед на историята на съобщенията"
|
||||
msgid "Read messages"
|
||||
msgstr "Прочетени съобщения"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Чете съобщения, изпратени преди да отворят канал. Без него виждат само съобщения, които пристигат, докато каналът е отворен."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Чете съобщения, изпратени в този канал, преди да го отворят. Без него те виждат само съобщения, които пристигат, докато е отворен."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Премахване на икона"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Премахване от канала за всички."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Премахнете членове от общността. Те могат да се присъединят отново с нова покана."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Отказът за {0} е премахнат."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Премахнато от отметки"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Преименуване на :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Преименуване и редактиране на настройките на този канал."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "ПИН код за ключа за сигурност"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "ПИН код за сигурностна карта"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Виждате канали по подразбиране. Канали, които го забраняват, остават скрити."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Вижте как изглежда поканата ви за посетителите."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Вижте списъка с членове за каналите в тази общност."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Вижте списъка с членове за този канал."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Вижте този канал. Отказването му за {everyoneMention} прави канала частен."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Изпращане на съобщение"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Изпращане на съобщения"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Изпращане на съобщения"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Изпращането на съобщения е деактивирано"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Изпращане на съобщения в канали."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Изпращане на съобщения в този канал."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Изпращане на връзка за нулиране"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Изпращане на запазена медия {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Изпращане на съобщения с преобразуване на текст в говор."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Изпращай съобщения с текст към реч чрез /tts. Членовете, които са включили текст към реч, ги чуват прочетени на глас."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Изпращане до"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Изпращане на TTS съобщения"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Зададе ниво на потвърждение на <0>няма</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Задаване на гласов регион"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Показване на бутон за изтриване"
|
||||
msgid "Show download button"
|
||||
msgstr "Показване на бутон за изтегляне"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Показвай вградени превюта за връзки, които изпращат в този канал."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Показвай вградени превюта за изпратените от тях връзки."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Нещо се обърка."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Нещо се обърка. Моля, опитайте отново след малко."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Пространствени и времеви слоеве"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Говори"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Настройки на стрийма"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Предаване на видео"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Влиза в сила незабавно. Може да бъде при
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Говорете в разговори и тествайте входа си."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Говори в този гласов канал. Без него членовете остават заглушени, докато някой с разрешение \"Заглушаване на членове\" не ги вдигне."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Говори във гласови канали. Без това разрешение членовете остават заглушени, докато някой с разрешение „Заглушаване на членове“ не ги вдигне."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Избор на формат за час"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Временно ограничаване на членове"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Изключване на стрийма"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Изключете поверителността при стрийминг, преди да преглеждате данни за вход или подробности за сигурността на акаунта."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Включете камера или споделете екран в този гласов канал."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Включете камера или споделете екран в гласови канали."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Групата е открепена"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Групов чат без закачане"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Качване на емоджи"
|
||||
msgid "Upload file"
|
||||
msgstr "Качване на файл"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Качване на файлове и медии в съобщения."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Качвайте файлове и медии в този канал."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Използване на друг имейл"
|
||||
msgid "Use email"
|
||||
msgstr "Използване на имейл"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Използвай емоджита от други общности в този канал."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Използвайте емоджита от други общности."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Използване на външни емоджита"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Използване на външни стикери"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Използване на запазена медия"
|
||||
msgid "Use selection"
|
||||
msgstr "Използване на избраното"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Използвай стикери от други общности в този канал."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Използвайте стикери от други общности с {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Използвай стикери от други общности."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Използвайте видео и предварителен преглед на камерата."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Използване на гласова активност"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Преглед на профила на {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Преглед на дневника за активност"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Вижте контролите на разговора"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Преглед на канал"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Преглед на членовете на канала"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "С грешка"
|
||||
msgid "Withdraw"
|
||||
msgstr "Изтегляне"
|
||||
|
||||
#. 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."
|
||||
msgstr "Без това разрешение в този канал ще трябва да използвате натискане за говорене."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Времето ви изтече. Изпращането на съобщения, реакциите и гласовите съобщения са на пауза, докато изтече наказанието."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Преглеждате по-стари съобщения"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Достигнали сте лимита за общности"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Přidat položku"
|
||||
msgid "Add local files"
|
||||
msgstr "Přidat místní soubory"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Přidávat nové reakce ke zprávám v tomto kanálu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Přidat reakci"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Přidávat reakce"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Přidány role."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Přidáno do záložek"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Upravte celkovou úroveň přiblížení aplikace. Pro rychlou úpravu použijte {zoomIn} / {zoomOut}."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrátor"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Zrušení je již naplánováno"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Nahlásit tuto zprávu také týmu bezpečnosti {productName}"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Aby adresa URL fungovala, musí mít alespoň jeden kanál povolené oprávnění \"{viewChannelPermissionLabel}\" pro {EVERYONE_MENTION}. Momentálně nejsou pro {EVERYONE_MENTION} viditelné žádné kanály."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Připojit soubory"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Zvuk"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Zvuk a video"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Zablokovat uživatele"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Zablokovat členy"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Zakázat členy komunity, s možností smazat jejich nedávné zprávy."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Základní nastavení a povolené adresy URL pro přesměrování."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Základní textová pole"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Buďte slyšet nad ostatními členy tohoto kanálu při držení klávesové zkratky pro push-to-talk (priorita)."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Buďte slyšet nad ostatními členy, když držíte klávesovou zkratku pro push to talk (priorita)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Uložit zprávu do záložek"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Přidáno do záložek."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Obejít potlačení zmínky"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Obejít pomalý režim"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Změnit přezdívky ostatních členů."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Změnit vlastní přezdívku"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Formulář pro změnu uživatelského jména"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Změnit, co uvidí uživatelé bez oprávnění \"{readMessageHistoryPermissionLabel}\""
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Změnit hlasovou oblast, kterou používá hlasový kanál."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Změnit, kterou hlasovou oblast tento kanál používá."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Kanál {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Přístup k kanálu"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Sekce podrobností kanálu"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "ID kanálu zkopírováno"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "odkaz na kanál"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Odkaz na kanál zkopírován"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Indikátory psaní v seznamu kanálů"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Správa kanálů"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Hlas komunity"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Celá komunita"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Připojte mikrofon a zkuste to znovu."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Připojit se k hlasovému chatu"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Kopírovat ID kanálu"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Kopírovat odkaz na kanál"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Nepodařilo se stáhnout aktualizaci pro počítač"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Nepodařilo se zkopírovat tento kanál"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Portál pro platby se nepodařilo otevřít"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Konverzaci se nepodařilo připnout"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Uživatele se nepodařilo odblokovat"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Konverzaci se nepodařilo odepnout"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Vytvořit zprávu"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Vytvářet emoji a nálepky"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Vytvořit pozvánku"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Vytvářet zvací odkazy"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Vytvářejte, upravujte nebo mažte role pod vaší nejvyšší rolí. Také umožňuje upravovat přepsání oprávnění kanálu."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Vytvářejte, upravujte nebo mažte webhooks pro tento kanál."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Ztlumit zařízení"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Ztlumit členy"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Ztlumit ostatní členy v tomto hlasovém kanálu, aby nemohli slyšet ani mluvit."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Ztlumit ostatní členy ve zvukových kanálech, aby nemohli slyšet ani mluvit."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Ve výchozím nastavení vypnuto na mobilu kvůli úspoře baterie a dat
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Smazat \"{stickerName}\"? Tuto akci nelze vrátit zpět."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Smazat {channelLabel}? Nelze vrátit zpět."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Smazat zprávy"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Smazat mé zprávy"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Smazat zprávy ostatních členů v tomto kanálu. Připínání je řízeno samostatně."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Smazat tuto zprávu"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Smazat tuto zprávu? Nelze vrátit zpět."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Přetáhněte soubory sem pro nahrání"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Přetáhněte sem soubory emoji"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Přetáhněte členy mezi kanály, ke kterým mají přístup."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Přesouvejte členy mezi hlasovými kanály, ke kterým mají přístup, a odpojujte je z hlasového hovoru."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Přesuňte členy z tohoto hlasového kanálu do kanálů, ke kterým mají přístup, a odpojte je od hlasu."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Duplikovat"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Duplikovat kanál"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Upravit kategorii"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Upravit kanál"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Upravit nebo smazat emoji a nálepky vytvořené jinými členy."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Upravit přepsání pro role a členy v tomto kanálu."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Formulář pro ladění vložení"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Vkládat odkazy"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Ignorovat označení spamu"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Ignorovat žádost o přátelství od uživatele {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ignorovat omezení rychlosti zpráv v tomto kanálu."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ignorovat virtuální"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Pozvánka"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Náhled pozvánky"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Pozvěte nové lidi do komunity odkazem na tento kanál."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Pozvat nové lidi do komunity pomocí odkazu k pozvání."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Připojit se na tomto zařízení"
|
||||
msgid "Join the call"
|
||||
msgstr "Připojit se k hovoru"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Připojte se k tomuto hlasovému kanálu a poslouchejte ostatní. Jeho odepření spolu s oprávněním Zobrazit kanál pro {everyoneMention} učiní kanál soukromým."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Připojit se k hlasovému hovoru"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Připojit se k hlasovému kanálu"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Připojte se k hlasovým kanálům a poslouchejte ostatní."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Přejít na první nepřečtenou zprávu"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Přejít na zprávu"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Přejít na stránku"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Přejít na aktuální zprávy"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Vyhodit člena"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Vyhodit členy"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Spravovat blokované uživatele"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Spravovat kanál"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Spravovat kanály"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Spravovat komunitu"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Spravovat funkce komunity"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Spravovat emoji a nálepky"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Spravujte odkazy na pozvánky pro tento kanál."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Spravovat zprávy"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Spravovat přezdívky"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Spravovat platební metody"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Spravovat oprávnění"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Spravovat zakoupené dárkové kódy a URL dárků"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Spravovat role"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Spravovat předplatné"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Spravovat webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Ovládání zmínek"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Zmínit všechny nebo jakoukoli roli (i když role není nastavená jako zmínitelná)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Zmínit všechny nebo jakoukoli roli v tomto kanálu (i když role není nastavena jako zmínitelná)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Odkaz na zprávu"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Seznam zpráv"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Seznam zpráv pro {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Zprávy"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Zprávy a média"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Zprávy smazány"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Zprávy se nepodařilo načíst"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Moderátor"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderování"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Přesunout položku nahoru"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Přesunout členy"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Ztlumit oblíbené"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Ztlumit členy"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Ztlumit mikrofon"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Ztlumit oznámení"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Ztlumit ostatní členy v tomto hlasovém kanálu pro všechny."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Ztlumit ostatní členy ve hlasových kanálech pro všechny."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Žádní blokovaní uživatelé"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Otevřít podrobnosti kanálu {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Otevřít chat"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Připnout zprávu"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Připínat zprávy"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Připínat zprávy"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Zde si můžete připnout zprávy, aby je všichni viděli."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Připnout nebo odebrat připnutí libovolné zprávy v tomto kanálu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Připnout nebo odebrat připnutí libovolné zprávy."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Připnutá skupina"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Připnutá skupinová zpráva"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Upřednostnit mluvčí"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioritní mluvčí"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Přečíst zprávu nahlas"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Číst historii zpráv"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Číst historii zpráv"
|
||||
msgid "Read messages"
|
||||
msgstr "Přečtené zprávy"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Číst zprávy odeslané před otevřením kanálu. Bez tohoto oprávnění uvidí pouze zprávy, které dorazí, když je kanál otevřený."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Číst zprávy odeslané v tomto kanálu předtím, než ho otevřeli. Bez něj uvidí pouze zprávy, které dorazí, když je kanál otevřený."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Odebrat ikonu"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Odstranit z kanálu pro všechny."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Odebrat členy z komunity. Mohou se znovu připojit s novým pozváním."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Odebráno zamítnutí pro {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Odebráno ze záložek"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Přejmenovat :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Přejmenovat a upravit nastavení tohoto kanálu."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "PIN pro bezpečnostní klíč"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "PIN pro bezpečnostní klíč"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Ve výchozím nastavení zobrazit kanály. Kanály, které ho zamítnou, zůstanou skryté."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Podívejte se, jak vaše pozvánka vypadá pro návštěvníky."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Zobrazit seznam členů kanálů v této komunitě."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Zobrazit seznam členů tohoto kanálu."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Zobrazit tento kanál. Odmítnutí pro {everyoneMention} zpřístupní kanál jen vybraným."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Odeslat zprávu"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Odesílat zprávy"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Odesílat zprávy"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Odesílání zpráv zakázáno"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Odesílat zprávy v kanálech."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Odesílat zprávy v tomto kanálu."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Odeslat odkaz pro resetování"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Odeslat uložené médium {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Odesílat zprávy s převodem textu na řeč."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Odesílejte zprávy pomocí převodu textu na řeč pomocí /tts. Členové, kteří mají zapnutý převod textu na řeč, je slyší číst nahlas."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Odeslat na"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Odesílat zprávy převodem textu na řeč"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Úroveň ověření nastavena na <0>žádná</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Nastavit oblast hlasového serveru"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Zobrazit tlačítko smazat"
|
||||
msgid "Show download button"
|
||||
msgstr "Zobrazit tlačítko pro stažení"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Zobrazit vložené náhledy odkazů, které odešlou v tomto kanálu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Zobrazit vložené náhledy odkazů, které odešlou."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Něco se pokazilo."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Něco se pokazilo. Zkuste to prosím za chvíli znovu."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Prostorové a časové vrstvy"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Mluvit"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Nastavení streamu"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Streamovat video"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Vstoupí v platnost okamžitě. Může být účtován poměrný poplate
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Mluvte v hovorech a otestujte svůj vstup."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Mluvte v tomto hlasovém kanálu. Bez tohoto oprávnění zůstanou členové ztlumeni, dokud je někdo s oprávněním Ztlumit členy neodmlčí."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Mluvte ve hlasových kanálech. Bez tohoto oprávnění zůstanou členové ztlumeni, dokud je někdo s oprávněním Ztlumit členy neodmlčí."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Výběr formátu času"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Dočasně omezit členy"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Vypnout stream"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Před zobrazením přihlašovacích údajů nebo podrobností o zabezpečení účtu vypněte soukromí streamování."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Zapnout kameru nebo sdílet obrazovku v tomto hlasovém kanálu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Zapnout kameru nebo sdílet obrazovku v hlasových kanálech."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Skupina odepnuta"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Skupinová zpráva (nepřipnuto)"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Nahrát emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Nahrát soubor"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Nahrávejte soubory a média do zpráv."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Nahrávejte soubory a média v tomto kanálu."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Použít jiný e-mail"
|
||||
msgid "Use email"
|
||||
msgstr "Použít e-mail"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Používat emotikony z jiných komunit v tomto kanálu."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Používat emoji z jiných komunit."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Používat externí emoji"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Používat externí nálepky"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Použít uložená média"
|
||||
msgid "Use selection"
|
||||
msgstr "Použít výběr"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Používat nálepky z jiných komunit v tomto kanálu."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Používejte nálepky z jiných komunit s {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Používat nálepky z jiných komunit."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Používat náhledy videa a kamery."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Používat hlasovou aktivitu"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Zobrazit profil uživatele {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Zobrazit protokol aktivit"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Zobrazit ovládání hovoru"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Zobrazit kanál"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Zobrazit členy kanálu"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "S chybou"
|
||||
msgid "Withdraw"
|
||||
msgstr "Vybrat"
|
||||
|
||||
#. 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."
|
||||
msgstr "Bez tohoto oprávnění je v tomto kanálu vyžadováno stisknutí a podržení pro mluvení."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Máte časový limit. Zprávy, reakce a hlasové funkce jsou pozastaveny, dokud časový limit nevyprší."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Zobrazujete starší zprávy"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Dosáhli jste limitu komunit"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Tilføj emne"
|
||||
msgid "Add local files"
|
||||
msgstr "Tilføj lokale filer"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Tilføj nye reaktioner til beskeder i denne kanal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Tilføj reaktion"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Tilføj reaktioner"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Tilføjede roller."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Føjet til bogmærker"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Juster appens zoomniveau. Brug {zoomIn} / {zoomOut} til hurtigt at justere."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Allerede indstillet til at annullere"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Rapportér også denne besked til {productName}s sikkerhedsteam"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Mindst én kanal skal have tilladelsen \"{viewChannelPermissionLabel}\" aktiveret for {EVERYONE_MENTION}, for at den tilpassede URL kan fungere. Der er i øjeblikket ingen kanaler, som {EVERYONE_MENTION} kan se."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Vedhæft filer"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Lyd"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Lyd og video"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Bandlys medlem"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Bandlys medlemmer"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Bannymedlemmer fra fællesskabet, med mulighed for at slette deres seneste beskeder."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Grundlæggende indstillinger og tilladte omdirigerings-URI'er."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Grundlæggende tekstfelter"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Bliv hørt over andre medlemmer i denne kanal, mens du holder nede på tasten til \"push to talk (prioritet)\"."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Bliv hørt over andre medlemmer, mens du holder nede på tasten til \"push to talk (prioritet)\"."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Bogmærk besked"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Tilføjet til bogmærker."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Tilsidesæt undertrykkelse af omtale"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Omgå slowmode"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Skift andre medlemmers kaldenavne."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Skift eget kaldenavn"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Formular til ændring af brugernavn"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Skift, hvad brugere uden \"{readMessageHistoryPermissionLabel}\" kan se"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Skift, hvilken stemmeregion en stemmekanal bruger."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Skift, hvilken stemmeregion denne kanal bruger."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Kanal {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Kanaladgang"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Kanaloplysninger"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Kanal-id kopieret"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "kanallink"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Kanallink kopieret"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Skriveindikatorer på kanallisten"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Kanaladministration"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Fællesskabsstemme"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Hele fællesskabet"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Tilslut en mikrofon og prøv igen."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Opret forbindelse til tale"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Kopiér kanal-ID"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Kopiér kanallink"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Kunne ikke downloade desktopopdateringen"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Kunne ikke duplikere denne kanal"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Kunne ikke åbne faktureringsportalen"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Kunne ikke fastgøre denne samtale"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Kunne ikke fjerne blokering af bruger"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Kunne ikke fjerne fastgørelse af denne samtale"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Opret direkte besked"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Opret emoji og stickers"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Opret invitation"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Opret invitationslinks"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Opret, rediger eller slet roller under din højeste rolle. Giver også mulighed for at redigere tilsidesættelser af kanaltilladelser."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Opret, rediger eller slet webhooks for denne kanal."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Slå lyd fra på enhed"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Slå lyden fra for medlemmer"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Dæmp andre medlemmer i denne tale-kanal, så de hverken kan høre eller tale."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Dæmp andre medlemmer i tale-kanaler, så de hverken kan høre eller tale."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Standardindstillingen er slået fra på mobil for at spare på batteri o
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Slet \"{stickerName}\"? Dette kan ikke fortrydes."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Slet {channelLabel}? Kan ikke fortrydes."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Slet beskeder"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Slet mine beskeder"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Slet andre medlemmers beskeder i denne kanal. Fastgørelse styres separat."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Slet denne besked"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Slet denne besked? Kan ikke fortrydes."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Træk og slip filer her for at uploade"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Træk og slip emoji-filer her"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Træk medlemmer mellem kanaler, de har adgang til."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Træk medlemmer mellem stemmekanaler, de har adgang til, og afbryd dem fra stemme."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Træk medlemmer ud af denne stemmekanal til kanaler, de har adgang til, og afbryd deres stemmeforbindelse."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Duplikér"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Duplikér kanal"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Rediger kategori"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Rediger kanal"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Rediger eller slet emoji og stickers, der er oprettet af andre medlemmer."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Rediger tilsidesættelser for roller og medlemmer i denne kanal."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Formular til indlejringsfejlfinding"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Integrer links"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Ignorer spammarkering"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Ignorer venneanmodningen fra {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ignorer denne kanals langsomtilstand."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ignorer virtuel"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Inviteringsvindue"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Forhåndsvisning af invitation"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Inviter nye personer til fællesskabet med et link til denne kanal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Inviter nye personer til fællesskabet med et invitationslink."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Deltag på denne enhed"
|
||||
msgid "Join the call"
|
||||
msgstr "Deltag i opkaldet"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Deltag i denne stemmekanal og hør andre. Hvis du nægter den sammen med \"Se kanal\" for {everyoneMention}, bliver kanalen privat."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Deltag i taleopkald"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Deltag i talechat"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Deltag i stemmekanaler og hør andre."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Gå til første ulæste besked"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Gå til besked"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Gå til side"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Gå til nyeste"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Smide medlem ud"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Smide medlemmer ud"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Administrer blokerede brugere"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Administrer kanal"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Administrer kanaler"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Administrer fællesskab"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Administrer fællesskabsfunktioner"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Administrer emoji og stickers"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Administrer invitationslinks for denne kanal."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Administrer beskeder"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Administrer kaldenavne"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Administrer betalingsmetoder"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Administrer tilladelser"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Administrer købte gavekoder og gave-URL'er"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Administrer roller"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Administrer abonnement"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Administrer webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Kontrol af omtaler"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Nævn alle eller en hvilken som helst rolle (også selvom rollen ikke er indstillet til at kunne nævnes)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Nævn alle eller enhver rolle i denne kanal (selvom rollen ikke er sat til at kunne nævnes)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Beskedlink"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Beskedliste"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Beskedliste for {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Beskeder"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Beskeder og medier"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Beskeder slettet"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Kunne ikke indlæse beskeder"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Tilstand"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderat"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Flyt element op"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Flyt medlemmer"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Slå favoritter fra"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Slå medlemmer fra"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Slå mikrofon fra"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Slå notifikationer fra"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Slå andre medlemmer fra i denne stemmekanal for alle."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Slå andre medlemmer fra i stemmekanaler for alle."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Ingen blokerede brugere"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Åbn kanaloplysninger for {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Åbn chat"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Fastgør besked"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Fastgør beskeder"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Fastgør beskeder"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Fastgør beskeder her, så alle kan se dem."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Fastgør eller fjern fastgørelse af enhver besked i denne kanal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Fastgør eller fjern fastgørelse af enhver besked."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Fastgjort gruppe"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Fastgjort gruppe-DM"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Prioritér talere"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioritetstaler"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Læs besked højt"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Læs beskedhistorik"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Læs beskedhistorik"
|
||||
msgid "Read messages"
|
||||
msgstr "Læs beskeder"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Læs beskeder sendt, før de åbnede en kanal. Uden den ser de kun beskeder, der ankommer, mens den er åben."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Læs beskeder sendt i denne kanal, før de åbnede den. Uden den ser de kun beskeder, der ankommer, mens den er åben."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Fjern ikon"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Fjern den fra kanalen for alle."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Fjern medlemmer fra fællesskabet. De kan genindtræde med en ny invitation."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Nægtelse af {0} fjernet."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Fjernet fra bogmærker"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Omdøb :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Omdøb og rediger indstillingerne for denne kanal."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "Sikkerhedsnøgle-PIN"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "Sikkerhedsnøgle-PIN-formular"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Se kanaler som standard. Kanaler, der nægter det, forbliver skjulte."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Se, hvordan din invitation ser ud for besøgende."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Se medlemslisten for kanaler i dette fællesskab."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Se medlemslisten for denne kanal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Se denne kanal. At nægte det for {everyoneMention} gør kanalen privat."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Send besked"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Send beskeder"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Send beskeder"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Afsendelse af beskeder deaktiveret"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Send beskeder i kanaler."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Send beskeder i denne kanal."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Send link til nulstilling"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Sendt gemt medie: {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Send tekst-til-tale-beskeder."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Send talebeskeder med /tts. Medlemmer, der har slået talebeskeder til, hører dem blive læst højt."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Send til"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Send TTS-beskeder"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Sæt bekræftelsesniveau til <0>ingen</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Angiv stemmeregion"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Vis slet-knap"
|
||||
msgid "Show download button"
|
||||
msgstr "Vis download-knap"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Vis indlejrede forhåndsvisninger af links, de sender i denne kanal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Vis indlejrede forhåndsvisninger af links, de sender."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Der opstod en fejl."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Der opstod en fejl. Prøv venligst igen om et øjeblik."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Rumlige og tidsmæssige lag"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Tal"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Streamindstillinger"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Stream video"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Træder i kraft med det samme. Der kan opkræves et forholdsmæssigt geb
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Tal i opkald og test din input."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Tal i denne stemmekanal. Uden den forbliver medlemmer mutede, indtil nogen med \"Mute members\" unmute dem."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Tal i stemmekanaler. Uden denne tilladelse forbliver medlemmer mutede, indtil nogen med \"Mute members\" fjerner deres mute."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Valg af tidsformat"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Sæt medlemmer på pause"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Slå stream fra"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Slå streaming-privatliv fra, før du ser login- eller kontosikkerhedsoplysninger."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Slå et kamera til eller del en skærm i denne stemmekanal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Slå et kamera til eller del en skærm i stemmekanaler."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Gruppe afgjort"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Gruppe-DM af fastgørelse ophævet"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Upload emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Upload fil"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Upload filer og medier i beskeder."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Upload filer og medier i denne kanal."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Brug en anden e-mail"
|
||||
msgid "Use email"
|
||||
msgstr "Brug e-mail"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Brug emoji fra andre communities i denne kanal."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Brug emoji fra andre fællesskaber."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Brug eksterne emoji"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Brug eksterne stickers"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Brug gemte medier"
|
||||
msgid "Use selection"
|
||||
msgstr "Brug valgte"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Brug klistermærker fra andre communities i denne kanal."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Brug klistermærker fra andre fællesskaber med {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Brug klistermærker fra andre communities."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Brug video- og kameraforhåndsvisninger."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Brug stemmeaktivitet"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Se {userName}s profil"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Se aktivitetslog"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Vis opkaldskontroller"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Se kanal"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Se kanalmedlemmer"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Med fejl"
|
||||
msgid "Withdraw"
|
||||
msgstr "Træk tilbage"
|
||||
|
||||
#. 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."
|
||||
msgstr "Uden denne tilladelse kræves push-to-talk i denne kanal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Du er sat på timeout. Beskeder, reaktioner og tale er sat på pause, indtil timeouten udløber."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Du ser ældre beskeder"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Du har nået grænsen for fællesskaber"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Element hinzufügen"
|
||||
msgid "Add local files"
|
||||
msgstr "Lokale Dateien hinzufügen"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Neue Reaktionen zu Nachrichten in diesem Kanal hinzufügen."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Reaktion hinzufügen"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Reaktionen hinzufügen"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Rollen hinzugefügt."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Zu Lesezeichen hinzugefügt"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Passe die allgemeine Zoomstufe der App an. Verwende {zoomIn} / {zoomOut}, um schnell anzupassen."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Kündigung bereits geplant"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Diese Nachricht auch an das {productName}-Sicherheitsteam melden"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Mindestens ein Kanal muss die Berechtigung \"{viewChannelPermissionLabel}\" für {EVERYONE_MENTION} aktiviert haben, damit die Vanity-URL funktioniert. Derzeit sind keine Kanäle für {EVERYONE_MENTION} sichtbar."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Dateien anhängen"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Audio / Video-Einstellungen"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Audio & Video"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Mitglied bannen"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Mitglieder bannen"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Mitglieder aus der Community ausschließen, mit der Option, ihre letzten Nachrichten zu löschen."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Grundeinstellungen und erlaubte Weiterleitungs-URIs."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Einfache Texteingaben"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Gehört werden, auch wenn andere Mitglieder in diesem Kanal sprechen, während du die \"Push-to-Talk (Priorität)\"-Taste gedrückt hältst."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Werde über andere Mitglieder gehört, während du die Push-to-Talk (Priorität)-Taste gedrückt hältst."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Nachricht merken"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Als Lesezeichen gespeichert."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Erwähnungsunterdrückung umgehen"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Slowmode umgehen"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Anzeigename anderer Mitglieder ändern."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Eigenen Anzeigename ändern"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Benutzernamen ändern"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Ändern, was Benutzer ohne \"{readMessageHistoryPermissionLabel}\" sehen können"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Ändere die Sprachregion eines Sprachkanals."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Ändere die Sprachregion, die dieser Kanal verwendet."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Kanal {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Kanalzugriff"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Kanalinfo-Abschnitte"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Kanal-ID kopiert"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "Kanal-Link"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Kanallink kopiert"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Tipp-Indikatoren in der Kanalliste"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Kanalverwaltung"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Community-Sprachchat"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Gesamte Community"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Verbinde ein Mikrofon und versuche es erneut."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Mit Sprachkanälen verbinden"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Kanal-ID kopieren"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Kanallink kopieren"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Desktop-Update konnte nicht heruntergeladen werden"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Kanal konnte nicht dupliziert werden"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Das Abrechnungsportal konnte nicht geöffnet werden"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Konversation konnte nicht angeheftet werden"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Nutzer konnte nicht entbannt werden"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Konversation konnte nicht entpinnt werden"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Neue Direktnachricht"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Emoji und Sticker erstellen"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Einladung erstellen"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Einladungslinks erstellen"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Rollen erstellen, bearbeiten oder löschen, die unter deiner höchsten Rolle liegen. Ermöglicht auch das Bearbeiten von Kanalberechtigungsüberschreibungen."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Webhooks für diesen Kanal erstellen, bearbeiten oder löschen."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Gerät stummschalten"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Mitglieder stummschalten"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Andere Mitglieder in diesem Sprachkanal stumm schalten, damit sie weder hören noch sprechen können."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Andere Mitglieder in Sprachkanälen stumm schalten, sodass sie weder hören noch sprechen können."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Standardmäßig auf Mobilgeräten deaktiviert, um Akku und Datenvolumen
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "\"{stickerName}\" löschen? Kann nicht rückgängig gemacht werden."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "{channelLabel} löschen? Kann nicht rückgängig gemacht werden."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Nachrichten löschen"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Meine Nachrichten löschen"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Nachrichten anderer Mitglieder in diesem Kanal löschen. Pinnen wird separat gesteuert."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Diese Nachricht löschen"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Diese Nachricht löschen? Kann nicht rückgängig gemacht werden."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Dateien hierher ziehen, um sie hochzuladen"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Emoji-Dateien hierher ziehen"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Verschiebe Mitglieder zwischen Kanälen, auf die sie zugreifen können."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Mitglieder zwischen Sprachkanälen ziehen, auf die sie zugreifen können, und sie aus der Sprachverbindung trennen."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Ziehe Mitglieder aus diesem Sprachkanal in Kanäle, auf die sie zugreifen können, und trenne sie von der Sprachverbindung."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Duplizieren"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Kanal duplizieren"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Kategorie bearbeiten"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Kanal bearbeiten"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Emojis und Sticker bearbeiten oder löschen, die von anderen Mitgliedern erstellt wurden."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Berechtigungen für Rollen und Mitglieder in diesem Kanal bearbeiten."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Formular für den Einbettungs-Debugger"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Links einbetten"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Spam-Markierung ignorieren"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Freundschaftsanfrage von {displayName} ignorieren?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Langsammodus-Cooldowns dieses Kanals ignorieren."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Virtuelle ignorieren"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Einladungs-Pop-up"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Vorschau der Einladungsmodal"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Lade neue Leute mit einem Link zu diesem Kanal in die Community ein."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Lade neue Leute mit einem Einladungslink zur Community ein."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Auf diesem Gerät beitreten"
|
||||
msgid "Join the call"
|
||||
msgstr "Anruf beitreten"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Tritt diesem Sprachkanal bei und höre andere. Wenn du dies zusammen mit \"Kanal anzeigen\" für {everyoneMention} verweigerst, wird der Kanal privat."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Sprachanruf beitreten"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Sprachkanal beitreten"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Stimmenkanälen beitreten und andere hören."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Zum ersten ungelesenen Beitrag springen"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Zur Nachricht springen"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Gehe zu Seite"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Zum Ende springen"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Mitglied entfernen"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Mitglieder entfernen"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Blockierte Nutzer verwalten"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Kanal verwalten"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Kanäle verwalten"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Community verwalten"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Community-Funktionen verwalten"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Emoji und Sticker verwalten"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Einladungslinks für diesen Kanal verwalten."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Nachrichten verwalten"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Anzeigenamen verwalten"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Zahlungsmethoden verwalten"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Berechtigungen verwalten"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Gekaufte Geschenkcodes und Geschenk-URLs verwalten"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Rollen verwalten"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Abonnement verwalten"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Webhooks verwalten"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Erwähnungs-Einstellungen"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Alle oder eine beliebige Rolle erwähnen (auch wenn die Rolle nicht als erwähnbar festgelegt ist)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Alle oder jede Rolle in diesem Kanal erwähnen (auch wenn die Rolle nicht als erwähnbar markiert ist)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Nachrichtenlink"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Nachrichtenliste"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Nachrichtenliste für {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Nachrichten"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Nachrichten & Medien"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Nachrichten gelöscht"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Nachrichten konnten nicht geladen werden"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Mod"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderation"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Element nach oben verschieben"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Mitglieder verschieben"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Favoriten stummschalten"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Mitglieder stummschalten"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Mikrofon stummschalten"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Benachrichtigungen stummschalten"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Andere Mitglieder in diesem Sprachkanal für alle stummschalten."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Andere Mitglieder in Sprachkanälen für alle stummschalten."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Keine blockierten Nutzer"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Kanaldetails für {channelName} öffnen"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Chat öffnen"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Nachricht anpinnen"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Nachrichten anpinnen"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Nachrichten anpinnen"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Heften Sie hier Nachrichten an, damit alle sie sehen können."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Jede Nachricht in diesem Kanal anheften oder lösen."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Jede Nachricht anheften oder lösen."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Angepinnte Gruppe"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Angepinnter Gruppenchat"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Sprecher priorisieren"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioritätssprecher"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Nachricht vorlesen"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Nachrichtenverlauf lesen"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Nachrichtenverlauf lesen"
|
||||
msgid "Read messages"
|
||||
msgstr "Nachrichten lesen"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Nachrichten lesen, die gesendet wurden, bevor sie einen Kanal geöffnet haben. Ohne diese Berechtigung sehen sie nur Nachrichten, die eintreffen, während der Kanal geöffnet ist."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Nachrichten lesen, die in diesem Kanal gesendet wurden, bevor sie ihn geöffnet haben. Ohne diese Berechtigung sehen sie nur Nachrichten, die eintreffen, während der Kanal geöffnet ist."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Icon entfernen"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Nachricht für alle aus dem Kanal entfernen."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Mitglieder aus der Community entfernen. Sie können mit einer neuen Einladung wieder beitreten."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Verweigerung für {0} entfernt."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Aus Lesezeichen entfernt"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Umbenennen: {emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Diesen Kanal umbenennen und seine Einstellungen bearbeiten."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "PIN für Sicherheitsschlüssel"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "PIN für Sicherheitsschlüssel"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Kanäle standardmäßig anzeigen. Kanäle, die dies verweigern, bleiben verborgen."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "So sieht deine Einladung für Besucher aus."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Die Mitgliederliste für Kanäle in dieser Community ansehen."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Mitgliederliste dieses Kanals ansehen."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Diesen Kanal sehen. Wenn Sie dies für {everyoneMention} verweigern, wird der Kanal privat."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Nachricht senden"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Nachrichten senden"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Nachrichten senden"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Nachrichten senden deaktiviert"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Nachrichten in Kanälen senden."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Nachrichten in diesem Kanal senden."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Zurücksetzungslink senden"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Gespeichertes Medium \"{memeName}\" senden"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Text-to-Speech-Nachrichten senden."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Sende Text-to-Speech-Nachrichten mit /tts. Mitglieder, die Text-to-Speech aktiviert haben, hören sie vorgelesen."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Senden an"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "TTS-Nachrichten senden"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Verifizierungslevel auf <0>keins</0> gesetzt."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Sprachregion festlegen"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Löschen-Button anzeigen"
|
||||
msgid "Show download button"
|
||||
msgstr "Download-Button anzeigen"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Eingebettete Vorschauen für Links anzeigen, die sie in diesem Kanal senden."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Vorschaubilder für Links anzeigen, die sie senden."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Etwas ist schiefgelaufen."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es gleich noch einmal."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Räumliche und zeitliche Ebenen"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Sprechen"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Stream-Einstellungen"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Video streamen"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Tritt sofort in Kraft. Eine anteilige Gebühr kann über {PAYMENT_PROVID
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "In Anrufen sprechen und deine Eingabe testen."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "In diesem Sprachkanal sprechen. Ohne diese Berechtigung bleiben Mitglieder stummgeschaltet, bis sie von jemandem mit der Berechtigung \"Mitglieder stummschalten\" freigeschaltet werden."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "In Sprachkanälen sprechen. Ohne diese Berechtigung bleiben Mitglieder stumm, bis sie von jemandem mit der Berechtigung \"Mitglieder stummschalten\" freigeschaltet werden."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Zeitanzeige auswählen"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Mitglieder stummschalten"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Stream beenden"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Deaktiviere den Streaming-Datenschutz, bevor du dich anmeldest oder Accountsicherheitsdetails ansiehst."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Kamera einschalten oder Bildschirm in diesem Sprachkanal teilen."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Kamera in Sprachkanälen einschalten oder Bildschirm teilen."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Gruppe losgelöst"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Gruppen-DM nicht mehr angepinnt"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Emoji hochladen"
|
||||
msgid "Upload file"
|
||||
msgstr "Datei hochladen"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Dateien und Medien in Nachrichten hochladen."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Dateien und Medien in diesem Kanal hochladen."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Andere E-Mail verwenden"
|
||||
msgid "Use email"
|
||||
msgstr "E-Mail verwenden"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Emoji aus anderen Communities in diesem Kanal verwenden."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Emojis aus anderen Communitys verwenden."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Externe Emojis verwenden"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Externe Sticker verwenden"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Gespeicherte Medien verwenden"
|
||||
msgid "Use selection"
|
||||
msgstr "Auswahl verwenden"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Sticker von anderen Communities in diesem Kanal verwenden."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Sticker aus anderen Communitys mit {premiumProductName} nutzen"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Sticker von anderen Communities verwenden."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Vorschau von Videos und Kamera verwenden."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Sprachaktivierung nutzen"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Profil von {userName} ansehen"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Aktivitätsprotokoll ansehen"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Anrufsteuerung anzeigen"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Kanal ansehen"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Kanalmitglieder anzeigen"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Mit Fehler"
|
||||
msgid "Withdraw"
|
||||
msgstr "Abheben"
|
||||
|
||||
#. 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."
|
||||
msgstr "Ohne diese Berechtigung ist in diesem Kanal Push-to-Talk erforderlich."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Sie sind stummgeschaltet. Nachrichten, Reaktionen und Sprachnachrichten sind pausiert, bis die Stummschaltung abläuft."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Du siehst dir ältere Nachrichten an"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Du bist der maximalen Anzahl an Communitys beigetreten"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Προσθήκη αντικειμένου"
|
||||
msgid "Add local files"
|
||||
msgstr "Προσθήκη τοπικών αρχείων"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Προσθήκη νέων αντιδράσεων σε μηνύματα σε αυτό το κανάλι."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Προσθήκη αντίδρασης"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Προσθήκη αντιδράσεων"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Προστέθηκαν ρόλοι."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Προστέθηκε στους σελιδοδείκτες"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Προσαρμόστε το συνολικό επίπεδο ζουμ της εφαρμογής. Χρησιμοποιήστε {zoomIn} / {zoomOut} για γρήγορη προσαρμογή."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Διαχειριστής"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Έχει ήδη οριστεί για ακύρωση"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Αναφορά αυτού του μηνύματος και στην ομάδα ασφαλείας του {productName}"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Πρέπει τουλάχιστον ένα κανάλι να έχει την άδεια \"{viewChannelPermissionLabel}\" ενεργοποιημένη για το {EVERYONE_MENTION} ώστε να λειτουργεί η προσαρμοσμένη διεύθυνση URL. Επί του παρόντος, κανένα κανάλι δεν είναι ορατό στο {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Επισύναψη αρχείων"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Ήχος"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Ήχος και βίντεο"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Αποκλεισμός μέλους"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Αποκλεισμός μελών"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Αποκλεισμός μελών από την κοινότητα, με την επιλογή διαγραφής των πρόσφατων μηνυμάτων τους."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Βασικές ρυθμίσεις και επιτρεπόμενα URI α
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Βασικά πεδία κειμένου"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Να ακούγεσαι πάνω από τα άλλα μέλη σε αυτό το κανάλι, κρατώντας πατημένο το πλήκτρο \"ώθηση για ομιλία (προτεραιότητα)\"."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Να ακούγεσαι πάνω από τα άλλα μέλη ενώ κρατάς το πλήκτρο \"push to talk (priority)\"."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Σελιδοδείκτης μηνύματος"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Προστέθηκε στους σελιδοδείκτες."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Παράκαμψη καταστολής αναφορών"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Παράκαμψη αργής λειτουργίας"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Αλλαγή ψευδώνυμων άλλων μελών."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Αλλαγή δικού του ψευδώνυμου"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Φόρμα αλλαγής ονόματος χρήστη"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Αλλάξτε τι μπορούν να δουν οι χρήστες χωρίς την άδεια \"{readMessageHistoryPermissionLabel}\""
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Αλλαγή της περιοχής φωνής που χρησιμοποιεί ένα κανάλι φωνής."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Αλλαγή της περιοχής φωνής που χρησιμοποιεί αυτό το κανάλι."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Κανάλι {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Πρόσβαση σε κανάλι"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Ενότητες λεπτομερειών καναλιού"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Αντιγράφηκε το αναγνωριστικό καναλιού"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "σύνδεσμος καναλιού"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Ο σύνδεσμος του καναλιού αντιγράφηκε"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Ενδείξεις πληκτρολόγησης στη λίστα καναλιών"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Διαχείριση καναλιών"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Φωνή κοινότητας"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Σε όλη την κοινότητα"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Συνδέστε ένα μικρόφωνο και δοκιμάστε ξ
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Σύνδεση σε φωνητική συνομιλία"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Αντιγραφή αναγνωριστικού καναλιού"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Αντιγραφή συνδέσμου καναλιού"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Δεν ήταν δυνατή η λήψη της ενημέρωσης για υπολογιστές"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Αδυναμία αντιγραφής αυτού του καναλιού"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Δεν ήταν δυνατή η φόρτωση της πύλης χρέωσης"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Δεν ήταν δυνατή η καρφίτσωμα αυτής της συνομιλίας"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Αποτυχία κατάργησης αποκλεισμού χρήστη"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Αδυναμία κατάργησης καρφιτσώματος αυτής της συνομιλίας"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Δημιουργία νέας συνομιλίας"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Δημιουργία emoji και αυτοκόλλητων"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Δημιουργία πρόσκλησης"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Δημιουργία συνδέσμων πρόσκλησης"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Δημιουργία, επεξεργασία ή διαγραφή ρόλων κάτω από τον υψηλότερο ρόλο σας. Επίσης, επιτρέπει την επεξεργασία των αντικαταστάσεων δικαιωμάτων καναλιού."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Δημιουργία, επεξεργασία ή διαγραφή webhooks για αυτό το κανάλι."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Απενεργοποίηση ήχου συσκευής"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Σίγαση μελών"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Κάνε mute άλλα μέλη σε αυτό το κανάλι φωνής, ώστε να μην μπορούν να ακούσουν ή να μιλήσουν."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Κάνε mute άλλα μέλη στα κανάλια φωνής, ώστε να μην μπορούν να ακούσουν ή να μιλήσουν."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Είναι απενεργοποιημένο από προεπιλογή
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Διαγραφή \"{stickerName}\"; Δεν είναι δυνατή η α
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Να διαγραφεί το {channelLabel}; Δεν είναι δυνατή η αναίρεση."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Διαγραφή μηνυμάτων"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Διαγραφή των μηνυμάτων μου"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Διαγραφή μηνυμάτων άλλων μελών σε αυτό το κανάλι. Η καρφίτσωμα ελέγχεται ξεχωριστά."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Διαγραφή αυτού του μηνύματος"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Διαγραφή αυτού του μηνύματος; Δεν μπορεί να αναιρεθεί."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Περιοχή μεταφοράς και απόθεσης για μετ
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Σύρετε και αποθέστε αρχεία emoji εδώ"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Σύρετε μέλη μεταξύ των καναλιών στα οποία έχουν πρόσβαση."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Μεταφέρετε μέλη μεταξύ φωνητικών καναλιών στα οποία έχουν πρόσβαση και αποσυνδέστε τα από τη φωνητική επικοινωνία."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Μεταφέρετε μέλη από αυτό το κανάλι φωνής σε κανάλια στα οποία έχουν πρόσβαση και αποσυνδέστε τα από τη φωνή."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Αντιγραφή"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Αντιγραφή καναλιού"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Επεξεργασία κατηγορίας"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Επεξεργασία καναλιού"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Επεξεργασία ή διαγραφή emoji και αυτοκόλλητων που δημιουργήθηκαν από άλλα μέλη."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Επεξεργασία εξαιρέσεων για ρόλους και μέλη σε αυτό το κανάλι."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Φόρμα εντοπισμού σφαλμάτων ενσωμάτωσης"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Ενσωμάτωση συνδέσμων"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Παράβλεψη επισήμανσης ανεπιθύμητου"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Να αγνοήσετε το αίτημα φιλίας από τον/την {displayName};"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Αγνόησε τον περιορισμό αργής αποστολής μηνυμάτων αυτού του καναλιού."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Παράβλεψη εικονικού"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Παράθυρο πρόσκλησης"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Προεπισκόπηση παραθύρου πρόσκλησης"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Προσκάλεσε νέα άτομα στην κοινότητα με έναν σύνδεσμο προς αυτό το κανάλι."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Πρόσκληση νέων ατόμων στην κοινότητα με έναν σύνδεσμο πρόσκλησης."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Συμμετοχή από αυτήν τη συσκευή"
|
||||
msgid "Join the call"
|
||||
msgstr "Συμμετοχή στην κλήση"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Συμμετέχετε σε αυτό το κανάλι φωνής και ακούστε άλλους. Η άρνησή του μαζί με την προβολή καναλιού για το {everyoneMention} καθιστά το κανάλι ιδιωτικό."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Συμμετοχή σε φωνητική κλήση"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Συμμετοχή στο κανάλι φωνητικής συνομιλίας"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Συμμετοχή σε φωνητικά κανάλια και ακρόαση άλλων."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Μετάβαση στο πρώτο μη αναγνωσμένο μήνυμα"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Μετάβαση στο μήνυμα"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Μετάβαση στη σελίδα"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Μετάβαση στο τώρα"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Αποβολή μέλους"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Αποβολή μελών"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Διαχείριση αποκλεισμένων χρηστών"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Διαχείριση καναλιού"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Διαχείριση καναλιών"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Διαχείριση κοινότητας"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Διαχείριση λειτουργιών κοινότητας"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Διαχείριση emoji και αυτοκόλλητων"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Διαχείριση συνδέσμων πρόσκλησης για αυτό το κανάλι."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Διαχείριση μηνυμάτων"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Διαχείριση ψευδώνυμων"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Διαχείριση τρόπων πληρωμής"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Διαχείριση δικαιωμάτων"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Διαχείριση κωδικών δώρου και URL δώρου που αγοράστηκαν"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Διαχείριση ρόλων"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Διαχείριση συνδρομής"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Διαχείριση webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Ρυθμίσεις αναφορών"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Αναφορά σε όλους ή σε οποιονδήποτε ρόλο (ακόμα κι αν ο ρόλος δεν έχει οριστεί ως αναφοράς)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Κάνε αναφορά σε όλους ή σε οποιονδήποτε ρόλο σε αυτό το κανάλι (ακόμα κι αν ο ρόλος δεν είναι ορισμένος ως \"αναφερόμενος\")."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Σύνδεσμος μηνύματος"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Λίστα μηνυμάτων"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Λίστα μηνυμάτων για το {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Μηνύματα"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Μηνύματα και πολυμέσα"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Μηνύματα που διαγράφηκαν"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Τα μηνύματα δεν φορτώθηκαν"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Συντονιστής"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Συντονισμός"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Μετακίνηση στοιχείου προς τα πάνω"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Μετακίνηση μελών"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Σίγαση αγαπημένων"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Σίγαση μελών"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Σίγαση μικροφώνου"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Σίγαση ειδοποιήσεων"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Σίγασε άλλα μέλη σε αυτό το κανάλι φωνής για όλους."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Σίγαση άλλων μελών σε φωνητικά κανάλια για όλους."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Κανένας αποκλεισμένος χρήστης"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Άνοιγμα λεπτομερειών καναλιού για {channel
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Άνοιγμα συνομιλίας"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Καρφίτσωμα μηνύματος"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Καρφίτσωμα μηνυμάτων"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Καρφίτσωμα μηνυμάτων"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Καρφιτσώστε μηνύματα εδώ για να τα βλέπουν όλοι."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Καρφίτσωμα ή αφαίρεση καρφιτσώματος οποιουδήποτε μηνύματος σε αυτό το κανάλι."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Καρφίτσωμα ή αφαίρεση καρφιτσώματος οποιουδήποτε μηνύματος."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Καρφιτσωμένη ομάδα"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Καρφιτσωμένη ομαδική συνομιλία"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Προτεραιότητα σε ομιλητές"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Ομιλητής προτεραιότητας"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Ανάγνωση μηνύματος φωναχτά"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Ανάγνωση ιστορικού μηνυμάτων"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Ανάγνωση ιστορικού μηνυμάτων"
|
||||
msgid "Read messages"
|
||||
msgstr "Διαβάστηκαν τα μηνύματα"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Διάβασε μηνύματα που στάλθηκαν πριν ανοίξουν ένα κανάλι. Χωρίς αυτήν, βλέπουν μόνο μηνύματα που φτάνουν ενώ είναι ανοιχτό."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Διάβασε μηνύματα που στάλθηκαν σε αυτό το κανάλι πριν το ανοίξουν. Χωρίς αυτήν, βλέπουν μόνο μηνύματα που φτάνουν ενώ είναι ανοιχτό."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Αφαίρεση εικονιδίου"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Κατάργησή του από το κανάλι για όλους."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Αφαίρεσε μέλη από την κοινότητα. Μπορούν να επανέλθουν με νέα πρόσκληση."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Καταργήθηκε η άρνηση για {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Αφαιρέθηκε από τους σελιδοδείκτες"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Μετονομασία :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Μετονομασία και επεξεργασία των ρυθμίσεων αυτού του καναλιού."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "Κωδικός PIN ασφαλείας"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "Φόρμα κωδικού PIN για το κλειδί ασφαλείας"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Προβολή καναλιών από προεπιλογή. Τα κανάλια που το αρνούνται παραμένουν κρυφά."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Δείτε πώς φαίνεται η πρόσκλησή σας στους επισκέπτες."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Δείτε τη λίστα μελών για κανάλια σε αυτήν την κοινότητα."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Δείτε τη λίστα μελών για αυτό το κανάλι."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Προβολή αυτού του καναλιού. Η άρνησή του για το {everyoneMention} καθιστά το κανάλι ιδιωτικό."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Αποστολή μηνύματος"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Αποστολή μηνυμάτων"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Αποστολή μηνυμάτων"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Αποστολή μηνυμάτων απενεργοποιημένη"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Αποστολή μηνυμάτων στα κανάλια."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Αποστολή μηνυμάτων σε αυτό το κανάλι."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Αποστολή συνδέσμου επαναφοράς"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Αποστολή αποθηκευμένου πολυμέσου {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Αποστολή μηνυμάτων μετατροπής κειμένου σε ομιλία."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Στείλτε μηνύματα κειμένου σε ομιλία με το /tts. Τα μέλη που έχουν ενεργοποιήσει την κειμενοφωνία τα ακούν να διαβάζονται δυνατά."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Αποστολή σε"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Αποστολή μηνυμάτων κειμένου σε ομιλία"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Ορίστηκε το επίπεδο επαλήθευσης σε <0>κανένα</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Ορισμός περιοχής φωνής"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Εμφάνιση κουμπιού διαγραφής"
|
||||
msgid "Show download button"
|
||||
msgstr "Εμφάνιση κουμπιού λήψης"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Εμφάνιση προεπισκοπήσεων για συνδέσμους που στέλνουν σε αυτό το κανάλι."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Εμφάνιση ενσωματωμένων προεπισκοπήσεων για συνδέσμους που στέλνουν."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Κάτι πήγε στραβά."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Κάτι πήγε στραβά. Δοκιμάστε ξανά σε λίγο."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Χωρικά και χρονικά επίπεδα"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Ομιλία"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Ρυθμίσεις ροής"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Μετάδοση βίντεο"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Ισχύει άμεσα. Ενδέχεται να εφαρμοστεί α
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Μιλήστε σε κλήσεις και δοκιμάστε την είσοδό σας."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Μιλήστε σε αυτό το κανάλι φωνής. Χωρίς αυτήν, τα μέλη παραμένουν σε σίγαση μέχρι κάποιος με την άδεια \"Σίγαση μελών\" να τους ενεργοποιήσει."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Μιλήστε σε κανάλια φωνής. Χωρίς αυτήν, τα μέλη παραμένουν σε σίγαση μέχρι κάποιος με την άδεια \"Σίγαση μελών\" να τους άρει τη σίγαση."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Επιλογή μορφής ώρας"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Θέση σε προσωρινή αναστολή μελών"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Απενεργοποίηση ροής"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Απενεργοποιήστε το απόρρητο ροής πριν δείτε τα στοιχεία σύνδεσης ή ασφάλειας λογαριασμού."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Ενεργοποιήστε μια κάμερα ή μοιραστείτε την οθόνη σας σε αυτό το κανάλι φωνής."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Ενεργοποιήστε μια κάμερα ή μοιραστείτε την οθόνη σας σε φωνητικά κανάλια."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Ομάδα που δεν είναι καρφιτσωμένη"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Η ομαδική συνομιλία δεν είναι πλέον καρφιτσωμένη"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Αποστολή emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Αποστολή αρχείου"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Μεταφόρτωση αρχείων και πολυμέσων σε μηνύματα."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Μεταφόρτωση αρχείων και πολυμέσων σε αυτό το κανάλι."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Χρησιμοποιήστε διαφορετικό email"
|
||||
msgid "Use email"
|
||||
msgstr "Χρήση email"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Χρήση emoji από άλλες κοινότητες σε αυτό το κανάλι."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Χρησιμοποιήστε emoji από άλλες κοινότητες."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Χρήση εξωτερικών emoji"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Χρήση εξωτερικών αυτοκόλλητων"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Χρήση αποθηκευμένων πολυμέσων"
|
||||
msgid "Use selection"
|
||||
msgstr "Χρήση επιλογής"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Χρήση αυτοκόλλητων από άλλες κοινότητες σε αυτό το κανάλι."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Χρησιμοποιήστε αυτοκόλλητα από άλλες κοινότητες με το {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Χρήση αυτοκόλλητων από άλλες κοινότητες."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Χρησιμοποιήστε προεπισκοπήσεις βίντεο και κάμερας."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Χρήση φωνητικής δραστηριότητας"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Προβολή προφίλ του/της {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Προβολή αρχείου καταγραφής δραστηριότητας"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Προβολή στοιχείων κλήσης"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Προβολή καναλιού"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Προβολή μελών καναλιού"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Με σφάλμα"
|
||||
msgid "Withdraw"
|
||||
msgstr "Ανάληψη"
|
||||
|
||||
#. 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."
|
||||
msgstr "Χωρίς αυτήν την άδεια, απαιτείται η λειτουργία \"πάτα για να μιλήσεις\" σε αυτό το κανάλι."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Έχετε τεθεί σε προσωρινή αναστολή. Η ανταλλαγή μηνυμάτων, οι αντιδράσεις και η φωνή έχουν τεθεί σε παύση μέχρι να λήξει η αναστολή."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Βλέπετε παλιότερα μηνύματα"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Έχετε φτάσει το όριο κοινοτήτων"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Add item"
|
||||
msgid "Add local files"
|
||||
msgstr "Add local files"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Add new reactions to messages in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Add reaction"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Add reactions"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Added roles."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Added to bookmarks"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adjust quickly."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Already set to cancel"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Also report this message to the {productName} Safety Team"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "At least one channel must have \"{viewChannelPermissionLabel}\" permission enabled for {EVERYONE_MENTION} for the vanity URL to work. Currently, no channels are viewable to {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Attach files"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Audio"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Audio & video"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Ban member"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Ban members"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Ban members from the community, with the option to delete their recent messages."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Basic settings and allowed redirect URIs."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Basic text inputs"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Bookmark message"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Bookmarked."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Bypass mention suppression"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Bypass slowmode"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Change other members' nicknames."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Change own nickname"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Change username form"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Change which voice region a voice channel uses."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Change which voice region this channel uses."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Channel {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Channel access"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Channel details sections"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Channel ID copied"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "Channel link"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Channel link copied"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Channel list typing indicators"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Channel management"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Community voice"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Community-wide"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Connect a microphone and try again."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Connect to voice"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Copy channel ID"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Copy channel link"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Couldn't download the desktop update"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Couldn't duplicate this channel"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Couldn't open the billing portal"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Couldn't pin this conversation"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Couldn't unblock user"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Couldn't unpin this conversation"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Create DM"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Create emoji & stickers"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Create invite"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Create invite links"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Create, edit, or delete roles below your highest role. Also allows editing channel permission overwrites."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Create, edit, or delete webhooks for this channel."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Deafen device"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Deafen members"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Mute other members in voice channels, so they cannot hear or speak."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Defaults to off on mobile to preserve battery life and data usage."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Delete \"{stickerName}\"? This can't be undone."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Delete {channelLabel}? This can't be undone."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Delete messages"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Delete my messages"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Delete this message"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Delete this message? This can't be undone."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Drag and drop area for file upload"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Drag and drop emoji files here"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Drag members between channels they can access."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Duplicate"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Duplicate channel"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Edit category"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Edit channel"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Edit or delete emoji and stickers created by other members."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Edit overwrites for roles and members in this channel."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Embed debugger form"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Embed links"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Ignore spam flag"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Ignore the friend request from {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ignore this channel's slowmode cooldown."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ignore virtual"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Invite modal"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Invite modal preview"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Invite new people to the community with a link to this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Invite new people to the community with an invite link."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Join on this device"
|
||||
msgid "Join the call"
|
||||
msgstr "Join the call"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Join voice call"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Join voice channel"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Join voice channels and hear others."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Jump to first unread message"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Jump to message"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Jump to page"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Jump to present"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Kick member"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Kick members"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Manage blocked users"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Manage channel"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Manage channels"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Manage community"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Manage community features"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Manage emoji & stickers"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Manage invite links for this channel."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Manage messages"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Manage nicknames"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Manage payment methods"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Manage permissions"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Manage purchased gift codes and gift URLs"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Manage roles"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Manage subscription"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Manage webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Mention controls"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Message link"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Message list"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Message list for {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Messages"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Messages & media"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Messages deleted"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Messages failed to load"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Mod"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderation"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Move item up"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Move members"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Mute favourites"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Mute members"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Mute microphone"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Mute notifications"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Mute other members in this voice channel for everyone."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Mute other members in voice channels for everyone."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "No blocked users"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Open channel details for {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Open chat"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Pin message"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Pin messages"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Pin messages"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Pin messages here for everyone to see."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Pin or unpin any message in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Pin or unpin any message."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Pinned group"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Pinned group DM"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Prioritise speakers"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Priority speaker"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Read message aloud"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Read message history"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Read message history"
|
||||
msgid "Read messages"
|
||||
msgstr "Read messages"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Remove icon"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Remove it from the channel for everyone."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Remove members from the community. They can rejoin with a new invite."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Removed deny for {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Removed from bookmarks"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Rename :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Rename and edit this channel's settings."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "Security key PIN"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "Security key PIN form"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "See channels by default. Channels that deny it remain hidden."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "See how your invite looks to visitors."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "See the member list for channels in this community."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "See the member list for this channel."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Send message"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Send messages"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Send messages"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Sending messages disabled"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Send messages in channels."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Send messages in this channel."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Send reset link"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Send saved media {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Send text-to-speech messages."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Send text-to-speech messages with /tts. Members who have text-to-speech turned on will hear them read aloud."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Send to"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Send TTS messages"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Set verification level to <0>none</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Set voice region"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Show delete button"
|
||||
msgid "Show download button"
|
||||
msgstr "Show download button"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Show embedded previews for links they send in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Show embedded previews for links they send."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Something went wrong."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Something went wrong. Please try again in a moment."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Spatial and temporal layers"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Speak"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Stream settings"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Stream video"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Takes effect immediately. A prorated charge may apply via {PAYMENT_PROVI
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Talk in calls and test your input."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Speak in this voice channel. Without it, members stay muted until someone with Mute members unmuts them."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Speak in voice channels. Without it, members stay muted until someone with Mute members unmuties them."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Time format selection"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Time out members"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Turn off stream"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Turn off streaming privacy before viewing login or account security details."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Turn on a camera or share a screen in this voice channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Turn on a camera or share your screen in voice channels."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Unpinned group"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Unpinned group DM"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Upload emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Upload file"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Upload files and media in messages."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Upload files and media in this channel."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Use a different email"
|
||||
msgid "Use email"
|
||||
msgstr "Use email"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Use emoji from other communities in this channel."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Use emoji from other communities."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Use external emoji"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Use external stickers"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Use saved media"
|
||||
msgid "Use selection"
|
||||
msgstr "Use selection"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Use stickers from other communities in this channel."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Use stickers from other communities with {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Use stickers from other communities."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Use video and camera previews."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Use voice activity"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "View {userName}'s profile"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "View activity log"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "View call controls"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "View channel"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "View channel members"
|
||||
|
||||
@@ -37029,6 +37219,12 @@ 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."
|
||||
msgstr "Without this permission, push-to-talk is required in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38101,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "You're timed out. Messaging, reactions, and voice are paused until the timeout expires."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "You're viewing older messages"
|
||||
|
||||
@@ -37950,7 +38146,7 @@ msgstr "You’ve reached the community limit"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2484,6 +2484,11 @@ msgstr "Add item"
|
||||
msgid "Add local files"
|
||||
msgstr "Add local files"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Add new reactions to messages in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2513,7 +2518,7 @@ msgid "Add reaction"
|
||||
msgstr "Add reaction"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Add reactions"
|
||||
|
||||
@@ -2652,7 +2657,7 @@ msgid "Added roles."
|
||||
msgstr "Added roles."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Added to bookmarks"
|
||||
|
||||
@@ -2736,7 +2741,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adjust quickly."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
@@ -3161,7 +3166,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Already set to cancel"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Also report this message to the {productName} Safety Team"
|
||||
|
||||
@@ -3955,7 +3960,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "At least one channel must have \"{viewChannelPermissionLabel}\" permission enabled for {EVERYONE_MENTION} in order for the vanity URL to work. Currently, no channels are viewable to {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Attach files"
|
||||
|
||||
@@ -4059,7 +4064,7 @@ msgid "Audio"
|
||||
msgstr "Audio"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Audio & video"
|
||||
|
||||
@@ -4774,10 +4779,15 @@ msgid "Ban member"
|
||||
msgstr "Ban member"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Ban members"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Ban members from the community, with the option to delete their recent messages."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4861,6 +4871,16 @@ msgstr "Basic settings and allowed redirect URIs."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Basic text inputs"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5100,7 +5120,7 @@ msgstr "Bookmark message"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5119,7 +5139,7 @@ msgstr "Bookmarked."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5455,7 +5475,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Bypass mention suppression"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Bypass slowmode"
|
||||
|
||||
@@ -6032,7 +6052,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Change other members' nicknames."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Change own nickname"
|
||||
|
||||
@@ -6092,6 +6112,16 @@ msgstr "Change username form"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Change which voice region a voice channel uses."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Change which voice region this channel uses."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6186,7 +6216,7 @@ msgid "Channel {id}"
|
||||
msgstr "Channel {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Channel access"
|
||||
|
||||
@@ -6244,7 +6274,7 @@ msgstr "Channel details sections"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Channel ID copied"
|
||||
@@ -6262,7 +6292,7 @@ msgid "channel link"
|
||||
msgstr "channel link"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Channel link copied"
|
||||
|
||||
@@ -6286,7 +6316,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Channel list typing indicators"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Channel management"
|
||||
|
||||
@@ -7846,7 +7876,7 @@ msgid "Community voice"
|
||||
msgstr "Community voice"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Community-wide"
|
||||
|
||||
@@ -8100,7 +8130,7 @@ msgstr "Connect a microphone and try again."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Connect to voice"
|
||||
@@ -8531,7 +8561,7 @@ msgstr "Copy channel ID"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Copy channel link"
|
||||
|
||||
@@ -8984,7 +9014,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Couldn't download the desktop update"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Couldn't duplicate this channel"
|
||||
|
||||
@@ -9074,7 +9104,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Couldn't open the billing portal"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Couldn't pin this conversation"
|
||||
|
||||
@@ -9253,7 +9283,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Couldn't unblock user"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Couldn't unpin this conversation"
|
||||
|
||||
@@ -9454,7 +9484,7 @@ msgid "Create DM"
|
||||
msgstr "Create DM"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Create emoji & stickers"
|
||||
|
||||
@@ -9481,7 +9511,7 @@ msgid "Create invite"
|
||||
msgstr "Create invite"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Create invite links"
|
||||
|
||||
@@ -9545,7 +9575,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Create, edit, or delete roles below your highest role. Also allows editing channel permission overwrites."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Create, edit, or delete webhooks for this channel."
|
||||
|
||||
@@ -10197,10 +10227,20 @@ msgid "Deafen device"
|
||||
msgstr "Deafen device"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Deafen members"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10396,7 +10436,7 @@ msgstr "Defaults to off on mobile to preserve battery life and data usage."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10428,7 +10468,7 @@ msgstr "Delete \"{stickerName}\"? Can't be undone."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Delete {channelLabel}? Can't be undone."
|
||||
|
||||
@@ -10556,6 +10596,11 @@ msgstr "Delete messages"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Delete my messages"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10629,7 +10674,7 @@ msgid "Delete this message"
|
||||
msgstr "Delete this message"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Delete this message? Can't be undone."
|
||||
|
||||
@@ -11914,10 +11959,15 @@ msgstr "Drag and drop area for file upload"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Drag and drop emoji files here"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Drag members between channels they can access."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12016,7 +12066,7 @@ msgstr "Duplicate"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Duplicate channel"
|
||||
|
||||
@@ -12123,7 +12173,7 @@ msgstr "Edit category"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Edit channel"
|
||||
@@ -12203,7 +12253,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Edit or delete emoji and stickers created by other members."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Edit overwrites for roles and members in this channel."
|
||||
|
||||
@@ -12425,7 +12475,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Embed debugger form"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Embed links"
|
||||
|
||||
@@ -16525,6 +16575,11 @@ msgstr "Ignore spam flag"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Ignore the friend request from {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ignore this channel's slowmode cooldown."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ignore virtual"
|
||||
@@ -17368,6 +17423,16 @@ msgstr "Invite modal"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Invite modal preview"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Invite new people to the community with a link to this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Invite new people to the community with an invite link."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17681,6 +17746,11 @@ msgstr "Join on this device"
|
||||
msgid "Join the call"
|
||||
msgstr "Join the call"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17712,6 +17782,11 @@ msgstr "Join voice call"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Join voice channel"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Join voice channels and hear others."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17758,7 +17833,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Jump to first unread message"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Jump to message"
|
||||
|
||||
@@ -17785,7 +17860,7 @@ msgid "Jump to page"
|
||||
msgstr "Jump to page"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Jump to present"
|
||||
|
||||
@@ -17958,7 +18033,7 @@ msgid "Kick member"
|
||||
msgstr "Kick member"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Kick members"
|
||||
|
||||
@@ -18832,17 +18907,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Manage blocked users"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Manage channel"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Manage channels"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Manage community"
|
||||
|
||||
@@ -18852,7 +18927,7 @@ msgid "Manage community features"
|
||||
msgstr "Manage community features"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Manage emoji & stickers"
|
||||
|
||||
@@ -18865,12 +18940,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Manage invite links for this channel."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Manage messages"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Manage nicknames"
|
||||
|
||||
@@ -18880,7 +18955,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Manage payment methods"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Manage permissions"
|
||||
|
||||
@@ -18890,7 +18965,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Manage purchased gift codes and gift URLs"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Manage roles"
|
||||
|
||||
@@ -18900,7 +18975,7 @@ msgid "Manage subscription"
|
||||
msgstr "Manage subscription"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Manage webhooks"
|
||||
|
||||
@@ -19520,6 +19595,11 @@ msgstr "Mention controls"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19751,12 +19831,12 @@ msgid "Message link"
|
||||
msgstr "Message link"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Message list"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Message list for {channelName}"
|
||||
|
||||
@@ -19847,7 +19927,7 @@ msgid "Messages"
|
||||
msgstr "Messages"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Messages & media"
|
||||
|
||||
@@ -19857,7 +19937,7 @@ msgid "Messages deleted"
|
||||
msgstr "Messages deleted"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Messages failed to load"
|
||||
|
||||
@@ -20117,7 +20197,7 @@ msgid "Mod"
|
||||
msgstr "Mod"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderation"
|
||||
|
||||
@@ -20310,7 +20390,7 @@ msgid "Move item up"
|
||||
msgstr "Move item up"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Move members"
|
||||
|
||||
@@ -20494,7 +20574,7 @@ msgid "Mute favourites"
|
||||
msgstr "Mute favourites"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Mute members"
|
||||
|
||||
@@ -20510,6 +20590,16 @@ msgstr "Mute microphone"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Mute notifications"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Mute other members in this voice channel for everyone."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Mute other members in voice channels for everyone."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21174,7 +21264,7 @@ msgstr "No blocked users"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22304,7 +22394,7 @@ msgstr "Open channel details for {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Open chat"
|
||||
|
||||
@@ -23476,7 +23566,7 @@ msgid "Pin message"
|
||||
msgstr "Pin message"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Pin messages"
|
||||
|
||||
@@ -23485,6 +23575,16 @@ msgstr "Pin messages"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Pin messages here for everyone to see."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Pin or unpin any message in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Pin or unpin any message."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23531,7 +23631,7 @@ msgstr "Pinned group"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Pinned group DM"
|
||||
@@ -24077,7 +24177,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Prioritize speakers"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Priority speaker"
|
||||
|
||||
@@ -24714,7 +24814,7 @@ msgid "Read message aloud"
|
||||
msgstr "Read message aloud"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Read message history"
|
||||
|
||||
@@ -24725,6 +24825,16 @@ msgstr "Read message history"
|
||||
msgid "Read messages"
|
||||
msgstr "Read messages"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25344,6 +25454,11 @@ msgstr "Remove icon"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Remove it from the channel for everyone."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Remove members from the community. They can rejoin with a new invite."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25456,7 +25571,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Removed deny for {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Removed from bookmarks"
|
||||
|
||||
@@ -25534,7 +25649,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Rename :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Rename and edit this channel's settings."
|
||||
|
||||
@@ -27529,6 +27644,11 @@ msgstr "Security key PIN"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "Security key PIN form"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "See channels by default. Channels that deny it stay hidden."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "See how your invite looks to visitors."
|
||||
@@ -27539,10 +27659,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "See the member list for channels in this community."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "See the member list for this channel."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27881,7 +28006,7 @@ msgstr "Send message"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Send messages"
|
||||
|
||||
@@ -27890,6 +28015,16 @@ msgstr "Send messages"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Send messages disabled"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Send messages in channels."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Send messages in this channel."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27909,10 +28044,10 @@ msgstr "Send reset link"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Send saved media {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Send text-to-speech messages."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27941,7 +28076,7 @@ msgid "Send to"
|
||||
msgstr "Send to"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Send TTS messages"
|
||||
|
||||
@@ -28311,7 +28446,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Set verification level to <0>none</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Set voice region"
|
||||
|
||||
@@ -28710,6 +28845,16 @@ msgstr "Show delete button"
|
||||
msgid "Show download button"
|
||||
msgstr "Show download button"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Show embedded previews for links they send in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Show embedded previews for links they send."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29713,8 +29858,8 @@ msgstr "Something went wrong."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Something went wrong. Please try again in a moment."
|
||||
|
||||
@@ -29890,7 +30035,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Spatial and temporal layers"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Speak"
|
||||
@@ -30553,7 +30698,7 @@ msgid "Stream settings"
|
||||
msgstr "Stream settings"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Stream video"
|
||||
|
||||
@@ -31161,6 +31306,16 @@ msgstr "Takes effect immediately. A prorated charge may apply via {PAYMENT_PROVI
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Talk in calls and test your input."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32648,7 +32803,7 @@ msgid "Time format selection"
|
||||
msgstr "Time format selection"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Time out members"
|
||||
|
||||
@@ -33318,6 +33473,16 @@ msgstr "Turn off stream"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Turn off streaming privacy before viewing login or account security details."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Turn on a camera or share a screen in this voice channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Turn on a camera or share a screen in voice channels."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34123,7 +34288,7 @@ msgstr "Unpinned group"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Unpinned group DM"
|
||||
@@ -34509,6 +34674,16 @@ msgstr "Upload emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Upload file"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Upload files and media in messages."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Upload files and media in this channel."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34794,6 +34969,11 @@ msgstr "Use different email"
|
||||
msgid "Use email"
|
||||
msgstr "Use email"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Use emoji from other communities in this channel."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34805,12 +34985,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Use emoji from other communities."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Use external emoji"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Use external stickers"
|
||||
|
||||
@@ -34906,11 +35086,21 @@ msgstr "Use saved media"
|
||||
msgid "Use selection"
|
||||
msgstr "Use selection"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Use stickers from other communities in this channel."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Use stickers from other communities with {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Use stickers from other communities."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34977,7 +35167,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Use video and camera previews."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Use voice activity"
|
||||
|
||||
@@ -35721,7 +35911,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "View {userName}'s profile"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "View activity log"
|
||||
|
||||
@@ -35777,12 +35967,12 @@ msgid "View call controls"
|
||||
msgstr "View call controls"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "View channel"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "View channel members"
|
||||
|
||||
@@ -37030,6 +37220,11 @@ msgstr "With error"
|
||||
msgid "Withdraw"
|
||||
msgstr "Withdraw"
|
||||
|
||||
#. 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."
|
||||
msgstr "Without this permission, push-to-talk is required in this channel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37906,7 +38101,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "You're timed out. Messaging, reactions, and voice are paused until the timeout expires."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "You're viewing older messages"
|
||||
|
||||
@@ -37951,7 +38146,7 @@ msgstr "You've reached the community limit"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Agregar elemento"
|
||||
msgid "Add local files"
|
||||
msgstr "Añadir archivos locales"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Añade reacciones nuevas a los mensajes en este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Añadir reacción"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Agregar reacciones"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Roles añadidos."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Añadido a favoritos"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Ajusta el nivel de zoom general de la app. Usa {zoomIn} / {zoomOut} para ajustar rápidamente."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrador"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Ya programaste la cancelación"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "También reportar este mensaje al equipo de seguridad de {productName}"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Al menos un canal debe tener el permiso \"{viewChannelPermissionLabel}\" habilitado para {EVERYONE_MENTION} para que la URL personalizada funcione. Actualmente, ningún canal es visible para {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Adjuntar archivos"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Audio"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Audio y video"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Banear miembro"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Expulsar miembros"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Expulsa a los miembros de la comunidad, con la opción de eliminar sus mensajes recientes."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Configuración básica y URI de redireccionamiento permitidas."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Campos de texto básicos"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Hazte oír por encima de otros miembros en este canal mientras mantienes presionada la tecla de \"hablar con prioridad\"."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Hazte oír por encima de otros miembros mientras mantienes presionada la tecla de \"hablar al presionar\" (prioridad)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Marcar mensaje"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Agregado a marcadores."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Omitir supresión de menciones"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Omitir modo lento"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Cambiar los apodos de otros miembros."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Cambiar mi apodo"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Formulario para cambiar el nombre de usuario"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Cambia lo que pueden ver los usuarios sin \"{readMessageHistoryPermissionLabel}\""
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Cambia la región de voz que usa un canal de voz."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Cambia la región de voz que usa este canal."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Canal {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Acceso al canal"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Secciones de detalles del canal"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "ID del canal copiado"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "enlace al canal"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Enlace del canal copiado"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Indicadores de escritura en la lista de canales"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Administración de canales"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Voz de la comunidad"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Toda la comunidad"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Conecta un micrófono e inténtalo de nuevo."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Conectarse a voz"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Copiar ID del canal"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Copiar enlace del canal"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "No se pudo descargar la actualización de escritorio"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "No se pudo duplicar este canal"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "No se pudo abrir el portal de facturación"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "No se pudo fijar esta conversación"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "No se pudo desbloquear al usuario"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "No se pudo desanclar esta conversación"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Crear mensaje directo"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Crear emojis y stickers"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Crear invitación"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Crear enlaces de invitación"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Crea, edita o elimina roles por debajo de tu rol más alto. También permite editar la anulación de permisos del canal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Crea, edita o elimina webhooks para este canal."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Silenciar dispositivo"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Silenciar miembros"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Silenciar a otros miembros en este canal de voz, para que no puedan oír ni hablar."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Silenciar a otros miembros en los canales de voz, para que no puedan oír ni hablar."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Viene desactivado por defecto en celulares para ahorrar batería y datos
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "¿Eliminar \"{stickerName}\"? No se puede deshacer."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "¿Eliminar {channelLabel}? No se puede deshacer."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Eliminar mensajes"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Eliminar mis mensajes"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Elimina los mensajes de otros miembros en este canal. Fijar mensajes se controla por separado."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Eliminar este mensaje"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "¿Eliminar este mensaje? No se puede deshacer."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Arrastra y suelta archivos aquí para subirlos"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Arrastra y suelta los archivos de emojis aquí"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Arrastra a los miembros entre los canales a los que tienen acceso."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Arrastra miembros entre canales de voz a los que puedan acceder y desconéctalos de la voz."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Arrastra miembros fuera de este canal de voz a canales a los que puedan acceder y desconéctalos de la voz."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Duplicar"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Duplicar canal"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Editar categoría"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Editar canal"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Editar o eliminar emojis y stickers creados por otros miembros."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Edita los permisos de roles y miembros en este canal."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Formulario del depurador de incrustaciones"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Insertar enlaces"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Ignorar reporte de spam"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "¿Ignorar la solicitud de amistad de {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ignorar el tiempo de espera de modo lento de este canal."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ignorar virtual"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Modal de invitación"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Previsualización del modal de invitación"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Invita a nuevas personas a la comunidad con un enlace a este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Invita a nuevas personas a la comunidad con un enlace de invitación."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Unirse desde este dispositivo"
|
||||
msgid "Join the call"
|
||||
msgstr "Unirse a la llamada"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Únete a este canal de voz y escucha a otros. Denegarlo junto con Ver canal para {everyoneMention} hace que el canal sea privado."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Unirse a la llamada de voz"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Unirse al canal de voz"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Únete a canales de voz y escucha a otros."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Ir al primer mensaje no leído"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Ir al mensaje"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Ir a la página"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Ir a lo más reciente"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Expulsar miembro"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Expulsar miembros"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Administrar usuarios bloqueados"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Administrar canal"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Administrar canales"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Administrar comunidad"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Administrar funciones de la comunidad"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Administrar emojis y stickers"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Administra los enlaces de invitación para este canal."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Administrar mensajes"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Administrar apodos"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Administrar métodos de pago"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Administrar permisos"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Administrar códigos y enlaces de regalo comprados"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Administrar roles"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Administrar suscripción"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Administrar webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Controles de menciones"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mencionar a todos o a cualquier rol (incluso si el rol no está configurado para ser mencionable)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Menciona a todos o a cualquier rol en este canal (incluso si el rol no está configurado para ser mencionable)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Enlace del mensaje"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Lista de mensajes"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Lista de mensajes de {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Mensajes"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Mensajes y contenido multimedia"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Mensajes eliminados"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "No se pudieron cargar los mensajes"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Modo"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderación"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Mover elemento hacia arriba"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Mover miembros"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Silenciar favoritos"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Silenciar miembros"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Silenciar micrófono"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Silenciar notificaciones"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Silenciar a otros miembros en este canal de voz para todos."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Silenciar a otros miembros en canales de voz para todos."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Ningún usuario bloqueado"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Abrir detalles del canal {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Abrir chat"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Fijar mensaje"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Fijar mensajes"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Fijar mensajes"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Fija mensajes aquí para que todos los vean."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Fijar o quitar el fijado de cualquier mensaje en este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Fijar o desfijar cualquier mensaje."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Grupo anclado"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "MD de grupo fijado"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Priorizar oradores"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioridad de voz"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Leer mensaje en voz alta"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Leer historial de mensajes"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Leer historial de mensajes"
|
||||
msgid "Read messages"
|
||||
msgstr "Leer mensajes"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Leer mensajes enviados antes de que abrieran un canal. Sin ella, solo ven los mensajes que llegan mientras está abierto."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Lee mensajes enviados en este canal antes de que lo abrieran. Sin este permiso, solo verán los mensajes que lleguen mientras el canal esté abierto."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Quitar ícono"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Eliminarlo del canal para todos."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Expulsa a miembros de la comunidad. Pueden volver a unirse con una nueva invitación."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Se eliminó la denegación para {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Eliminado de favoritos"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Renombrar :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Cambia el nombre y edita los ajustes de este canal."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "PIN de la clave de seguridad"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "PIN de la clave de seguridad"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Ver canales de forma predeterminada. Los canales que lo niegan permanecen ocultos."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Mira cómo ven tu invitación los visitantes."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Ver la lista de miembros de los canales en esta comunidad."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Ver la lista de miembros de este canal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Ver este canal. Denegarlo para {everyoneMention} hace que el canal sea privado."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Enviar mensaje"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Enviar mensajes"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Enviar mensajes"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Envío de mensajes deshabilitado"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Enviar mensajes en canales."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Enviar mensajes en este canal."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Enviar enlace para restablecer"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Enviar contenido guardado {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Enviar mensajes de texto a voz."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Envía mensajes de texto a voz con /tts. Los miembros que activaron texto a voz los escuchan leer en voz alta."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Enviar a"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Enviar mensajes de texto a voz"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Establecer el nivel de verificación en <0>ninguno</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Establecer región de voz"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Mostrar botón para eliminar"
|
||||
msgid "Show download button"
|
||||
msgstr "Mostrar botón de descarga"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Mostrar vistas previas incrustadas de los enlaces que envían en este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Mostrar vistas previas incrustadas de los enlaces que envían."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Algo salió mal."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Algo salió mal. Intenta de nuevo en un momento."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Capas espaciales y temporales"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Hablar"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Ajustes de la transmisión"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Transmitir video"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Entra en vigor de inmediato. Es posible que se aplique un cargo prorrate
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Habla en llamadas y prueba tu entrada."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Habla en este canal de voz. Sin este permiso, los miembros permanecerán silenciados hasta que alguien con el permiso \"Silenciar miembros\" los active."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Habla en canales de voz. Sin este permiso, los miembros permanecerán silenciados hasta que alguien con el permiso \"Silenciar miembros\" los active."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Selección de formato de hora"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Poner miembros en pausa"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Apagar transmisión"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Desactiva la privacidad de streaming antes de ver los detalles de inicio de sesión o seguridad de la cuenta."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Activa una cámara o comparte tu pantalla en este canal de voz."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Activa una cámara o comparte pantalla en canales de voz."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Grupo desanclado"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "MD de grupo desanclado"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Subir emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Subir archivo"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Sube archivos y contenido multimedia en los mensajes."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Sube archivos y contenido multimedia en este canal."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Usar otro correo electrónico"
|
||||
msgid "Use email"
|
||||
msgstr "Usar correo electrónico"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Usar emojis de otras comunidades en este canal."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Usar emojis de otras comunidades."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Usar emojis externos"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Usar stickers externos"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Usar contenido guardado"
|
||||
msgid "Use selection"
|
||||
msgstr "Usar selección"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Usar stickers de otras comunidades en este canal."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Usa stickers de otras comunidades con {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Usar stickers de otras comunidades."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Usar vistas previas de video y cámara."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Usar actividad de voz"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Ver el perfil de {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Ver registro de actividad"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Ver controles de llamada"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Ver canal"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Ver miembros del canal"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Con error"
|
||||
msgid "Withdraw"
|
||||
msgstr "Retirar"
|
||||
|
||||
#. 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."
|
||||
msgstr "Sin este permiso, se requiere pulsar para hablar en este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Se te ha agotado el tiempo. Los mensajes, las reacciones y la voz están en pausa hasta que expire el tiempo de espera."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Estás viendo mensajes antiguos"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Alcanzaste el límite de comunidades"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Añadir elemento"
|
||||
msgid "Add local files"
|
||||
msgstr "Añadir archivos locales"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Añadir nuevas reacciones a los mensajes de este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Añadir reacción"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Añadir reacciones"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Roles añadidos."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Añadido a mensajes guardados"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Ajusta el nivel de zoom general de la aplicación. Usa {zoomIn} / {zoomOut} para ajustarlo rápidamente."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrador"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Ya programada para cancelar"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "También denunciar este mensaje al equipo de seguridad de {productName}"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Al menos un canal debe tener el permiso \"{viewChannelPermissionLabel}\" habilitado para {EVERYONE_MENTION} para que la URL personalizada funcione. Actualmente, ningún canal es visible para {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Adjuntar archivos"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Audio"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Audio y vídeo"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Expulsar a un miembro"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Expulsar miembros"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Expulsa a miembros de la comunidad, con la opción de eliminar sus mensajes recientes."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Ajustes básicos y URI de redirección permitidas."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Entradas de texto básicas"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Hazte oír por encima de otros miembros en este canal mientras mantengas pulsada la tecla de \"pulsar para hablar (prioridad)\"."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Hazte oír por encima de otros miembros mientras mantengas pulsada la tecla de pulsar para hablar (prioridad)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Marcar mensaje"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Añadido a marcadores."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Omitir supresión de menciones"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Omitir modo lento"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Cambiar los apodos de otros miembros."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Cambiar mi apodo"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Formulario para cambiar el nombre de usuario"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Cambia lo que pueden ver los usuarios sin \"{readMessageHistoryPermissionLabel}\""
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Cambia la región de voz que utiliza un canal de voz."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Cambia la región de voz que usa este canal."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Canal {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Acceso al canal"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Secciones de detalles del canal"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "ID del canal copiado"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "enlace del canal"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Enlace del canal copiado"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Indicadores de escritura en la lista de canales"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Gestión de canales"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Voz de la comunidad"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Toda la comunidad"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Conecta un micrófono y vuelve a intentarlo."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Conectarse a voz"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Copiar ID del canal"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Copiar enlace del canal"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "No se ha podido descargar la actualización de escritorio"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "No se ha podido duplicar este canal"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "No se pudo abrir el portal de facturación"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "No se pudo fijar esta conversación"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "No se pudo desbloquear al usuario"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "No se pudo desanclar esta conversación"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Crear MD"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Crear emojis y stickers"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Crear invitación"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Crear enlaces de invitación"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Crea, edita o elimina roles por debajo de tu rol más alto. También permite editar la anulación de permisos del canal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Crea, edita o elimina webhooks para este canal."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Silenciar dispositivo"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Silenciar a los miembros"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Silencia a otros miembros en este canal de voz para que no puedan oír ni hablar."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Silenciar a otros miembros en los canales de voz para que no puedan oír ni hablar."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Desactivado por defecto en móviles para preservar la batería y el uso
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "¿Eliminar \"{stickerName}\"? No se podrá deshacer."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "¿Eliminar {channelLabel}? No se podrá deshacer."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Eliminar mensajes"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Eliminar mis mensajes"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Eliminar los mensajes de otros miembros en este canal. Fijar se controla por separado."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Eliminar este mensaje"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "¿Eliminar este mensaje? No se puede deshacer."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Arrastra y suelta aquí los archivos para subirlos"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Arrastra y suelta aquí los archivos de emoji"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Arrastra a los miembros entre los canales a los que pueden acceder."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Arrastra miembros entre canales de voz a los que puedan acceder y desconéctalos de la voz."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Arrastra a los miembros fuera de este canal de voz a otros a los que puedan acceder y desconéctalos de la voz."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Duplicar"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Duplicar canal"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Editar categoría"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Editar canal"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Editar o eliminar emojis y stickers creados por otros miembros."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Edita las anulaciones para roles y miembros en este canal."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Formulario del depurador de incrustaciones"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Insertar enlaces"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Ignorar aviso de spam"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "¿Ignorar la solicitud de amistad de {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ignorar el tiempo de espera de modo lento de este canal."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ignorar virtual"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Ventana de invitación"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Previsualización del modal de invitación"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Invita a gente nueva a la comunidad con un enlace a este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Invita a gente nueva a la comunidad con un enlace de invitación."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Unirse desde este dispositivo"
|
||||
msgid "Join the call"
|
||||
msgstr "Unirse a la llamada"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Únete a este canal de voz y escucha a los demás. Denegarlo junto con \"Ver canal\" para {everyoneMention} hace que el canal sea privado."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Unirse a la llamada de voz"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Unirse al canal de voz"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Únete a canales de voz y escucha a otros."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Ir al primer mensaje no leído"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Ir al mensaje"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Ir a la página"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Ir a la conversación actual"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Expulsar miembro"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Expulsar miembros"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Gestionar usuarios bloqueados"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Gestionar canal"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Gestionar canales"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Gestionar comunidad"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Gestionar funciones de la comunidad"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Gestionar emojis y stickers"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Administra los enlaces de invitación para este canal."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Gestionar mensajes"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Gestionar apodos"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Gestionar métodos de pago"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Gestionar permisos"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Gestionar códigos y enlaces de regalo comprados"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Gestionar roles"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Gestionar suscripción"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Gestionar webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Controles de menciones"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Menciona a todos o a cualquier rol (incluso si el rol no está configurado para ser mencionable)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mencionar a todos o a cualquier rol en este canal (incluso si el rol no está configurado como mencionable)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Enlace del mensaje"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Lista de mensajes"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Lista de mensajes de {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Mensajes"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Mensajes y contenido multimedia"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Mensajes eliminados"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "No se pudieron cargar los mensajes"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Modo"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderación"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Mover elemento hacia arriba"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Mover miembros"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Silenciar favoritos"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Silenciar miembros"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Silenciar micrófono"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Silenciar notificaciones"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Silenciar a otros miembros en este canal de voz para todos."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Silenciar a otros miembros en canales de voz para todos."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Ningún usuario bloqueado"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Abrir detalles del canal para {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Abrir chat"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Fijar mensaje"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Fijar mensajes"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Fijar mensajes"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Fija mensajes aquí para que todos los vean."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Fijar o quitar el fijado de cualquier mensaje en este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Anclar o desanclar cualquier mensaje."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Grupo anclado"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "MD de grupo anclado"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Priorizar a los que hablan"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioridad de voz"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Leer mensaje en voz alta"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Leer historial de mensajes"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Leer historial de mensajes"
|
||||
msgid "Read messages"
|
||||
msgstr "Leer mensajes"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Lee mensajes enviados antes de que abrieran un canal. Sin ella, solo ven los mensajes que llegan mientras está abierto."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Leer mensajes enviados en este canal antes de que lo abrieran. Sin este permiso, solo verán los mensajes que lleguen mientras el canal esté abierto."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Eliminar icono"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Eliminarlo del canal para todos."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Elimina miembros de la comunidad. Pueden volver a unirse con una nueva invitación."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Se denegó el acceso a {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Eliminado de mensajes guardados"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Renombrar :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Cambia el nombre y edita los ajustes de este canal."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "PIN de la clave de seguridad"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "PIN de la clave de seguridad"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Ver canales de forma predeterminada. Los canales que lo deniegan permanecen ocultos."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Mira cómo ven tu invitación los visitantes."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Ver la lista de miembros de los canales de esta comunidad."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Ver la lista de miembros de este canal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Ver este canal. Denegarlo para {everyoneMention} hace que el canal sea privado."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Enviar mensaje"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Enviar mensajes"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Enviar mensajes"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Envío de mensajes deshabilitado"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Enviar mensajes en canales."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Enviar mensajes en este canal."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Enviar enlace de recuperación"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Enviar contenido guardado {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Enviar mensajes de texto a voz."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Enviar mensajes de texto a voz con /tts. Los miembros que tengan activado el texto a voz los oirán leer en voz alta."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Enviar a"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Enviar mensajes de texto a voz"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Establecer el nivel de verificación en <0>ninguno</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Establecer región de voz"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Mostrar botón de eliminar"
|
||||
msgid "Show download button"
|
||||
msgstr "Mostrar botón de descarga"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Mostrar previsualizaciones incrustadas de los enlaces que envíen en este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Mostrar vistas previas incrustadas de los enlaces que envíen."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Algo salió mal."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Ha ocurrido un error. Por favor, inténtalo de nuevo en unos instantes."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Capas espaciales y temporales"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Hablar"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Ajustes de la transmisión"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Transmitir vídeo"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Surtirá efecto de inmediato. Es posible que se aplique un cargo prorrat
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Habla en llamadas y prueba tu entrada."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Habla en este canal de voz. Sin este permiso, los miembros permanecerán silenciados hasta que alguien con el permiso \"Silenciar miembros\" los active."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Habla en canales de voz. Sin este permiso, los miembros permanecerán silenciados hasta que alguien con el permiso \"Silenciar miembros\" los reactive."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Selección del formato de hora"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Aplicar tiempo de espera a los miembros"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Desactivar stream"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Desactiva la privacidad de la transmisión antes de ver los detalles de inicio de sesión o de seguridad de la cuenta."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Activar una cámara o compartir pantalla en este canal de voz."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Activar una cámara o compartir pantalla en canales de voz."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Grupo desanclado"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "MD de grupo desanclado"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Subir emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Subir archivo"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Sube archivos y contenido multimedia en los mensajes."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Sube archivos y contenido multimedia a este canal."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Usar un correo electrónico diferente"
|
||||
msgid "Use email"
|
||||
msgstr "Usar correo electrónico"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Usar emojis de otras comunidades en este canal."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Usar emojis de otras comunidades."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Usar emojis externos"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Usar stickers externos"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Usar contenido guardado"
|
||||
msgid "Use selection"
|
||||
msgstr "Usar selección"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Usar pegatinas de otras comunidades en este canal."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Usa stickers de otras comunidades con {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Usar pegatinas de otras comunidades."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Usa vistas previas de vídeo y cámara."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Usar actividad de voz"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Ver el perfil de {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Ver registro de actividad"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Ver controles de llamada"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Ver canal"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Ver miembros del canal"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Con error"
|
||||
msgid "Withdraw"
|
||||
msgstr "Retirar"
|
||||
|
||||
#. 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."
|
||||
msgstr "Sin este permiso, se requiere pulsar para hablar en este canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Has sido silenciado. Los mensajes, las reacciones y la voz están en pausa hasta que expire el tiempo de espera."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Estás viendo mensajes antiguos"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Has alcanzado el límite de comunidades"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Lisää kohde"
|
||||
msgid "Add local files"
|
||||
msgstr "Lisää paikallisia tiedostoja"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Lisää uusia reaktioita viesteihin tässä kanavassa."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Lisää reaktio"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Lisää reaktioita"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Roolit lisätty."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Lisätty kirjanmerkkeihin"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Säädä sovelluksen yleistä zoomaustasoa. Voit säätää sitä nopeasti näppäimillä {zoomIn} / {zoomOut}."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Järjestelmänvalvoja"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Peruutuksen ajoitus on jo tehty"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Ilmoita tämä viesti myös {productName}-turvatiimille"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Jotta vanity-URL toimisi, vähintään yhdessä kanavassa on oltava \"{viewChannelPermissionLabel}\" -oikeus käytössä käyttäjälle {EVERYONE_MENTION}. Tällä hetkellä yksikään kanava ei ole näkyvissä käyttäjälle {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Liitä tiedostoja"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Ääni"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Ääni ja video"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Anna porttikielto jäsenelle"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Anna porttikielto jäsenille"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Estä jäseniä yhteisöstä ja poista heidän viimeaikaiset viestinsä."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Perusasetukset ja sallitut uudelleenohjaus-URI:t."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Tekstikentät"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Tule kuulluksi muiden jäsenten yli tässä kanavassa pitäessäsi painettuna push to talk (priority) -pikanäppäintä."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Kuulu muiden jäsenten yli, kun pidät painettuna puheeksi painamisen (prioriteetti) -näppäinyhdistelmää."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Tallenna viesti"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Lisätty kirjanmerkkeihin."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Ohita mainintojen estäminen"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Ohita hidastustila"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Vaihda muiden jäsenten lempinimiä."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Vaihda oma lempinimi"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Käyttäjänimen vaihtolomake"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Muuta, mitä käyttäjät ilman oikeutta \"{readMessageHistoryPermissionLabel}\" voivat nähdä"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Vaihda äänikanavan käyttämä äänialue."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Vaihda tämän kanavan käyttämä äänialue."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Kanava {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Kanavan käyttöoikeus"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Kanavan tiedot -osiot"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Kanavan tunnus kopioitu"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "kanavalinkki"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Kanavan linkki kopioitu"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Kanavaluettelon kirjoitusilmaisimet"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Kanavien hallinta"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Yhteisöääni"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Koko yhteisö"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Yhdistä mikrofoni ja yritä uudelleen."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Yhdistä puhekanaviin"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Kopioi kanavan tunnus"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Kopioi kanavalinkki"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Työpöytäsovelluksen päivitystä ei voitu ladata"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Kanavaa ei voitu kopioida"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Laskutusportaalia ei voitu avata"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Keskustelun kiinnitys epäonnistui"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Käyttäjän eston poistaminen epäonnistui"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Keskustelun irrottaminen epäonnistui"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Luo yksityisviesti"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Luo emojeita ja tarroja"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Luo kutsu"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Luo kutsulinkkejä"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Voit luoda, muokata tai poistaa rooleja, jotka ovat oman korkeimman roolisi alapuolella. Voit myös muokata kanavakohtaisia käyttöoikeuksien ohituksia."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Luo, muokkaa tai poista webhookeja tälle kanavalle."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Mykistä laite"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Mykistä jäseniä"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Mykistä muut jäsenet tässä äänikanavassa, jotta he eivät kuule tai puhu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Mykistä muut jäsenet äänikanavilla, jotta he eivät kuule tai puhu."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Oletuksena pois päältä mobiililaitteilla akun keston ja datan sääst
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Poistetaanko \"{stickerName}\"? Tätä ei voi kumota."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Poistetaanko {channelLabel}? Toimintoa ei voi kumota."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Poista viestejä"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Poista viestini"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Poista muiden jäsenten viestit tässä kanavassa. Kiinnitykset hallitaan erikseen."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Poista tämä viesti"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Poistetaanko tämä viesti? Toimintoa ei voi kumota."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Vedä ja pudota tiedostoja tähän"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Vedä ja pudota emojitiedostot tähän"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Vedä jäseniä kanavien välillä, joihin heillä on pääsy."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Siirrä jäseniä äänikanavien välillä, joihin heillä on pääsy, ja irrota heidät äänestä."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Siirrä jäseniä tästä äänikanavasta kanaville, joihin heillä on pääsy, ja erota heidät äänestä."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Monista"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Monista kanava"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Muokkaa kategoriaa"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Muokkaa kanavaa"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Muokkaa tai poista muiden jäsenten luomia emojeita ja tarroja."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Muokkaa roolien ja jäsenten ohituksia tällä kanavalla."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Upotuksen virheenkorjauslomake"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Upota linkkejä"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Ohita roskapostimerkintä"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Ohita kaveripyyntö käyttäjältä {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ohita tämän kanavan hidastusrajoitus."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ohita virtuaalinen"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Kutsun ponnahdusikkuna"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Kutsun esikatselu"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Kutsu uusia ihmisiä yhteisöön linkillä tähän kanavaan."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Kutsu uusia ihmisiä yhteisöön kutsulinkin avulla."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Liity tällä laitteella"
|
||||
msgid "Join the call"
|
||||
msgstr "Liity puheluun"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Liity tähän äänikanavaan ja kuule muita. Jos kielletään tämä ja Kanavan katselu käyttäjille {everyoneMention}, kanavasta tulee yksityinen."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Liity äänipuheluun"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Liity äänikanavalle"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Liity äänikanaville ja kuule muita."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Siirry ensimmäiseen lukemattomaan viestiin"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Siirry viestiin"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Siirry sivulle"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Siirry nykyhetkeen"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Potkaise jäsen"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Potkaise jäseniä"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Hallinnoi estettyjä käyttäjiä"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Hallinnoi kanavaa"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Hallinnoi kanavia"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Hallinnoi yhteisöä"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Hallinnoi yhteisön ominaisuuksia"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Hallinnoi emojeita ja tarroja"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Hallitse tämän kanavan kutsujen linkkejä."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Hallinnoi viestejä"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Hallitse lempinimiä"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Hallinnoi maksutapoja"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Hallinnoi käyttöoikeuksia"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Hallinnoi ostettuja lahjakoodeja ja lahja-URL-osoitteita"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Hallinnoi rooleja"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Hallinnoi tilausta"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Hallinnoi webhookeja"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Mainintojen hallinta"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mainitse kaikki tai mikä tahansa rooli (vaikka roolia ei olisi asetettu mainittavaksi)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mainitse kaikki tai mikä tahansa rooli tässä kanavassa (vaikka roolia ei olisi asetettu mainittavaksi)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Viestilinkki"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Viestiluettelo"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Viestiluettelo kanavalle {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Viestit"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Viestit ja media"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Viestit poistettu"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Viestien lataus epäonnistui"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Moderaattori"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderointi"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Siirrä kohdetta ylöspäin"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Siirrä jäseniä"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Mykistä suosikit"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Mykistä jäseniä"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Mykistä mikrofoni"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Mykistä ilmoitukset"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Mykistä muut jäsenet tässä äänikanavassa kaikilta."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Mykistä muut jäsenet äänikanavilla kaikille."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Ei estettyjä käyttäjiä"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Avaa kanavan {channelName} tiedot"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Avaa chat"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Kiinnitä viesti"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Kiinnitä viestejä"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Kiinnitä viestejä"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Kiinnitä viestejä tähän kaikkien nähtäville."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Kiinnitä tai poista kiinnitys mistä tahansa viestistä tässä kanavassa."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Kiinnitä tai poista kiinnitys mistä tahansa viestistä."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Kiinnitetty ryhmä"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Kiinnitetty ryhmäkeskustelu"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Priorisoi puhujat"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioriteettipuhuja"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Lue viesti ääneen"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Lue viestihistoriaa"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Lue viestihistoriaa"
|
||||
msgid "Read messages"
|
||||
msgstr "Lue viestejä"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Lue viestit, jotka lähetettiin ennen kanavan avaamista. Ilman tätä he näkevät vain viestit, jotka saapuvat, kun kanava on auki."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Lue tämän kanavan viestit ennen kuin he avasivat sen. Ilman tätä he näkevät vain viestit, jotka saapuvat, kun kanava on auki."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Poista kuvake"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Poista se kanavalta kaikilta."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Poista jäseniä yhteisöstä. He voivat liittyä uudelleen uudella kutsulla."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Estetty pääsy poistettu käyttäjältä {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Poistettu tallennetuista viesteistä"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Nimeä uudelleen :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Nimeä uudelleen ja muokkaa tämän kanavan asetuksia."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "Turva-avaimen PIN-koodi"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "Suoja-avaimen PIN-lomake"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Näytä kanavat oletuksena. Kanavat, jotka kieltävät sen, pysyvät piilossa."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Katso, miltä kutsusi näyttää vierailijoille."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Näytä tämän yhteisön kanavien jäsenluettelo."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Näytä tämän kanavan jäsenluettelo."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Näytä tämä kanava. Sen kieltäminen käyttäjältä {everyoneMention} tekee kanavasta yksityisen."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Lähetä viesti"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Lähetä viestejä"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Lähetä viestejä"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Viestien lähetys estetty"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Lähetä viestejä kanavilla."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Lähetä viestejä tällä kanavalla."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Lähetä linkki salasanan vaihtamiseen"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Lähetä tallennettu media {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Lähetä tekstistä puheeksi -viestejä."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Lähetä puhesynteesiviestejä /tts-komennolla. Tekstiä puheeksi -toiminnon käyttöönottaneet jäsenet kuulevat ne luettuina ääneen."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Lähetä numeroon"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Lähetä tekstistä puheeksi -viestejä"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Aseta vahvistustasoksi <0>ei mitään</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Määritä puhepalvelun alue"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Näytä poistopainike"
|
||||
msgid "Show download button"
|
||||
msgstr "Näytä latauspainike"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Näytä linkeistä lähetetyt esikatselut tässä kanavassa."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Näytä linkeistä lähetetyt upotetut esikatselut."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Jokin meni pieleen."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Jokin meni pieleen. Yritä uudelleen hetken kuluttua."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Tila- ja aikakerrokset"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Puhu"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Striimin asetukset"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Striimaa videota"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Voimaan välittömästi. {PAYMENT_PROVIDER_NAME} saattaa veloittaa suhte
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Puhu puheluissa ja testaa syötettäsi."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Puhu tässä äänikanavalla. Ilman tätä jäsenet pysyvät mykistettyinä, kunnes joku, jolla on \"Mykistä jäsenet\" -oikeus, poistaa heidän mykistyksensä."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Puhu äänikanavilla. Ilman tätä jäsenet pysyvät mykistettyinä, kunnes joku, jolla on \"Mykistä jäsenet\" -oikeus, poistaa heidän mykistyksensä."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Ajan muodon valinta"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Aseta jäsenille aikakatkaisu"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Sammuta lähetys"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Poista suoratoiston yksityisyys käytöstä ennen kuin tarkastelet kirjautumis- tai tilin suojaustietoja."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Kytke kamera päälle tai jaa näyttö tässä äänikanavassa."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Ota kamera käyttöön tai jaa näyttösi äänikanavilla."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Ryhmä irrotettu kiinnityksestä"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Ryhmäkeskustelu irrotettu"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Lataa emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Lähetä tiedosto"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Lähetä tiedostoja ja mediaa viesteihin."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Lähetä tiedostoja ja mediaa tähän kanavaan."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Käytä toista sähköpostia"
|
||||
msgid "Use email"
|
||||
msgstr "Käytä sähköpostia"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Käytä hymiöitä muista yhteisöistä tässä kanavassa."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Käytä emojeita muista yhteisöistä."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Käytä ulkoisia emojeita"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Käytä ulkoisia tarroja"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Käytä tallennettuja medioita"
|
||||
msgid "Use selection"
|
||||
msgstr "Käytä valintaa"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Käytä tarroja muista yhteisöistä tässä kanavassa."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Käytä tarroja muista yhteisöistä tuotteella {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Käytä tarroja muista yhteisöistä."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Käytä video- ja esikatselukuvia."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Käytä puheentunnistusta"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Näytä käyttäjän {userName} profiili"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Näytä toimintaloki"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Näytä puhelun hallinta"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Näytä kanava"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Näytä kanavan jäsenet"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Virheellinen"
|
||||
msgid "Withdraw"
|
||||
msgstr "Nosta"
|
||||
|
||||
#. 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."
|
||||
msgstr "Ilman tätä lupaa kanavalla vaaditaan puheesta painettava -toiminto."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Olet aikakatkaistu. Viestit, reaktiot ja puhe ovat keskeytettyinä, kunnes aikakatkaisu päättyy."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Näytät vanhempia viestejä"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Olet saavuttanut yhteisöjen enimmäismäärän"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Ajouter un élément"
|
||||
msgid "Add local files"
|
||||
msgstr "Ajouter des fichiers locaux"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Ajouter de nouvelles réactions aux messages de ce canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Ajouter une réaction"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Ajouter des réactions"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Rôles ajoutés."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Ajouté aux messages enregistrés"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Ajustez le niveau de zoom global de l'application. Utilisez {zoomIn} / {zoomOut} pour ajuster rapidement."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrateur"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Déjà programmé pour annulation"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Signaler également ce message à l'équipe de sécurité de {productName}"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Au moins un salon doit avoir l'autorisation \" {viewChannelPermissionLabel} \" activée pour {EVERYONE_MENTION} afin que l'URL personnalisée fonctionne. Actuellement, aucun salon n'est visible par {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Joindre des fichiers"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Audio"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Audio et vidéo"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Bannir le membre"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Bannir des membres"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Bannir des membres de la communauté, avec la possibilité de supprimer leurs messages récents."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Paramètres de base et URI de redirection autorisés."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Champs de texte de base"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Soyez entendu avant les autres membres de ce canal en maintenant la touche de raccourci \"Parler en appuyant\" (prioritaire)."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Soyez entendu avant les autres membres lorsque vous maintenez la touche d'activation de la voix (prioritaire)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Mettre en signet le message"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Ajouté aux favoris."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Contourner la suppression des mentions"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Ignorer le mode lent"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Modifier les surnoms des autres membres."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Modifier son propre pseudo"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Formulaire de modification du nom d'utilisateur"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Modifier ce que les utilisateurs sans \" {readMessageHistoryPermissionLabel} \" peuvent voir"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Modifier la région vocale d'un canal vocal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Modifier la région vocale de ce salon."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Chaîne {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Accès aux salons"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Sections des détails de la chaîne"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "ID du salon copié"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "Lien de chaîne"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Lien de la chaîne copié"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Indicateurs de saisie dans la liste des salons"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Gestion des salons"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Voix de la communauté"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Toute la communauté"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Connectez un microphone et réessayez."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Se connecter à la voix"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Copier l'identifiant du salon"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Copier le lien de la chaîne"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Impossible de télécharger la mise à jour de bureau"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Impossible de dupliquer ce salon"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Impossible d'ouvrir le portail de facturation"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Impossible d’épingler cette conversation"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Impossible de débloquer l’utilisateur"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Impossible de désépingler cette conversation"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Créer un MP"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Créer des émojis et des autocollants"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Créer une invitation"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Créer des liens d'invitation"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Créer, modifier ou supprimer des rôles inférieurs à votre rôle le plus élevé. Permet également de modifier les remplacements d'autorisations de salon."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Créer, modifier ou supprimer des webhooks pour ce salon."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Désactiver le son de l'appareil"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Mettre en sourdine des membres"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Mettre les autres membres au silence dans ce canal vocal, pour qu'ils ne puissent ni entendre ni parler."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Mettre les autres membres en sourdine dans les canaux vocaux, pour qu'ils ne puissent ni entendre ni parler."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Désactivé par défaut sur mobile pour préserver la batterie et l'util
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Supprimer \" {stickerName} \" ? Cette action est irréversible."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Supprimer {channelLabel} ? Cette action est irréversible."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Supprimer les messages"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Supprimer mes messages"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Supprimer les messages des autres membres dans ce canal. L'épinglage est géré séparément."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Supprimer ce message"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Supprimer ce message ? Cette action est irréversible."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Zone de glisser-déposer pour l'envoi de fichiers"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Faites glisser et déposez les fichiers d'emoji ici"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Faites glisser les membres entre les salons auxquels ils ont accès."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Faites glisser les membres entre les salons vocaux auxquels ils peuvent accéder et déconnectez-les du vocal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Faites glisser les membres hors de ce salon vocal vers des salons auxquels ils peuvent accéder, et déconnectez-les de la voix."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Dupliquer"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Dupliquer le salon"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Modifier la catégorie"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Modifier la chaîne"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Modifier ou supprimer les émojis et autocollants créés par d'autres membres."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Modifier les remplacements pour les rôles et les membres dans ce salon."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Formulaire de débogage d'intégration"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Intégrer des liens"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Ignorer le signalement de spam"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Ignorer la demande d'ami de {displayName} ?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Ignorer le délai de lenteur de ce canal."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Ignorer le virtuel"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Fenêtre d'invitation"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Aperçu de la fenêtre d'invitation"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Invitez de nouvelles personnes dans la communauté avec un lien vers ce salon."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Inviter de nouvelles personnes dans la communauté avec un lien d'invitation."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Rejoindre sur cet appareil"
|
||||
msgid "Join the call"
|
||||
msgstr "Rejoindre l'appel"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Rejoignez ce salon vocal pour entendre les autres. Le refuser, ainsi que Voir le salon, pour {everyoneMention} rend le salon privé."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Rejoindre l'appel vocal"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Rejoindre le salon vocal"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Rejoignez des canaux vocaux et écoutez les autres."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Aller au premier message non lu"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Aller au message"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Aller à la page"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Aller aux messages récents"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Exclure le membre"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Exclure des membres"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Gérer les utilisateurs bloqués"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Gérer le salon"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Gérer les salons"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Gérer la communauté"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Gérer les fonctionnalités de la communauté"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Gérer les émojis et les autocollants"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Gérez les liens d’invitation pour ce salon."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Gérer les messages"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Gérer les surnoms"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Gérer les modes de paiement"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Gérer les autorisations"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Gérer les codes cadeaux et les URL de cartes cadeaux achetés"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Gérer les rôles"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Gérer l'abonnement"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Gérer les webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Contrôles des mentions"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mentionner tout le monde ou n'importe quel rôle (même si le rôle n'est pas configuré pour être mentionnable)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mentionner tout le monde ou n'importe quel rôle dans ce canal (même si le rôle n'est pas défini comme mentionnable)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Lien du message"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Liste des messages"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Liste des messages pour {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Messages"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Messages et médias"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Messages supprimés"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Échec du chargement des messages"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Modération"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Modération"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Déplacer l’élément vers le haut"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Déplacer des membres"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Désactiver les notifications des favoris"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Rendre des membres muets"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Couper le micro"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Désactiver les notifications"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Mutez les autres membres de ce canal vocal pour tout le monde."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Mutez les autres membres dans les canaux vocaux pour tout le monde."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Aucun utilisateur bloqué"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Ouvrir les détails du salon {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Ouvrir le chat"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Épingler le message"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Épingler des messages"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Épingler des messages"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Épinglez des messages ici pour que tout le monde puisse les voir."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Épingler ou désépingler n'importe quel message dans ce salon."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Épingler ou désépingler n'importe quel message."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Groupe épinglé"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Discussion de groupe épinglée"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Prioriser les intervenants"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Orateur prioritaire"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Lire le message à voix haute"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Voir l'historique des messages"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Voir l'historique des messages"
|
||||
msgid "Read messages"
|
||||
msgstr "Lire les messages"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Lire les messages envoyés avant qu'ils n'ouvrent un canal. Sans cette permission, ils ne voient que les messages qui arrivent pendant que le canal est ouvert."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Lire les messages envoyés dans ce salon avant qu'ils ne l'ouvrent. Sans cette permission, ils ne voient que les messages qui arrivent pendant qu'il est ouvert."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Supprimer l'icône"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Le supprimer de la chaîne pour tout le monde."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Supprimer des membres de la communauté. Ils pourront la rejoindre à nouveau avec une nouvelle invitation."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Refus de {0} supprimé."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Retiré des favoris"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Renommer :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Renommer et modifier les paramètres de ce salon."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "Code PIN de la clé de sécurité"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "Code PIN de la clé de sécurité"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Voir les salons par défaut. Les salons qui le refusent restent masqués."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Voir à quoi ressemble votre invitation pour les visiteurs."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Voir la liste des membres des salons de cette communauté."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Voir la liste des membres de ce salon."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Voir ce canal. Le refuser pour {everyoneMention} rend le canal privé."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Envoyer un message"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Envoyer des messages"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Envoyer des messages"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Envoi de messages désactivé"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Envoyer des messages dans les salons."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Envoyer des messages dans ce canal."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Envoyer le lien de réinitialisation"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Envoyer le média enregistré {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Envoyer des messages de synthèse vocale."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Envoyer des messages texte-vers-voix avec /tts. Les membres qui ont activé la synthèse vocale les entendent lus à voix haute."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Envoyer à"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Envoyer des messages de synthèse vocale"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Niveau de vérification défini sur <0>aucun</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Définir la région vocale"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Afficher le bouton de suppression"
|
||||
msgid "Show download button"
|
||||
msgstr "Afficher le bouton de téléchargement"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Afficher les aperçus intégrés des liens qu'ils envoient dans ce canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Afficher les aperçus intégrés des liens qu'ils envoient."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Une erreur est survenue."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Une erreur est survenue. Veuillez réessayer dans un instant."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Couches spatiales et temporelles"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Parler"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Paramètres de diffusion"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Diffuser la vidéo"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Prend effet immédiatement. Des frais au prorata peuvent s’appliquer v
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Parlez dans les appels et testez votre entrée."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Parler dans ce canal vocal. Sans cette permission, les membres restent muets jusqu'à ce que quelqu'un ayant la permission \"Mute members\" les réactive."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Parler dans les canaux vocaux. Sans cette permission, les membres restent muets jusqu'à ce que quelqu'un ayant la permission \"Mute members\" les rende audibles."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Sélection du format de l'heure"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Mettre des membres en pause"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Désactiver le flux"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Désactivez la confidentialité du streaming avant d’afficher les détails de connexion ou de sécurité du compte."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Activer une caméra ou partager un écran dans ce canal vocal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Activer une caméra ou partager un écran dans les canaux vocaux."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Groupe désépinglé"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "MP de groupe désépinglé"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Importer un emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Importer un fichier"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Télécharger des fichiers et des médias dans les messages."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Télécharger des fichiers et des médias dans ce canal."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Utiliser une autre adresse e-mail"
|
||||
msgid "Use email"
|
||||
msgstr "Utiliser l'e-mail"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Utiliser des émojis d'autres communautés dans ce salon."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Utiliser les emojis d'autres communautés."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Utiliser des émojis externes"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Utiliser des autocollants externes"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Utiliser les médias enregistrés"
|
||||
msgid "Use selection"
|
||||
msgstr "Utiliser la sélection"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Utiliser des autocollants d'autres communautés dans ce salon."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Utilisez des autocollants d'autres communautés avec {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Utiliser des autocollants d'autres communautés."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Utiliser des aperçus vidéo et caméra."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Utiliser l'activité vocale"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Voir le profil de {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Voir le journal d'activité"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Afficher les commandes d'appel"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Voir le salon"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Voir les membres du salon"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Avec erreur"
|
||||
msgid "Withdraw"
|
||||
msgstr "Retirer"
|
||||
|
||||
#. 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."
|
||||
msgstr "Sans cette permission, le mode « Appuyer pour parler » est requis dans ce canal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Vous êtes en pause. La messagerie, les réactions et la voix sont suspendues jusqu'à la fin de la pause."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Vous consultez des messages plus anciens"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Vous avez atteint la limite de communautés"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "הוספת פריט"
|
||||
msgid "Add local files"
|
||||
msgstr "הוספת קבצים מקומיים"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "הוסף תגובות חדשות להודעות בערוץ זה."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "הוספת ריאקציה"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "הוספת ריאקציות"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "נוספו תפקידים."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "נוסף לסימניות"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "התאם את רמת התצוגה הכוללת של האפליקציה. השתמש ב-{zoomIn} / {zoomOut} כדי להתאים במהירות."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "מנהל מערכת"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "כבר מוגדר לביטול"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "דווח/י על ההודעה הזו גם לצוות הבטיחות של {productName}"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "לפחות ערוץ אחד חייב להיות עם ההרשאה \"{viewChannelPermissionLabel}\" מופעלת עבור {EVERYONE_MENTION} כדי שכתובת ה-URL המותאמת אישית תעבוד. כרגע, אין ערוצים שגלויים ל- {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "צירוף קבצים"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "שמע"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "שמע ווידאו"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "השעיית משתמש"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "הרחקת חברים"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "חסום חברים מהקהילה, עם אפשרות למחוק את ההודעות האחרונות שלהם."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "הגדרות בסיסיות וכתובות URL מותרות להפניה
|
||||
msgid "Basic text inputs"
|
||||
msgstr "שדות קלט בסיסיים"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "להישמע מעל חברים אחרים בערוץ זה בזמן שאתה מחזיק במקש \"לחיצה לדיבור (עדיפות)\"."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "להישמע מעל חברים אחרים בזמן החזקת מקש ה-Push to talk (priority)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "סימון הודעה"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "נוסף לסימניות."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "עקוף השתקת אזכורים"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "עקיפת מצב איטי"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "שינוי כינויים של חברים אחרים."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "שינוי כינוי משלך"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "טופס שינוי שם משתמש"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "שנה את מה שמשתמשים ללא \"{readMessageHistoryPermissionLabel}\" יכולים לראות"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "שנה את אזור הקול שערוץ קולי משתמש בו."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "שנה את אזור הקול שערוץ זה משתמש בו."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "ערוץ {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "גישה לערוץ"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "קטעי פרטי ערוץ"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "מזהה הערוץ הועתק"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "קישור לערוץ"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "הקישור לערוץ הועתק"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "מחווני הקלדה ברשימת הערוצים"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "ניהול ערוצים"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "קול קהילתי"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "כלל הקהילה"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "חבר מיקרופון ונסה שוב."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "התחבר לשיחה קולית"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "העתקת מזהה ערוץ"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "העתקת קישור לערוץ"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "לא ניתן היה להוריד את עדכון שולחן העבודה"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "לא ניתן לשכפל את הערוץ הזה"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "לא ניתן לפתוח את פורטל החיוב"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "לא ניתן להצמיד את השיחה הזו"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "לא ניתן לבטל את חסימת המשתמש"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "לא ניתן לבטל את הצמדת השיחה הזו"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "יצירת הודעה פרטית"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "יצירת אימוג'י ומדבקות"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "יצירת הזמנה"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "יצירת קישורי הזמנה"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "יצירה, עריכה או מחיקה של תפקידים מתחת לתפקיד הגבוה ביותר שלך. מאפשר גם עריכת עקיפות הרשאות ערוץ."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "יצירה, עריכה או מחיקה של Webhooks עבור הערוץ הזה."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "השתק מכשיר"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "להשתיק משתתפים"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "השתק חברים אחרים בערוץ הקולי הזה, כך שהם לא יוכלו לשמוע או לדבר."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "השתק חברים אחרים בערוצי קול, כך שהם לא יוכלו לשמוע או לדבר."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "ברירת המחדל היא כבוי בנייד כדי לשמור על
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "למחוק את \"{stickerName}\"? לא ניתן לבטל פעולה ז
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "למחוק את {channelLabel}? לא ניתן לבטל פעולה זו."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "מחיקת הודעות"
|
||||
msgid "Delete my messages"
|
||||
msgstr "מחיקת ההודעות שלי"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "מחק הודעות של חברים אחרים בערוץ זה. סימון הודעות (pinning) נשלט בנפרד."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "מחיקת ההודעה הזו"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "למחוק את ההודעה הזו? לא ניתן לבטל פעולה זו."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "גרור ושחרר קבצים להעלאה"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "גרור ושחרר קובצי אימוג'י לכאן"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "גרור משתמשים בין הערוצים שאליהם יש להם גישה."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "גרור חברים בין ערוצי קול שהם יכולים לגשת אליהם, ונתק אותם מהקול."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "גרור חברים מערוץ קולי זה לערוצים שהם יכולים לגשת אליהם, ונתק אותם מהקול."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "שכפול"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "שכפול ערוץ"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "עריכת קטגוריה"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "עריכת ערוץ"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "עריכה או מחיקה של אימוג'י ומדבקות שנוצרו על ידי חברים אחרים."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "ערוך עקיפות עבור תפקידים וחברים בערוץ זה."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "טופס איתור באגים של הטמעה"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "הטמעת קישורים"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "התעלם מסימון ספאם"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "להתעלם מבקשת החברות מ- {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "עקוף את מגבלת ההשהיה של הערוץ הזה."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "התעלם משינוי קולי"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "חלון קופץ להזמנה"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "תצוגה מקדימה של חלון ההזמנה"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "הזמן אנשים חדשים לקהילה באמצעות קישור לערוץ זה."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "הזמן אנשים חדשים לקהילה באמצעות קישור הזמנה."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "הצטרף במכשיר זה"
|
||||
msgid "Join the call"
|
||||
msgstr "הצטרף/ה לשיחה"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "הצטרף לערוץ הקולי הזה והאזן לאחרים. שלילת הרשאה זו יחד עם \"הצג ערוץ\" עבור {everyoneMention} הופכת את הערוץ לפרטי."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "הצטרף לשיחה קולית"
|
||||
msgid "Join voice channel"
|
||||
msgstr "הצטרף/הצטרפי לערוץ הקולי"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "הצטרף לערוצי קול ושמע אחרים."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "קפיצה להודעה הראשונה שלא נקראה"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "קפיצה להודעה"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "קפיצה לעמוד"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "קפוץ להודעה האחרונה"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "להוציא משתמש"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "להרחיק חברים"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "ניהול משתמשים חסומים"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "ניהול ערוץ"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "ניהול ערוצים"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "ניהול קהילה"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "ניהול תכונות קהילה"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "ניהול אימוג'י ומדבקות"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "נהל קישורי הזמנה עבור ערוץ זה."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "ניהול הודעות"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "ניהול כינויים"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "ניהול אמצעי תשלום"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "ניהול הרשאות"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "ניהול קודי מתנה וקישורי מתנה שנרכשו"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "ניהול תפקידים"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "ניהול מינוי"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "ניהול Webhooks"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "בקרות אזכורים"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "תייגו את כולם או כל תפקיד (גם אם התפקיד לא מוגדר כניתן לתיוג)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "אזכור כולם או כל תפקיד בערוץ זה (גם אם לתפקיד לא הוגדר שהוא ניתן לאזכור)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "קישור להודעה"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "רשימת הודעות"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "רשימת הודעות עבור {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "הודעות"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "הודעות ומדיה"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "הודעות נמחקו"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "הודעות לא נטענו"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "מוד"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "ניהול תוכן"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "העבר פריט למעלה"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "העברת חברים"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "השתקת מועדפים"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "השתקת משתתפים"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "השתקת מיקרופון"
|
||||
msgid "Mute notifications"
|
||||
msgstr "השתקת התראות"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "השתק חברים אחרים בערוץ הקולי הזה עבור כולם."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "השתק חברים אחרים בערוצי קול עבור כולם."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "אין משתמשים חסומים"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "פתח פרטי ערוץ עבור {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "פתח צ'אט"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "הצמד הודעה"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "הצמדת הודעות"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "הצמדת הודעות"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "נעצו כאן הודעות שכולם יוכלו לראות."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "נעץ או בטל נעץ של כל הודעה בערוץ זה."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "נעץ או בטל נעץ של כל הודעה."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "קבוצה מוצמדת"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "קבוצת צ'אט מוצמדת"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "תעדוף דוברים"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "דובר בעדיפות"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "הקראת ההודעה בקול"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "קריאת היסטוריית הודעות"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "קריאת היסטוריית הודעות"
|
||||
msgid "Read messages"
|
||||
msgstr "קריאת הודעות"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "קרא הודעות שנשלחו לפני שפתחו ערוץ. בלעדיה, הם יראו רק הודעות שמגיעות בזמן שהערוץ פתוח."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "קרא הודעות שנשלחו בערוץ זה לפני שפתחו אותו. בלעדיו, הם יראו רק הודעות שמגיעות בזמן שהוא פתוח."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "הסר אייקון"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "הסר אותה מהערוץ עבור כולם."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "הסר חברים מהקהילה. הם יכולים להצטרף מחדש עם הזמנה חדשה."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "הוסרה מניעה עבור {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "הוסר מהסימניות"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "שנה שם של :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "שנה את שם הערוץ הזה וערוך את ההגדרות שלו."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "קוד PIN לאבטחה"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "טופס קוד ה-PIN של מפתח האבטחה"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "לראות ערוצים כברירת מחדל. ערוצים שמבטלים זאת נשארים מוסתרים."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "כך נראית ההזמנה שלך למבקרים."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "הצגת רשימת החברים בערוצים בקהילה זו."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "הצגת רשימת החברים בערוץ זה."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "ראה ערוץ זה. שלילת הרשאה זו עבור {everyoneMention} הופכת את הערוץ לפרטי."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "שלח הודעה"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "שליחת הודעות"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "שליחת הודעות"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "שליחת הודעות מושבתת"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "שלח הודעות בערוצים."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "שלח הודעות בערוץ זה."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "שלח קישור איפוס"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "שליחת מדיה שמורה {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "שליחת הודעות טקסט לדיבור."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "שלח הודעות טקסט לדיבור באמצעות /tts. חברים שהפעילו טקסט לדיבור ישמעו אותן מוקראות בקול."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "שלח אל"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "שליחת הודעות טקסט לדיבור"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "רמת האימות הוגדרה ל-<0>ללא</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "הגדר אזור קולי"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "הצגת כפתור המחיקה"
|
||||
msgid "Show download button"
|
||||
msgstr "הצג כפתור הורדה"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "הצג תצוגות מקדימות משובצות עבור קישורים שהם שולחים בערוץ זה."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "הצג תצוגות מקדימות משובצות עבור קישורים שהם שולחים."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "משהו השתבש."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "משהו השתבש. יש לנסות שוב בעוד רגע."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "שכבות מרחביות וזמניות"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "דיבור"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "הגדרות סטרימינג"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "הזרמת וידאו"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "ייכנס לתוקף באופן מיידי. ייתכן שיחול חי
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "דבר בשיחות ובדוק את הקלט שלך."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "דבר בערוץ הקולי הזה. בלעדיו, חברים יישארו מושתקים עד שמישהו עם הרשאת \"השתקת חברים\" יבטל את השתקתם."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "דבר בערוצי קול. בלעדיו, חברים יישארו מושתקים עד שמישהו עם הרשאת \"השתקת חברים\" יסיר את השתקתם."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "בחירת פורמט שעה"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "השתקת חברים זמנית"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "כיבוי שידור"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "כבה את פרטיות הסטרימינג לפני הצגת פרטי התחברות או אבטחת חשבון."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "הפעל מצלמה או שתף מסך בערוץ הקולי הזה."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "הפעל מצלמה או שתף מסך בערוצי קול."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "קבוצה לא מוצמדת"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "קבוצת צ׳אט לא מוצמדת"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "העלאת אימוג'י"
|
||||
msgid "Upload file"
|
||||
msgstr "העלאת קובץ"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "העלאת קבצים ומדיה בהודעות."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "העלה קבצים ומדיה בערוץ זה."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "השתמש/י באימייל אחר"
|
||||
msgid "Use email"
|
||||
msgstr "שימוש באימייל"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "השתמש באימוג'י מקהילות אחרות בערוץ זה."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "השתמשו באימוג'י מקהילות אחרות."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "שימוש באימוג'י חיצוניים"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "שימוש במדבקות חיצוניות"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "השתמש במדיה שמורה"
|
||||
msgid "Use selection"
|
||||
msgstr "שימוש בבחירה"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "השתמש במדבקות מקהילות אחרות בערוץ זה."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "השתמש/י במדבקות מקהילות אחרות עם {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "השתמש במדבקות מקהילות אחרות."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "השתמש בתצוגות מקדימות של וידאו ומצלמה."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "השתמש בפעילות קולית"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "הצג את הפרופיל של {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "הצגת יומן פעילות"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "הצגת פקדי שיחה"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "הצגת ערוץ"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "הצגת חברי ערוץ"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "עם שגיאה"
|
||||
msgid "Withdraw"
|
||||
msgstr "משיכה"
|
||||
|
||||
#. 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."
|
||||
msgstr "בלי הרשאה זו, נדרש לחיצה והחזקה כדי לדבר בערוץ זה."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "הושתקת. שליחת הודעות, ריאקציות וקול מושהים עד שתוקף ההשתקה יפוג."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "אתם מציגים הודעות ישנות יותר"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "הגעת למספר הקהילות המקסימלי"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "आइटम जोड़ें"
|
||||
msgid "Add local files"
|
||||
msgstr "स्थानीय फ़ाइलें जोड़ें"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "इस चैनल में संदेशों पर नई प्रतिक्रियाएँ जोड़ें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "प्रतिक्रिया जोड़ें"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "प्रतिक्रियाएं जोड़ें"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "भूमिकाएँ जोड़ीं."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "बुकमार्क में जोड़ा गया"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "ऐप के ज़ूम लेवल को एडजस्ट करें. जल्दी एडजस्ट करने के लिए {zoomIn} / {zoomOut} का इस्तेमाल करें."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "एडमिनिस्ट्रेटर"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "पहले से रद्द करने के लिए सेट है"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "इस मैसेज को {productName} सुरक्षा टीम को भी रिपोर्ट करें"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "वैनिटी यूआरएल काम करे, इसके लिए कम से कम एक चैनल में {EVERYONE_MENTION} के लिए \"{viewChannelPermissionLabel}\" की अनुमति चालू होनी चाहिए. फ़िलहाल, {EVERYONE_MENTION} के लिए कोई भी चैनल देखने लायक नहीं है."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "फ़ाइलें अटैच करें"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "ऑडियो"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "ऑडियो और वीडियो"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "सदस्य को बैन करें"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "सदस्यों को बैन करें"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "समुदाय से सदस्यों को बैन करें, उनके हालिया संदेशों को हटाने के विकल्प के साथ।"
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "बुनियादी सेटिंग्स और अनुमत
|
||||
msgid "Basic text inputs"
|
||||
msgstr "सामान्य टेक्स्ट इनपुट"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "इस चैनल में पुश टू टॉक (प्रायोरिटी) कीबाइंड दबाए रखते हुए अन्य सदस्यों की तुलना में अपनी बात रखें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "पुश-टू-टॉक (प्रायोरिटी) कीबाइंड दबाए रखते हुए अन्य सदस्यों की तुलना में अपनी बात ज़्यादा स्पष्ट रूप से कहें।"
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "मैसेज को बुकमार्क करें"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "बुकमार्क किया गया।"
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "मेंशन सप्रेशन को बायपास करें"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "स्लोमोड को बायपास करें"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "अन्य सदस्यों के उपनाम बदलें।"
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "अपना उपनाम बदलें"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "यूज़रनेम बदलने का फ़ॉर्म"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "बदलें कि \"{readMessageHistoryPermissionLabel}\" के बिना यूज़र क्या देख सकते हैं"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "वॉयस चैनल के लिए वॉयस क्षेत्र बदलें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "इस चैनल के लिए वॉयस क्षेत्र बदलें।"
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "चैनल {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "चैनल एक्सेस"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "चैनल विवरण सेक्शन"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "चैनल आईडी कॉपी किया गया"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "चैनल लिंक"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "चैनल लिंक कॉपी किया गया"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "चैनल सूची में टाइपिंग इंडिकेटर"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "चैनल प्रबंधन"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "कम्युनिटी वॉइस"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "पूरी कम्युनिटी"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "माइक्रोफ़ोन कनेक्ट करें और
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "वॉइस से कनेक्ट करें"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "चैनल ID कॉपी करें"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "चैनल लिंक कॉपी करें"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "डेस्कटॉप अपडेट डाउनलोड नहीं किया जा सका"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "इस चैनल की नकल नहीं की जा सकी"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "बिलिंग पोर्टल नहीं खुल सका"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "इस बातचीत को पिन नहीं किया जा सका"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "उपयोगकर्ता को अनब्लॉक नहीं कर पाए"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "इस बातचीत को अनपिन नहीं किया जा सका"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "DM बनाएँ"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "इमोजी और स्टिकर बनाएँ"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "आमंत्रण बनाएं"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "आमंत्रण लिंक बनाएँ"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "अपनी सबसे ऊंची भूमिका के नीचे भूमिकाएं बनाएं, संपादित करें या हटाएं। चैनल अनुमति ओवरराइट संपादित करने की भी अनुमति देता है।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "इस चैनल के लिए वेबहुक बनाएं, एडिट करें या मिटाएं."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "डिवाइस को डीफ़ेन करें"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "सदस्यों को डीफ़ेन करें"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "इस वॉयस चैनल में अन्य सदस्यों को बहरा कर दें, ताकि वे सुन या बोल न सकें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "वॉयस चैनलों में अन्य सदस्यों को बहरा करें, ताकि वे सुन या बोल न सकें।"
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "बैटरी लाइफ़ और डेटा बचाने क
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "\"{stickerName}\" को हटाएँ? इसे पूर्वव
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "चैनल {channelLabel} को मिटाएँ? इसे पूर्ववत नहीं किया जा सकता है।"
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "मैसेज मिटाएं"
|
||||
msgid "Delete my messages"
|
||||
msgstr "मेरे मैसेज मिटाएँ"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "इस चैनल में अन्य सदस्यों के संदेश हटाएं। पिन करना अलग से नियंत्रित होता है।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "यह मैसेज मिटाएँ"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "यह मैसेज डिलीट करें? इसे अनडू नहीं किया जा सकता."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "फ़ाइल अपलोड करने के लिए यहा
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "इमोजी फ़ाइलों को यहां खींचें और छोड़ें"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "सदस्यों को उन चैनलों के बीच खींचें जिन तक वे पहुँच सकते हैं।"
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "उन सदस्यों को ड्रैग करें जिन्हें वे एक्सेस कर सकते हैं, और उन्हें वॉयस से डिस्कनेक्ट करें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "इस वॉइस चैनल से सदस्यों को उन चैनलों में खींचें जहाँ वे पहुँच सकते हैं, और उन्हें वॉइस से डिस्कनेक्ट करें।"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "डुप्लिकेट करें"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "चैनल डुप्लीकेट करें"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "श्रेणी संपादित करें"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "चैनल एडिट करें"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "दूसरे सदस्यों द्वारा बनाए गए इमोजी और स्टिकर को एडिट या डिलीट करें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "इस चैनल में भूमिकाओं और सदस्यों के लिए ओवरराइट संपादित करें।"
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "एम्बेड डीबगर फ़ॉर्म"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "लिंक एम्बेड करें"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "स्पैम फ़्लैग को अनदेखा करे
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "क्या आप {displayName} की फ्रेंड रिक्वेस्ट को अनदेखा करना चाहते हैं?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "इस चैनल के स्लोमोड कूलडाउन को अनदेखा करें।"
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "वर्चुअल को अनदेखा करें"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "आमंत्रण मॉडेल"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "आमंत्रण मॉडल का पूर्वावलोकन"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "इस चैनल का लिंक देकर नए लोगों को समुदाय में आमंत्रित करें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "आमंत्रण लिंक से समुदाय में नए लोगों को आमंत्रित करें।"
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "इसी डिवाइस पर शामिल हों"
|
||||
msgid "Join the call"
|
||||
msgstr "कॉल में शामिल हों"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "इस वॉयस चैनल से जुड़ें और दूसरों को सुनें। {everyoneMention} के लिए इसे 'चैनल देखें' के साथ मना करने पर चैनल निजी हो जाता है।"
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "वॉइस कॉल में शामिल हों"
|
||||
msgid "Join voice channel"
|
||||
msgstr "वॉइस चैनल में शामिल हों"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "वॉयस चैनल से जुड़ें और दूसरों को सुनें।"
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "पहले न पढ़े गए मैसेज पर जाएं"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "मैसेज पर जाएं"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "पेज पर जाएं"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "अभी पर जाएं"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "सदस्य को हटाएँ"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "सदस्यों को हटाएँ"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "ब्लॉक किए गए यूज़र को मैनेज करें"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "चैनल प्रबंधित करें"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "चैनल प्रबंधित करें"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "कम्युनिटी मैनेज करें"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "कम्युनिटी सुविधाओं को मैनेज करें"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "इमोजी और स्टिकर मैनेज करें"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "इस चैनल के लिए आमंत्रण लिंक प्रबंधित करें।"
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "मैसेज प्रबंधित करें"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "उपनाम प्रबंधित करें"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "भुगतान के तरीके प्रबंधित करें"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "अनुमतियां प्रबंधित करें"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "खरीदे गए गिफ़्ट कोड और गिफ़्ट यूआरएल मैनेज करें"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "भूमिकाएं प्रबंधित करें"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "सदस्यता प्रबंधित करें"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "वेबहुक प्रबंधित करें"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "मेंशन कंट्रोल"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "सभी को या किसी भी भूमिका को मेंशन करें (भले ही भूमिका मेंशन करने योग्य न हो)।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "इस चैनल में सभी को या किसी भी भूमिका को मेंशन करें (भले ही भूमिका को मेंशन करने योग्य सेट न किया गया हो)।"
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "मैसेज लिंक"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "मैसेज सूची"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "{channelName} के लिए मैसेज सूची"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "मैसेज"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "मैसेज और मीडिया"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "मैसेज हटाए गए"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "मैसेज लोड नहीं हो पाए"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "मॉड"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "मॉडरेशन"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "आइटम को ऊपर ले जाएँ"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "सदस्यों को मूव करें"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "पसंदीदा को म्यूट करें"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "सदस्यों को म्यूट करें"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "माइक म्यूट करें"
|
||||
msgid "Mute notifications"
|
||||
msgstr "सूचनाएं म्यूट करें"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "इस वॉयस चैनल में अन्य सदस्यों को सभी के लिए म्यूट करें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "सभी के लिए वॉयस चैनलों में अन्य सदस्यों को म्यूट करें।"
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "कोई ब्लॉक किए गए यूज़र नहीं"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "{channelName} के चैनल विवरण खोलें"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "चैट खोलें"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "मैसेज पिन करें"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "मैसेज पिन करें"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "मैसेज पिन करें"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "सभी के देखने के लिए मैसेज यहां पिन करें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "इस चैनल में किसी भी संदेश को पिन या अनपिन करें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "किसी भी संदेश को पिन या अनपिन करें।"
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "पिन किया गया ग्रुप"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "पिन किया गया ग्रुप DM"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "बोलने वालों को प्राथमिकता दें"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "प्राथमिकता वाला स्पीकर"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "मैसेज ज़ोर से पढ़ें"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "मैसेज हिस्ट्री पढ़ें"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "मैसेज हिस्ट्री पढ़ें"
|
||||
msgid "Read messages"
|
||||
msgstr "मैसेज पढ़ें"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "चैनल खोलने से पहले भेजे गए संदेश पढ़ें। इसके बिना, वे केवल वही संदेश देखेंगे जो चैनल खुलने के दौरान आते हैं।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "इसे खोलने से पहले इस चैनल में भेजे गए संदेश पढ़ें। इसके बिना, वे केवल वही संदेश देखेंगे जो चैनल खुला होने पर आते हैं।"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "आइकॉन हटाएँ"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "इसे चैनल से सभी के लिए हटा दें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "समुदाय से सदस्यों को हटाएँ। वे नए आमंत्रण से फिर से शामिल हो सकते हैं।"
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "{0} के लिए अस्वीकृति हटाई गई।"
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "बुकमार्क से हटाया गया"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr ":{emojiName}: का नाम बदलें:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "इस चैनल की सेटिंग को नाम बदलें और संपादित करें।"
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "सुरक्षा कुंजी पिन"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "सुरक्षा कुंजी पिन फॉर्म"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "डिफ़ॉल्ट रूप से चैनल देखें। जो चैनल इसे अस्वीकार करते हैं वे छिपे रहते हैं।"
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "देखें कि आपका न्योता मेहमानों को कैसा दिखता है."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "इस कम्युनिटी के चैनलों के लिए सदस्यों की सूची देखें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "इस चैनल के सदस्यों की सूची देखें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "इसे चैनल देखें। {everyoneMention} के लिए इसे अस्वीकार करने से चैनल निजी हो जाता है।"
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "मैसेज भेजें"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "मैसेज भेजें"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "मैसेज भेजें"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "मैसेज भेजना बंद है"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "चैनलों में संदेश भेजें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "इस चैनल में संदेश भेजें।"
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "रीसेट लिंक भेजें"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "{memeName} सहेजी गई मीडिया भेजें"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "टेक्स्ट-टू-स्पीच मैसेज भेजें।"
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "/tts के साथ टेक्स्ट-टू-स्पीच संदेश भेजें। जिन सदस्यों ने टेक्स्ट-टू-स्पीच चालू किया है, वे उन्हें ज़ोर से सुनेंगे।"
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "इस पर भेजें"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "TTS मैसेज भेजें"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "वेरिफिकेशन लेवल को <0>कोई नहीं</0> पर सेट करें."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "वॉइस क्षेत्र सेट करें"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "डिलीट बटन दिखाएं"
|
||||
msgid "Show download button"
|
||||
msgstr "डाउनलोड बटन दिखाएं"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "इस चैनल में भेजे गए लिंक के एम्बेड किए गए पूर्वावलोकन दिखाएं।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "भेजे गए लिंक के लिए एम्बेड किए गए पूर्वावलोकन दिखाएं।"
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "कुछ गड़बड़ हो गई।"
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "कुछ गलत हो गया। कृपया कुछ देर बाद फिर से कोशिश करें।"
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "स्थानिक और अस्थायी परतें"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "बोलें"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "स्ट्रीम सेटिंग्ज़"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "वीडियो स्ट्रीम करें"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "यह तुरंत प्रभावी होगा। {PAYMENT_PR
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "कॉल में बात करें और अपना इनपुट टेस्ट करें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "इस वॉयस चैनल में बोलें। इसके बिना, सदस्य तब तक म्यूट रहेंगे जब तक कि कोई सदस्य को म्यूट करें अनुमति वाला सदस्य उन्हें अनम्यूट न कर दे।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "वॉयस चैनलों में बोलें। इसके बिना, सदस्य तब तक म्यूट रहेंगे जब तक कोई उन्हें म्यूट सदस्य अनुमति से अनम्यूट न कर दे।"
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "समय फ़ॉर्मैट चुनें"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "सदस्यों को टाइम आउट करें"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "स्ट्रीम बंद करें"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "लॉगिन या खाता सुरक्षा विवरण देखने से पहले स्ट्रीमिंग गोपनीयता बंद करें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "इस वॉयस चैनल में कैमरा चालू करें या स्क्रीन शेयर करें।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "कैमरा चालू करें या वॉयस चैनलों में स्क्रीन शेयर करें।"
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "अनपिन किया गया ग्रुप"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "ग्रुप DM अनपिन किया गया"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "इमोजी अपलोड करें"
|
||||
msgid "Upload file"
|
||||
msgstr "फ़ाइल अपलोड करें"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "फ़ाइलों और मीडिया को संदेशों में अपलोड करें।"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "इस चैनल में फ़ाइलें और मीडिया अपलोड करें।"
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "कोई दूसरा ईमेल इस्तेमाल कर
|
||||
msgid "Use email"
|
||||
msgstr "ईमेल का उपयोग करें"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "इस चैनल में अन्य समुदायों के इमोजी का उपयोग करें।"
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "अन्य कम्युनिटी से इमोजी इस्तेमाल करें।"
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "बाहरी इमोजी इस्तेमाल करें"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "बाहरी स्टिकर इस्तेमाल करें"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "सेव की गई मीडिया का इस्तेमा
|
||||
msgid "Use selection"
|
||||
msgstr "चुना गया हिस्सा इस्तेमाल करें"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "इस चैनल में अन्य समुदायों के स्टिकर का उपयोग करें।"
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "{premiumProductName} के साथ अन्य कम्युनिटी से स्टिकर इस्तेमाल करें"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "अन्य समुदायों के स्टिकर का उपयोग करें।"
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "वीडियो और कैमरा प्रीव्यू का उपयोग करें।"
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "वॉइस गतिविधि का इस्तेमाल करें"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "{userName} की प्रोफ़ाइल देखें"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "गतिविधि लॉग देखें"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "कॉल नियंत्रण देखें"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "चैनल देखें"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "चैनल के सदस्य देखें"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "गड़बड़ी के साथ"
|
||||
msgid "Withdraw"
|
||||
msgstr "निकालें"
|
||||
|
||||
#. 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."
|
||||
msgstr "इस अनुमति के बिना, इस चैनल में पुश-टू-टॉक आवश्यक है।"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "आपका समय समाप्त हो गया है। समय-सीमा समाप्त होने तक मैसेजिंग, रिएक्शन और वॉइस रोक दिए गए हैं।"
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "आप पुराने मैसेज देख रहे हैं"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "आप समुदाय की अधिकतम सीमा तक
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Dodaj stavku"
|
||||
msgid "Add local files"
|
||||
msgstr "Dodaj lokalne datoteke"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Dodaj nove reakcije na poruke u ovom kanalu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Dodaj reakciju"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Dodavanje reakcija"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Dodijeljene uloge."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Dodano u oznake"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Prilagodite ukupnu razinu zumiranja aplikacije. Koristite {zoomIn} / {zoomOut} za brzu prilagodbu."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Već je postavljeno za otkazivanje"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Prijavi ovu poruku i sigurnosnom timu {productName}a"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Najmanje jedan kanal mora imati omogućenu dozvolu \"{viewChannelPermissionLabel}\" za {EVERYONE_MENTION} kako bi prilagođeni URL radio. Trenutno nijedan kanal nije vidljiv za {EVERYONE_MENTION}."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Priloži datoteke"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Zvuk"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Audio i video"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Zabrani članu"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Zabrani članovima"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Zabrani članovima pristup zajednici, s mogućnošću brisanja njihovih nedavnih poruka."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Osnovne postavke i dopušteni URI-ji za preusmjeravanje."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Osnovni tekstualni unosi"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Da se čuješ iznad ostalih članova u ovom kanalu dok držiš tipku za razgovor (prioritetno)."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Bit ćete čuti ispred ostalih članova dok držite tipku za razgovor (prioritetno)."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Označite poruku"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Dodano u oznake."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Zaobiđi blokiranje spominjanja"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Zaobiđi usporeni način rada"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Promijenite nadimke drugih članova."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Promjena vlastitog nadimka"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Obrazac za promjenu korisničkog imena"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Promijenite što korisnici bez \"{readMessageHistoryPermissionLabel}\" mogu vidjeti"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Promijeni koju glasovnu regiju koristi glasovni kanal."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Promijeni koju glasovnu regiju ovaj kanal koristi."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Kanal {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Pristup kanalu"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Sekcije s detaljima kanala"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "ID kanala kopiran"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "poveznica kanala"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Poveznica kanala kopirana"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Indikatori tipkanja na popisu kanala"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Upravljanje kanalima"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Glas zajednice"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Cijela zajednica"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Povežite mikrofon i pokušajte ponovno."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Povezivanje na glasovni kanal"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Kopiraj ID kanala"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Kopiraj poveznicu kanala"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Nije moguće preuzeti ažuriranje za stolno računalo"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Nije moguće duplicirati ovaj kanal"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Nije moguće otvoriti portal za naplatu"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Nije moguće prikvačiti ovaj razgovor"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Nije moguće deblokirati korisnika"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Nije moguće otkvačiti ovaj razgovor"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "Kreiraj izravnu poruku"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Stvaranje emojija i naljepnica"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Stvori pozivnicu"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Stvaranje poveznica za pozivnice"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Stvaranje, uređivanje ili brisanje uloga ispod vaše najviše uloge. Omogućuje i uređivanje nadjačavanja dopuštenja kanala."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Stvaranje, uređivanje ili brisanje web-dojavnika za ovaj kanal."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Zanemari uređaj"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Isključi zvuk članovima"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Utišaj druge članove u ovom glasovnom kanalu kako ne bi mogli čuti ni govoriti."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Utišaj ostale članove u glasovnim kanalima kako ne bi mogli čuti ni govoriti."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Na mobilnim uređajima je zadano isključeno radi očuvanja baterije i u
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Izbrisati \"{stickerName}\"? Ovo se ne može poništiti."
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Izbrisati {channelLabel}? Ne može se poništiti."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Izbriši poruke"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Izbriši moje poruke"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Izbriši poruke drugih članova u ovom kanalu. Pripinjanje se kontrolira odvojeno."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Izbriši ovu poruku"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Izbrisati ovu poruku? Ne može se poništiti."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Povucite i ispustite datoteku za prijenos"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Povucite i ispustite datoteke emojija ovdje"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Povucite članove između kanala kojima mogu pristupiti."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Premještajte članove između glasovnih kanala kojima mogu pristupiti i isključite ih iz glasovnog razgovora."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Premjesti članove iz ovog govornog kanala u kanale kojima mogu pristupiti i isključi ih iz govora."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Dupliciraj"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Dupliciraj kanal"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Uredi kategoriju"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Uredi kanal"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Uređivanje ili brisanje emojija i naljepnica koje su izradili drugi članovi."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
msgid "Edit overwrites for roles and members in this channel."
|
||||
msgstr "Uredite nadjačavanja za uloge i članove u ovom kanalu."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Obrazac za otklanjanje pogrešaka u ugrađenom sadržaju"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Ugradi poveznice"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Zanemari oznaku neželjene pošte"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "Zanemariti zahtjev za prijateljstvo od {displayName}?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Zaobiđi ograničenje sporog načina rada ovog kanala."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Zanemari virtualno"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Pozivna poruka"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Pretpregled pozivnice"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Pozovi nove ljude u zajednicu poveznicom na ovaj kanal."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Pozovi nove ljude u zajednicu putem poveznice za pozivnicu."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Pridruži se na ovom uređaju"
|
||||
msgid "Join the call"
|
||||
msgstr "Pridruži se pozivu"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Pridruži se ovom govornom kanalu i čuj druge. Odbijanje ove dozvole uz \"Prikaz kanala\" za {everyoneMention} učinit će kanal privatnim."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Pridruži se glasovnom pozivu"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Pridruži se glasovnom kanalu"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Pridruži se glasovnim kanalima i čuj druge."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Skoči na prvu nepročitanu poruku"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Skoči na poruku"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Skoči na stranicu"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Skoči na najnovije"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Izbaci člana"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Izbaci članove"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Upravljanje blokiranim korisnicima"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Upravljanje kanalom"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Upravljanje kanalima"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Upravljanje zajednicom"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Upravljanje značajkama zajednice"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Upravljanje emojijima i naljepnicama"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Upravljajte poveznicama za pozivanje za ovaj kanal."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Upravljanje porukama"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Upravljanje nadimcima"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Upravljanje načinima plaćanja"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Upravljanje dopuštenjima"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Upravljanje kupljenim poklon-kodovima i URL-ovima poklona"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Upravljanje ulogama"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Upravljanje pretplatom"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Upravljanje webhookovima"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Kontrole spominjanja"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Spomenite sve ili bilo koju ulogu (čak i ako uloga nije postavljena kao spomenjiva)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Spomeni sve ili bilo koju ulogu u ovom kanalu (čak i ako uloga nije postavljena kao spomenljiva)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Poveznica poruke"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Popis poruka"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Popis poruka za {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Poruke"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Poruke i mediji"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Poruke izbrisane"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Učitavanje poruka nije uspjelo"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Način rada"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderiranje"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Pomakni stavku gore"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Premještanje članova"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Isključi obavijesti za favorite"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Isključi zvuk članovima"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Isključi mikrofon"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Isključi obavijesti"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Utišaj ostale članove u ovom govornom kanalu za sve."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Utišaj ostale članove u glasovnim kanalima za sve."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Nema blokiranih korisnika"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Otvori pojedinosti kanala {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Otvori čavrljanje"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Prikvači poruku"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Prikvači poruke"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Prikvači poruke"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Ovdje prikvačite poruke da ih svi vide."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Prikači ili odkači bilo koju poruku u ovom kanalu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Prikači ili odkači bilo koju poruku."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Prikvačena grupa"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Prikvačena grupna izravna poruka"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Prioritiziraj govornike"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioritetni govornik"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Pročitaj poruku naglas"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Čitanje povijesti poruka"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Čitanje povijesti poruka"
|
||||
msgid "Read messages"
|
||||
msgstr "Pročitane poruke"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Čitaj poruke poslane prije nego što su otvorili kanal. Bez toga vide samo poruke koje stižu dok je kanal otvoren."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Pročitajte poruke poslane u ovom kanalu prije nego što su ga otvorili. Bez toga vide samo poruke koje stižu dok je otvoren."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Ukloni ikonu"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Ukloni je iz kanala za sve."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Ukloni članove iz zajednice. Mogu se ponovno pridružiti uz novi poziv."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Uklonjeno odbijanje za {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Uklonjeno iz oznaka"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Preimenuj :{emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Preimenujte i uredite postavke ovog kanala."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "PIN sigurnosne ključa"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "PIN sigurnosne ključa"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Vidi kanale prema zadanim postavkama. Kanali koji ga odbiju ostaju skriveni."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Pogledajte kako vaša pozivnica izgleda posjetiteljima."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Pogledajte popis članova kanala u ovoj zajednici."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Pogledajte popis članova ovog kanala."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Vidi ovaj kanal. Odbijanje za {everyoneMention} čini kanal privatnim."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Pošalji poruku"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Slanje poruka"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Slanje poruka"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Slanje poruka onemogućeno"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Šalji poruke u kanalima."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Šalji poruke u ovom kanalu."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Pošalji poveznicu za ponovno postavljanje"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Pošalji spremljeni medij {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Slanje poruka pretvaranjem teksta u govor."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Šaljite poruke pretvaranjem teksta u govor pomoću /tts. Članovi koji su uključili pretvaranje teksta u govor čuju ih pročitane naglas."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Pošalji na"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "Slanje TTS poruka"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Razina provjere postavljena na <0>nema</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Postavi glasovnu regiju"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Prikaži gumb za brisanje"
|
||||
msgid "Show download button"
|
||||
msgstr "Prikaži gumb za preuzimanje"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Prikaži ugrađene pretpreglede za poveznice koje pošalju u ovom kanalu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Prikaži ugrađene pretpreglede za poveznice koje pošalju."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Nešto je pošlo po zlu."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Nešto je pošlo po zlu. Pokušajte ponovno za nekoliko trenutaka."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Prostorni i vremenski slojevi"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Govoriti"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Postavke prijenosa"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Streamanje videozapisa"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Stupa na snagu odmah. Može se primijeniti razmjerni trošak putem {PAYM
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Razgovarajte u pozivima i testirajte svoj unos."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Govori u ovom glasovnom kanalu. Bez toga, članovi ostaju utišani dok ih netko s dopuštenjem \"Utišaj članove\" ne oduti."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Govori u glasovnim kanalima. Bez toga, članovi ostaju utišani dok ih netko s dopuštenjem \"Utišaj članove\" ne odglumi."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Odabir formata vremena"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Privremeno isključi članove"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Isključi stream"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Isključite privatnost strujanja prije pregledavanja pojedinosti za prijavu ili sigurnost računa."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Uključi kameru ili podijeli zaslon u ovom glasovnom kanalu."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Uključi kameru ili podijeli zaslon u glasovnim kanalima."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Grupa je otkvačena"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Grupa DM nije prikvačena"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Učitaj emoji"
|
||||
msgid "Upload file"
|
||||
msgstr "Učitaj datoteku"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Prenesite datoteke i medijske sadržaje u porukama."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Prenesite datoteke i medije u ovaj kanal."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Koristite drugu e-poštu"
|
||||
msgid "Use email"
|
||||
msgstr "Koristi e-poštu"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Upotrijebi emotikone iz drugih zajednica u ovom kanalu."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Koristite emojije iz drugih zajednica."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Koristi vanjske emotikone"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Koristi vanjske naljepnice"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Koristi spremljene medije"
|
||||
msgid "Use selection"
|
||||
msgstr "Koristi odabir"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Upotrebljavaj naljepnice iz drugih zajednica u ovom kanalu."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Koristite naljepnice iz drugih zajednica uz {premiumProductName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Upotrebljavaj naljepnice iz drugih zajednica."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Upotrijebite pretpreglede videozapisa i kamere."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Koristi glasovnu aktivnost"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "Prikaži profil korisnika {userName}"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Prikaz dnevnika aktivnosti"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Prikaži kontrole poziva"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Prikaz kanala"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Prikaz članova kanala"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "S pogreškom"
|
||||
msgid "Withdraw"
|
||||
msgstr "Povuci"
|
||||
|
||||
#. 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."
|
||||
msgstr "Bez ove dozvole, u ovom kanalu je potreban pritisni za razgovor."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Isteklo vam je vrijeme. Slanje poruka, reakcije i glasovne poruke pauzirani su dok ne istekne vrijeme."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Pregledavate starije poruke"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Dosegnuli ste ograničenje zajednica"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
@@ -2483,6 +2483,11 @@ msgstr "Elem hozzáadása"
|
||||
msgid "Add local files"
|
||||
msgstr "Helyi fájlok hozzáadása"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
msgid "Add new reactions to messages in this channel."
|
||||
msgstr "Új reakciók hozzáadása üzenetekhez ebben a csatornában."
|
||||
|
||||
#. Permission description in the role/permission editor for the Add Reactions permission. "New" reaction means starting a new reaction emoji on a message (not stacking onto an existing one).
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:83
|
||||
msgid "Add new reactions to messages."
|
||||
@@ -2512,7 +2517,7 @@ msgid "Add reaction"
|
||||
msgstr "Reakció hozzáadása"
|
||||
|
||||
#. Permission name: allows adding reactions to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:245
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:436
|
||||
msgid "Add reactions"
|
||||
msgstr "Reakciók hozzáadása"
|
||||
|
||||
@@ -2651,7 +2656,7 @@ msgid "Added roles."
|
||||
msgstr "Szerepkörök hozzáadva."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:19
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:20
|
||||
msgid "Added to bookmarks"
|
||||
msgstr "Hozzáadva a könyvjelzőkhöz"
|
||||
|
||||
@@ -2735,7 +2740,7 @@ msgid "Adjust the overall zoom level of the app. Use {zoomIn} / {zoomOut} to adj
|
||||
msgstr "Állítsd be az alkalmazás általános nagyítási szintjét. Használd a(z) {zoomIn} / {zoomOut} billentyűkombinációt a gyors beállításhoz."
|
||||
|
||||
#. Permission name: grants all permissions and bypasses restrictions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:348
|
||||
msgid "Administrator"
|
||||
msgstr "Rendszergazda"
|
||||
|
||||
@@ -3160,7 +3165,7 @@ msgid "Already set to cancel"
|
||||
msgstr "Már be van állítva a lemondás"
|
||||
|
||||
#. Toggle-switch label in the moderator delete-message confirmation dialog. When enabled, the message is reported (category: other) before being deleted. {productName} is the product name (e.g., Fluxer).
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:81
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:84
|
||||
msgid "Also report this message to the {productName} Safety Team"
|
||||
msgstr "Üzenet jelentése a {productName} biztonsági csapatának is"
|
||||
|
||||
@@ -3954,7 +3959,7 @@ msgid "At least one channel must have \"{viewChannelPermissionLabel}\" permissio
|
||||
msgstr "Ahhoz, hogy a vanity URL működjön, legalább egy csatornán engedélyezni kell a(z) \"{viewChannelPermissionLabel}\" engedélyt a(z) {EVERYONE_MENTION} számára. Jelenleg egyetlen csatorna sem látható a(z) {EVERYONE_MENTION} számára."
|
||||
|
||||
#. Permission name: allows uploading files to messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:420
|
||||
msgid "Attach files"
|
||||
msgstr "Fájlok csatolása"
|
||||
|
||||
@@ -4058,7 +4063,7 @@ msgid "Audio"
|
||||
msgstr "Hang"
|
||||
|
||||
#. Permission category for voice, video, and streaming permissions.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:149
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:340
|
||||
msgid "Audio & video"
|
||||
msgstr "Hang és videó"
|
||||
|
||||
@@ -4773,10 +4778,15 @@ msgid "Ban member"
|
||||
msgstr "Tag kitiltása"
|
||||
|
||||
#. Permission name: allows banning members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:372
|
||||
msgid "Ban members"
|
||||
msgstr "Tagok kitiltása"
|
||||
|
||||
#. Permission description in the role/permission editor for the Ban Members permission. A ban keeps the member out until it is lifted, and the moderator chooses how much recent message history to delete.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
msgid "Ban members from the community, with the option to delete their recent messages."
|
||||
msgstr "Töltsd fel a tagokat a közösségből, és töröld az üzeneteiket."
|
||||
|
||||
#. IAR modal: quick-action card title for banning the reported user (moderator-only).
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:121
|
||||
msgid "Ban this user"
|
||||
@@ -4860,6 +4870,16 @@ msgstr "Alapbeállítások és engedélyezett átirányítási URI-k."
|
||||
msgid "Basic text inputs"
|
||||
msgstr "Egyszerű szövegbeviteli mezők"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Priority Speaker permission. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:300
|
||||
msgid "Be heard over other members in this channel while holding the push to talk (priority) keybind."
|
||||
msgstr "Legyél hallható a csatorna többi tagja felett, miközben lenyomod a \"push to talk (priority)\" gyorsbillentyűt."
|
||||
|
||||
#. Permission description in the role/permission editor for the Priority Speaker permission at community scope. "Push to talk (priority)" is the name of a keybind in the keybind settings, so match the wording used there.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:176
|
||||
msgid "Be heard over other members while holding the push to talk (priority) keybind."
|
||||
msgstr "Legyél hallható más tagok felett, miközben lenyomod a \"push to talk (priority)\" billentyűkombinációt."
|
||||
|
||||
#. Short label in the guild members date range modal. Keep it concise.
|
||||
#: src/features/guild/components/modals/guild_tabs/GuildMembersDateRangeModal.tsx:19
|
||||
msgid "Before date"
|
||||
@@ -5099,7 +5119,7 @@ msgstr "Üzenet megjelölése"
|
||||
|
||||
#. Description text in the saved messages content popout.
|
||||
#. Description text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:169
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:185
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:31
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:34
|
||||
msgid "Bookmark messages to save them for later."
|
||||
@@ -5118,7 +5138,7 @@ msgstr "Könyvjelzőzve."
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#. Short label in the saved messages page. Keep it concise.
|
||||
#. Tab label in the inbox popout listing the user bookmarks.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:33
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:34
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:23
|
||||
#: src/features/messaging/components/popouts/InboxPopout.tsx:34
|
||||
msgid "Bookmarks"
|
||||
@@ -5454,7 +5474,7 @@ msgid "Bypass mention suppression"
|
||||
msgstr "Említés letiltásának megkerülése"
|
||||
|
||||
#. Permission name: allows ignoring per-channel message rate limits.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:249
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:440
|
||||
msgid "Bypass slowmode"
|
||||
msgstr "Lassú mód megkerülése"
|
||||
|
||||
@@ -6031,7 +6051,7 @@ msgid "Change other members' nicknames."
|
||||
msgstr "Más tagok becenevének módosítása."
|
||||
|
||||
#. Permission name: allows a member to edit their own nickname.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:189
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:380
|
||||
msgid "Change own nickname"
|
||||
msgstr "Saját becenév módosítása"
|
||||
|
||||
@@ -6091,6 +6111,16 @@ msgstr "Felhasználónév módosítása űrlap"
|
||||
msgid "Change what users without \"{readMessageHistoryPermissionLabel}\" can see"
|
||||
msgstr "Módosíthatja, hogy mit láthatnak azok a felhasználók, akik nem rendelkeznek a(z) \"{readMessageHistoryPermissionLabel}\" jogosultsággal"
|
||||
|
||||
#. Permission description in the role/permission editor for the Set Voice Region permission at community scope. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:190
|
||||
msgid "Change which voice region a voice channel uses."
|
||||
msgstr "Módosítsd, hogy egy hangcsatorna melyik hangrégiót használja."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Set Voice Region permission. The region is the geographic location of the voice server.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:319
|
||||
msgid "Change which voice region this channel uses."
|
||||
msgstr "Módosítsd, hogy ehhez a csatornához melyik hangrégió tartozzon."
|
||||
|
||||
#. IAR modal: quick-action card description.
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:437
|
||||
msgid "Change who can call or add you."
|
||||
@@ -6185,7 +6215,7 @@ msgid "Channel {id}"
|
||||
msgstr "Csatorna {id}"
|
||||
|
||||
#. Permission category for viewing or entering channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:145
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:336
|
||||
msgid "Channel access"
|
||||
msgstr "Csatorna-hozzáférés"
|
||||
|
||||
@@ -6243,7 +6273,7 @@ msgstr "Csatornarészletek szakaszai"
|
||||
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#. Toast confirming the channel ID was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:108
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:106
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:37
|
||||
msgid "Channel ID copied"
|
||||
msgstr "Csatornaazonosító kimásolva"
|
||||
@@ -6261,7 +6291,7 @@ msgid "channel link"
|
||||
msgstr "csatornalink"
|
||||
|
||||
#. Toast confirming the channel link was copied to the clipboard.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:100
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:98
|
||||
msgid "Channel link copied"
|
||||
msgstr "Csatorna linkje kimásolva"
|
||||
|
||||
@@ -6285,7 +6315,7 @@ msgid "Channel list typing indicators"
|
||||
msgstr "Csatornalista gépelésjelzők"
|
||||
|
||||
#. Permission category for managing channels and channel settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:153
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:344
|
||||
msgid "Channel management"
|
||||
msgstr "Csatornakezelés"
|
||||
|
||||
@@ -7845,7 +7875,7 @@ msgid "Community voice"
|
||||
msgstr "Közösségi hang"
|
||||
|
||||
#. Permission category for permissions that affect the whole community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:324
|
||||
msgid "Community-wide"
|
||||
msgstr "Egész közösség"
|
||||
|
||||
@@ -8099,7 +8129,7 @@ msgstr "Csatlakoztass egy mikrofont, és próbáld újra."
|
||||
|
||||
#. Permission name: allows joining voice channels.
|
||||
#. Primary CTA in the mobile voice-channel lobby bottom sheet. Joins the voice channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:265
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:456
|
||||
#: src/features/voice/components/bottomsheets/VoiceLobbyBottomSheet.tsx:56
|
||||
msgid "Connect to voice"
|
||||
msgstr "Csatlakozás hangcsatornához"
|
||||
@@ -8530,7 +8560,7 @@ msgstr "Csatornaazonosító másolása"
|
||||
#. Action that copies a deep link to the selected channel.
|
||||
#. Keyboard shortcut action label shown in the shortcuts list and keybind editor. Keep short, sentence case.
|
||||
#: src/features/input/state/input_keybind/shared.ts:205
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:132
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:130
|
||||
msgid "Copy channel link"
|
||||
msgstr "Csatornalink másolása"
|
||||
|
||||
@@ -8983,7 +9013,7 @@ msgid "Couldn't download the desktop update"
|
||||
msgstr "Nem sikerült letölteni az asztali frissítést"
|
||||
|
||||
#. Title of the error modal shown when duplicating a channel fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:140
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:138
|
||||
msgid "Couldn't duplicate this channel"
|
||||
msgstr "Nem sikerült megdupl ون this channel"
|
||||
|
||||
@@ -9073,7 +9103,7 @@ msgid "Couldn't open the billing portal"
|
||||
msgstr "Nem sikerült megnyitni a számlázási portált"
|
||||
|
||||
#. Title of the error modal shown when pinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:120
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:118
|
||||
msgid "Couldn't pin this conversation"
|
||||
msgstr "Nem lehetett rögzíteni ezt a beszélgetést"
|
||||
|
||||
@@ -9252,7 +9282,7 @@ msgid "Couldn't unblock user"
|
||||
msgstr "Nem sikerült feloldani a felhasználó blokkolását"
|
||||
|
||||
#. Title of the error modal shown when unpinning a DM or group DM fails.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:124
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:122
|
||||
msgid "Couldn't unpin this conversation"
|
||||
msgstr "Nem lehetett feloldani a beszélgetés rögzítését"
|
||||
|
||||
@@ -9453,7 +9483,7 @@ msgid "Create DM"
|
||||
msgstr "DM létrehozása"
|
||||
|
||||
#. Permission name: allows uploading custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:197
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:388
|
||||
msgid "Create emoji & stickers"
|
||||
msgstr "Emojik és matricák létrehozása"
|
||||
|
||||
@@ -9480,7 +9510,7 @@ msgid "Create invite"
|
||||
msgstr "Meghívó létrehozása"
|
||||
|
||||
#. Permission name: allows creating invite links.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:185
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:376
|
||||
msgid "Create invite links"
|
||||
msgstr "Meghívólinkek létrehozása"
|
||||
|
||||
@@ -9544,7 +9574,7 @@ msgid "Create, edit, or delete roles below your highest role. Also allows editin
|
||||
msgstr "Szerepkörök létrehozása, szerkesztése vagy törlése a legmagasabb szerepköröd alatt. Lehetővé teszi a csatornaengedély-felülírások szerkesztését is."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Webhooks permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:123
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
msgid "Create, edit, or delete webhooks for this channel."
|
||||
msgstr "Webhooks létrehozása, szerkesztése vagy törlése ehhez a csatornához."
|
||||
|
||||
@@ -10196,10 +10226,20 @@ msgid "Deafen device"
|
||||
msgstr "Eszköz némítása"
|
||||
|
||||
#. Permission name: allows moderators to deafen other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:481
|
||||
msgid "Deafen members"
|
||||
msgstr "Tagok némítása"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Deafen Members permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:310
|
||||
msgid "Deafen other members in this voice channel, so they cannot hear or speak."
|
||||
msgstr "Némíts le más tagokat ebben a hangcsatornában, hogy ne halljanak és ne tudjanak beszélni."
|
||||
|
||||
#. Permission description in the role/permission editor for the Deafen Members permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:186
|
||||
msgid "Deafen other members in voice channels, so they cannot hear or speak."
|
||||
msgstr "Némíts le más tagokat a hangcsatornákban, hogy ne halljanak és ne tudjanak beszélni."
|
||||
|
||||
#. Settings label for the keyboard shortcut that toggles voice deafen. Deafen controls hearing voice chat, not microphone mute.
|
||||
#: src/features/voice/utils/VoiceMessageDescriptors.ts:157
|
||||
msgid "Deafen shortcut"
|
||||
@@ -10395,7 +10435,7 @@ msgstr "Mobilon alapértelmezetten ki van kapcsolva az akkumulátor-üzemidő é
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:204
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:216
|
||||
#: src/features/emoji/components/stickers/StickerGridItem.tsx:35
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:77
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:80
|
||||
#: src/features/moderation/components/report_modal/IARModalCopy.ts:109
|
||||
#: src/features/theme_studio/sections/LibrarySection.tsx:514
|
||||
#: src/features/user/components/modals/tabs/account_security_tab/SecurityTab.tsx:399
|
||||
@@ -10427,7 +10467,7 @@ msgstr "Törli a(z) \"{stickerName}\" matricát? Ez a művelet nem vonható viss
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#. Confirm dialog body before deleting a channel.
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:107
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:104
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:102
|
||||
msgid "Delete {channelLabel}? Can't be undone."
|
||||
msgstr "Törli a(z) {channelLabel} csatornát? Ez nem vonható vissza."
|
||||
|
||||
@@ -10555,6 +10595,11 @@ msgstr "Üzenetek törlése"
|
||||
msgid "Delete my messages"
|
||||
msgstr "Üzeneteim törlése"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:229
|
||||
msgid "Delete other members' messages in this channel. Pinning is controlled separately."
|
||||
msgstr "Töröld más tagok üzeneteit ebben a csatornában. A rögzítés külön engedélyt igényel."
|
||||
|
||||
#. Permission description in the role/permission editor for the Manage Messages permission. Notes that pinning has its own permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:68
|
||||
msgid "Delete other members' messages. Pinning is controlled separately."
|
||||
@@ -10628,7 +10673,7 @@ msgid "Delete this message"
|
||||
msgstr "Üzenet törlése"
|
||||
|
||||
#. Error message in the messaging commands. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:73
|
||||
#: src/features/messaging/commands/MessageCommands.tsx:76
|
||||
msgid "Delete this message? Can't be undone."
|
||||
msgstr "Törli ezt az üzenetet? A művelet nem vonható vissza."
|
||||
|
||||
@@ -11913,10 +11958,15 @@ msgstr "Húzza ide a feltölteni kívánt fájlokat"
|
||||
msgid "Drag and drop emoji files here"
|
||||
msgstr "Húzd ide az emojifájlokat"
|
||||
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved.
|
||||
#. Permission description in the role/permission editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:108
|
||||
msgid "Drag members between channels they can access."
|
||||
msgstr "Húzd a tagokat a csatornák között, amelyekhez hozzáférhetnek."
|
||||
msgid "Drag members between voice channels they can access, and disconnect them from voice."
|
||||
msgstr "Húzd át a tagokat az általuk elérhető hangcsatornák között, és szakítsd meg a hangkapcsolatukat."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Move Members permission. The target channel must already be accessible to the member being moved. This permission also covers forcing a member out of voice entirely.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:314
|
||||
msgid "Drag members out of this voice channel into channels they can access, and disconnect them from voice."
|
||||
msgstr "Húzd át a tagokat ebbe a hangcsatornába olyan csatornákba, amelyekhez hozzáférnek, és szakítsd meg a hangkapcsolatukat."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_roles_tab/RoleSidebar.tsx:140
|
||||
msgid "Drag roles to customize the order they appear in the member list."
|
||||
@@ -12015,7 +12065,7 @@ msgstr "Másolás"
|
||||
#. Action that creates a copy of the selected channel.
|
||||
#. Short label in the channel duplicate modal. Keep it concise.
|
||||
#: src/features/channel/components/modals/ChannelDuplicateModal.tsx:28
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:136
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:134
|
||||
msgid "Duplicate channel"
|
||||
msgstr "Csatorna duplikálása"
|
||||
|
||||
@@ -12122,7 +12172,7 @@ msgstr "Kategória szerkesztése"
|
||||
#. Action that opens the edit-channel modal.
|
||||
#. Channel details bottom sheet label or action (channel type, settings, toast, confirmation, or notification option).
|
||||
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:162
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:148
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:146
|
||||
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:75
|
||||
msgid "Edit channel"
|
||||
msgstr "Csatorna szerkesztése"
|
||||
@@ -12202,7 +12252,7 @@ msgid "Edit or delete emoji and stickers created by other members."
|
||||
msgstr "Más tagok által létrehozott hangulatjelek és matricák szerkesztése vagy törlése."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Permissions permission. "Overwrites" are per-channel permission overrides.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:200
|
||||
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."
|
||||
|
||||
@@ -12424,7 +12474,7 @@ msgid "Embed debugger form"
|
||||
msgstr "Beágyazás-hibakereső űrlap"
|
||||
|
||||
#. Permission name: allows links to unfurl/embed in messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:416
|
||||
msgid "Embed links"
|
||||
msgstr "Hivatkozások beágyazása"
|
||||
|
||||
@@ -16524,6 +16574,11 @@ msgstr "Spamjelzés figyelmen kívül hagyása"
|
||||
msgid "Ignore the friend request from {displayName}?"
|
||||
msgstr "{displayName} ismerősjelölésének mellőzése?"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Bypass Slowmode permission. Slowmode is the per-channel cooldown between messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
msgid "Ignore this channel's slowmode cooldown."
|
||||
msgstr "Hagyja figyelmen kívül ennek a csatornának a lassú módját."
|
||||
|
||||
#: src/features/voice/components/StreamSettingsMenuContent.tsx:1038
|
||||
msgid "Ignore virtual"
|
||||
msgstr "Virtuális figyelmen kívül hagyása"
|
||||
@@ -17367,6 +17422,16 @@ msgstr "Meghívóablak"
|
||||
msgid "Invite modal preview"
|
||||
msgstr "Meghívóablak előnézete"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Create Invite Links permission. The invite drops the new member into this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:215
|
||||
msgid "Invite new people to the community with a link to this channel."
|
||||
msgstr "Hozzon létre egy meghívó linket ebbe a csatornába, amellyel új tagokat hívhat meg a közösségbe."
|
||||
|
||||
#. Permission description in the role/permission editor for the Create Invite Links permission. Covers links that let someone outside the community join it.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
msgid "Invite new people to the community with an invite link."
|
||||
msgstr "Hívj meg új embereket a közösségbe egy meghívó linkkel."
|
||||
|
||||
#. Title for invite errors when the invite code does not exist or cannot be used.
|
||||
#: src/features/invite/utils/InviteMessageDescriptors.ts:9
|
||||
msgid "Invite not found"
|
||||
@@ -17680,6 +17745,11 @@ msgstr "Csatlakozás ezen az eszközön"
|
||||
msgid "Join the call"
|
||||
msgstr "Csatlakozás a híváshoz"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Connect permission. "View channel" is another permission in this same editor, so match the wording used for its name. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:279
|
||||
msgid "Join this voice channel and hear others. Denying it along with View channel for {everyoneMention} makes the channel private."
|
||||
msgstr "Csatlakozz ehhez a hangcsatornához, és hallgasd meg a többieket. Ha ezt megtagadod a „Csatorna megtekintése” engedéllyel együtt a(z) {everyoneMention} számára, a csatorna priváttá válik."
|
||||
|
||||
#. Confirm dialog body shown before joining a voice channel from a context where confirmation is required.
|
||||
#: src/features/voice/hooks/usePendingVoiceConnection.tsx:16
|
||||
msgid "Join this voice channel?"
|
||||
@@ -17711,6 +17781,11 @@ msgstr "Csatlakozás a hanghíváshoz"
|
||||
msgid "Join voice channel"
|
||||
msgstr "Csatlakozás a hangcsatornához"
|
||||
|
||||
#. Permission description in the role/permission editor for the Connect permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:162
|
||||
msgid "Join voice channels and hear others."
|
||||
msgstr "Csatlakozz hangcsatornákhoz és hallgasd meg a többieket."
|
||||
|
||||
#. Community members table column header for the date the account joined Fluxer.
|
||||
#: src/features/channel/components/guild_members_page/MembersTableHeaderRow.tsx:29
|
||||
msgid "Joined {productName}"
|
||||
@@ -17757,7 +17832,7 @@ msgid "Jump to first unread message"
|
||||
msgstr "Ugrás az első olvasatlan üzenetre"
|
||||
|
||||
#. Short label in the bookmarks bottom sheet. Keep it concise.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:29
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:30
|
||||
msgid "Jump to message"
|
||||
msgstr "Ugrás az üzenethez"
|
||||
|
||||
@@ -17784,7 +17859,7 @@ msgid "Jump to page"
|
||||
msgstr "Ugrás az oldalra"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:83
|
||||
#: src/features/channel/components/ChannelMessages.tsx:89
|
||||
msgid "Jump to present"
|
||||
msgstr "Ugrás a jelenlegi üzenetekhez"
|
||||
|
||||
@@ -17957,7 +18032,7 @@ msgid "Kick member"
|
||||
msgstr "Tag kirúgása"
|
||||
|
||||
#. Permission name: allows removing members from a community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:177
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:368
|
||||
msgid "Kick members"
|
||||
msgstr "Tagok eltávolítása"
|
||||
|
||||
@@ -18831,17 +18906,17 @@ msgid "Manage blocked users"
|
||||
msgstr "Blokkolt felhasználók kezelése"
|
||||
|
||||
#. Channel-scoped permission name: allows editing this channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:302
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:493
|
||||
msgid "Manage channel"
|
||||
msgstr "Csatorna kezelése"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:173
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:364
|
||||
msgid "Manage channels"
|
||||
msgstr "Csatornák kezelése"
|
||||
|
||||
#. Permission name: allows editing global community settings.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:165
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:356
|
||||
msgid "Manage community"
|
||||
msgstr "Közösség kezelése"
|
||||
|
||||
@@ -18851,7 +18926,7 @@ msgid "Manage community features"
|
||||
msgstr "Közösségi funkciók kezelése"
|
||||
|
||||
#. Permission name: allows editing or deleting custom emoji and stickers.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:201
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:392
|
||||
msgid "Manage emoji & stickers"
|
||||
msgstr "Hangulatjelek és matricák kezelése"
|
||||
|
||||
@@ -18864,12 +18939,12 @@ msgid "Manage invite links for this channel."
|
||||
msgstr "Kezelje a csatorna meghívási hivatkozásait."
|
||||
|
||||
#. Permission name: allows deleting other members' messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:217
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:408
|
||||
msgid "Manage messages"
|
||||
msgstr "Üzenetek kezelése"
|
||||
|
||||
#. Permission name: allows changing other members' nicknames.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:193
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:384
|
||||
msgid "Manage nicknames"
|
||||
msgstr "Becenevek kezelése"
|
||||
|
||||
@@ -18879,7 +18954,7 @@ msgid "Manage payment methods"
|
||||
msgstr "Fizetési módok kezelése"
|
||||
|
||||
#. Channel-scoped permission name: allows editing permission overwrites.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:306
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:497
|
||||
msgid "Manage permissions"
|
||||
msgstr "Engedélyek kezelése"
|
||||
|
||||
@@ -18889,7 +18964,7 @@ msgid "Manage purchased gift codes and gift URLs"
|
||||
msgstr "Vásárolt ajándékkódok és ajándék URL-ek kezelése"
|
||||
|
||||
#. Permission name: allows role management and permission overwrite editing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:169
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:360
|
||||
msgid "Manage roles"
|
||||
msgstr "Szerepkörök kezelése"
|
||||
|
||||
@@ -18899,7 +18974,7 @@ msgid "Manage subscription"
|
||||
msgstr "Előfizetés kezelése"
|
||||
|
||||
#. Permission name: allows creating, editing, or deleting webhooks.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:205
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:396
|
||||
msgid "Manage webhooks"
|
||||
msgstr "Webhookok kezelése"
|
||||
|
||||
@@ -19519,6 +19594,11 @@ msgstr "Említésvezérlők"
|
||||
msgid "Mention everyone or any role (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mindenki vagy bármelyik szerepkör megemlítése (akkor is, ha a szerepkör nincs beállítva megemlíthetőként)."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mention Everyone permission. Notes that this overrides the per-role "mentionable" flag.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:254
|
||||
msgid "Mention everyone or any role in this channel (even if the role isn't set to be mentionable)."
|
||||
msgstr "Mindenkit vagy bármelyik szerepkört megemlíthetsz ebben a csatornában (akkor is, ha a szerepkör nem állítható be megemlíthetőként)."
|
||||
|
||||
#. Notifications settings: section heading for the default reply-mention behavior.
|
||||
#. Settings section label. Names the settings section in the settings UI.
|
||||
#. Short label in the inline. Keep it concise.
|
||||
@@ -19750,12 +19830,12 @@ msgid "Message link"
|
||||
msgstr "Üzenet linkje"
|
||||
|
||||
#. Short label in the channel and chat messages. Keep it concise.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:75
|
||||
#: src/features/channel/components/ChannelMessages.tsx:81
|
||||
msgid "Message list"
|
||||
msgstr "Üzenetlista"
|
||||
|
||||
#. Label in the channel and chat messages. Preserve {channelName}; it is inserted by code.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:71
|
||||
#: src/features/channel/components/ChannelMessages.tsx:77
|
||||
msgid "Message list for {channelName}"
|
||||
msgstr "Üzenetlista ehhez: {channelName}"
|
||||
|
||||
@@ -19846,7 +19926,7 @@ msgid "Messages"
|
||||
msgstr "Üzenetek"
|
||||
|
||||
#. Permission category for chat messages, uploads, embeds, reactions, and media.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:328
|
||||
msgid "Messages & media"
|
||||
msgstr "Üzenetek és média"
|
||||
|
||||
@@ -19856,7 +19936,7 @@ msgid "Messages deleted"
|
||||
msgstr "Üzenetek törölve"
|
||||
|
||||
#. Error message in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:87
|
||||
#: src/features/channel/components/ChannelMessages.tsx:93
|
||||
msgid "Messages failed to load"
|
||||
msgstr "Az üzenetek betöltése sikertelen"
|
||||
|
||||
@@ -20116,7 +20196,7 @@ msgid "Mod"
|
||||
msgstr "Mód"
|
||||
|
||||
#. Permission category for moderation actions against members or messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:141
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:332
|
||||
msgid "Moderation"
|
||||
msgstr "Moderálás"
|
||||
|
||||
@@ -20309,7 +20389,7 @@ msgid "Move item up"
|
||||
msgstr "Elem feljebb mozgatása"
|
||||
|
||||
#. Permission name: allows moving members between voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:294
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:485
|
||||
msgid "Move members"
|
||||
msgstr "Tagok áthelyezése"
|
||||
|
||||
@@ -20493,7 +20573,7 @@ msgid "Mute favourites"
|
||||
msgstr "Kedvencek némítása"
|
||||
|
||||
#. Permission name: allows moderators to mute other voice participants.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:286
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:477
|
||||
msgid "Mute members"
|
||||
msgstr "Tagok némítása"
|
||||
|
||||
@@ -20509,6 +20589,16 @@ msgstr "Mikrofon némítása"
|
||||
msgid "Mute notifications"
|
||||
msgstr "Értesítések némítása"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Mute Members permission. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:305
|
||||
msgid "Mute other members in this voice channel for everyone."
|
||||
msgstr "Némítsa el a többi tagot ebben a hangcsatornában mindenki számára."
|
||||
|
||||
#. Permission description in the role/permission editor for the Mute Members permission at community scope. The mute applies for every listener, not only for the moderator.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:181
|
||||
msgid "Mute other members in voice channels for everyone."
|
||||
msgstr "Némíts le más tagokat a hangcsatornákban mindenki számára."
|
||||
|
||||
#. Settings search entry label. Names the settings search entry in the settings UI.
|
||||
#: src/features/user/components/settings_utils/search_index/KeybindsIndex.ts:174
|
||||
msgid "Mute shortcut"
|
||||
@@ -21173,7 +21263,7 @@ msgstr "Nincsenek letiltott felhasználók"
|
||||
|
||||
#. Empty-state text in the saved messages content popout.
|
||||
#. Empty-state text in the saved messages page.
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:166
|
||||
#: src/features/channel/components/modals/BookmarksBottomSheet.tsx:182
|
||||
#: src/features/messaging/components/pages/SavedMessagesPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:30
|
||||
msgid "No bookmarks"
|
||||
@@ -22303,7 +22393,7 @@ msgstr "Csatornarészletek megnyitása – {channelName}"
|
||||
#. Context-menu action that opens a voice channel's embedded chat view without connecting to voice.
|
||||
#. Tooltip and accessible label for the chat icon shown beside a voice channel in the channel list.
|
||||
#: src/features/app/components/layout/ChannelItem.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:150
|
||||
msgid "Open chat"
|
||||
msgstr "Csevegés megnyitása"
|
||||
|
||||
@@ -23475,7 +23565,7 @@ msgid "Pin message"
|
||||
msgstr "Üzenet rögzítése"
|
||||
|
||||
#. Permission name: allows pinning messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:221
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:412
|
||||
msgid "Pin messages"
|
||||
msgstr "Üzenetek rögzítése"
|
||||
|
||||
@@ -23484,6 +23574,16 @@ msgstr "Üzenetek rögzítése"
|
||||
msgid "Pin messages here for everyone to see."
|
||||
msgstr "Tűzz ki üzeneteket ide, hogy mindenki láthassa."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Pin Messages permission. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:234
|
||||
msgid "Pin or unpin any message in this channel."
|
||||
msgstr "Bármelyik üzenet rögzítése vagy rögzítésének feloldása ebben a csatornában."
|
||||
|
||||
#. Permission description in the role/permission editor for the Pin Messages permission at community scope. Covers messages from anyone, not only their own.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:137
|
||||
msgid "Pin or unpin any message."
|
||||
msgstr "Bármelyik üzenet rögzítése vagy rögzítésének megszüntetése."
|
||||
|
||||
#. Body of the confirmation alert shown when pinning a message.
|
||||
#: src/features/channel/components/MessageActionUtils.tsx:60
|
||||
msgid "Pin this message to the channel for everyone to see."
|
||||
@@ -23530,7 +23630,7 @@ msgstr "Rögzített csoport"
|
||||
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#. Toast confirming a group DM was pinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:112
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:110
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:13
|
||||
msgid "Pinned group DM"
|
||||
msgstr "Rögzített csoportos DM"
|
||||
@@ -24076,7 +24176,7 @@ msgid "Prioritize speakers"
|
||||
msgstr "Beszélők előtérbe helyezése"
|
||||
|
||||
#. Permission name: allows a voice participant to be heard over others.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:282
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:473
|
||||
msgid "Priority speaker"
|
||||
msgstr "Prioritásos beszélő"
|
||||
|
||||
@@ -24713,7 +24813,7 @@ msgid "Read message aloud"
|
||||
msgstr "Üzenet felolvasása"
|
||||
|
||||
#. Permission name: allows seeing earlier messages in a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:233
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:424
|
||||
msgid "Read message history"
|
||||
msgstr "Üzenetelőzmények olvasása"
|
||||
|
||||
@@ -24724,6 +24824,16 @@ msgstr "Üzenetelőzmények olvasása"
|
||||
msgid "Read messages"
|
||||
msgstr "Üzenetek olvasása"
|
||||
|
||||
#. Permission description in the role/permission editor for the Read Message History permission at community scope. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:151
|
||||
msgid "Read messages sent before they opened a channel. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Olvassa el az üzeneteket, mielőtt megnyitották volna a csatornát. Enélkül csak azokat az üzeneteket látják, amelyek akkor érkeznek, amikor az nyitva van."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Read Message History permission. Without the permission the member sees only messages that arrive while the channel is open in front of them.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:248
|
||||
msgid "Read messages sent in this channel before they opened it. Without it, they only see messages that arrive while it is open."
|
||||
msgstr "Olvassa el az üzeneteket, mielőtt megnyitották volna a csatornát. Enélkül csak azokat az üzeneteket látják, amelyek akkor érkeznek, amikor nyitva van."
|
||||
|
||||
#. Permission description in the role/permission editor for the View Activity Log permission. Refers to the per-community audit/activity log.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:18
|
||||
msgid "Read the community's activity log of changes and moderation actions."
|
||||
@@ -25343,6 +25453,11 @@ msgstr "Ikon eltávolítása"
|
||||
msgid "Remove it from the channel for everyone."
|
||||
msgstr "Eltávolítás mindenhonnan a csatornáról."
|
||||
|
||||
#. Permission description in the role/permission editor for the Kick Members permission. Note that a kick is not permanent, unlike a ban.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:118
|
||||
msgid "Remove members from the community. They can rejoin with a new invite."
|
||||
msgstr "Távolítsd el a tagokat a közösségből. Új meghívóval újra csatlakozhatnak."
|
||||
|
||||
#. Button or menu action label in the recent mentions content popout. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:52
|
||||
msgid "Remove mention"
|
||||
@@ -25455,7 +25570,7 @@ msgid "Removed deny for {0}."
|
||||
msgstr "Megtagadás eltávolítva: {0}."
|
||||
|
||||
#. Button or menu action label in the messaging commands. Keep it concise. Keep the tone plain and specific.
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:23
|
||||
#: src/features/messaging/commands/SavedMessageCommands.tsx:24
|
||||
msgid "Removed from bookmarks"
|
||||
msgstr "Eltávolítva a könyvjelzőkből"
|
||||
|
||||
@@ -25533,7 +25648,7 @@ msgid "Rename :{emojiName}:"
|
||||
msgstr "Átnevezés: {emojiName}:"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Manage Channel permission. "This channel" refers to the channel currently being edited.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:113
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:195
|
||||
msgid "Rename and edit this channel's settings."
|
||||
msgstr "Átnevezheted és szerkesztheted a csatorna beállításait."
|
||||
|
||||
@@ -27528,6 +27643,11 @@ msgstr "Biztonsági kulcs PIN-kódja"
|
||||
msgid "Security key PIN form"
|
||||
msgstr "Biztonsági kulcs PIN-kódja"
|
||||
|
||||
#. Permission description in the role/permission editor for the View Channel permission at community scope. Per-channel overwrites still decide access for individual channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
msgid "See channels by default. Channels that deny it stay hidden."
|
||||
msgstr "Alapértelmezetten látja a csatornákat. Azok a csatornák, amelyek megtiltják, rejtve maradnak."
|
||||
|
||||
#: src/features/guild/components/modals/guild_tabs/guild_overview_tab/fields/GuildInviteSplashSettingsField.tsx:89
|
||||
msgid "See how your invite looks to visitors."
|
||||
msgstr "Nézd meg, hogyan néz ki a meghívód a látogatók számára."
|
||||
@@ -27538,10 +27658,15 @@ msgid "See the member list for channels in this community."
|
||||
msgstr "Tekintse meg a közösség csatornáinak taglistáját."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel Members permission. Scoped to a single channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:128
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:210
|
||||
msgid "See the member list for this channel."
|
||||
msgstr "Tekintse meg a csatorna taglistáját."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the View Channel permission. The placeholder renders the literal @everyone role name and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:220
|
||||
msgid "See this channel. Denying it for {everyoneMention} makes the channel private."
|
||||
msgstr "Lásd ezt a csatornát. Ha megtagadod a(z) {everyoneMention} számára, a csatorna priváttá válik."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/search_index/AccessibilityIndex.ts:121
|
||||
msgid "Seek preview"
|
||||
@@ -27880,7 +28005,7 @@ msgstr "Üzenet küldése"
|
||||
#. Audit log operation flag label for message sending.
|
||||
#. Permission name: allows sending chat messages.
|
||||
#: src/features/guild/utils/guild_tabs/GuildAuditLogTabUtils.ts:174
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:209
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:400
|
||||
msgid "Send messages"
|
||||
msgstr "Üzenetek küldése"
|
||||
|
||||
@@ -27889,6 +28014,16 @@ msgstr "Üzenetek küldése"
|
||||
msgid "Send messages disabled"
|
||||
msgstr "Üzenetküldés letiltva"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send Messages permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:133
|
||||
msgid "Send messages in channels."
|
||||
msgstr "Üzenetek küldése csatornákban."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Send Messages permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:225
|
||||
msgid "Send messages in this channel."
|
||||
msgstr "Üzenetek küldése ebben a csatornában."
|
||||
|
||||
#. Footer submit button in the IAR modal. Sends the report to the safety team.
|
||||
#: src/features/moderation/components/report_modal/IARModal.tsx:90
|
||||
msgid "Send report"
|
||||
@@ -27908,10 +28043,10 @@ msgstr "Jelszó-visszaállító link küldése"
|
||||
msgid "Send saved media {memeName}"
|
||||
msgstr "Mentett média küldése: {memeName}"
|
||||
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity.
|
||||
#. Permission description in the role/permission editor for the Send TTS Messages permission. Keep "text-to-speech" spelled out for clarity. "/tts" is a literal command prefix typed in the message box and must not be translated.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:63
|
||||
msgid "Send text-to-speech messages."
|
||||
msgstr "Szövegfelolvasó üzenetek küldése."
|
||||
msgid "Send text-to-speech messages with /tts. Members who turned text-to-speech on hear them read aloud."
|
||||
msgstr "Küldj szöveges üzeneteket a /tts paranccsal. Azok a tagok, akik bekapcsolták a szöveges üzenetek felolvasását, hallani fogják őket."
|
||||
|
||||
#. placeholder {0}: inboundChallenge.challenge_code
|
||||
#. placeholder {1}: inboundChallenge.our_number
|
||||
@@ -27940,7 +28075,7 @@ msgid "Send to"
|
||||
msgstr "Küldés ide"
|
||||
|
||||
#. Permission name: allows sending text-to-speech messages.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:213
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:404
|
||||
msgid "Send TTS messages"
|
||||
msgstr "TTS-üzenetek küldése"
|
||||
|
||||
@@ -28310,7 +28445,7 @@ msgid "Set verification level to <0>none</0>."
|
||||
msgstr "Hitelesítési szint beállítása: <0>nincs</0>."
|
||||
|
||||
#. Permission name: allows changing the voice service region.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:298
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:489
|
||||
msgid "Set voice region"
|
||||
msgstr "Hangrégió beállítása"
|
||||
|
||||
@@ -28709,6 +28844,16 @@ msgstr "Törlés gomb megjelenítése"
|
||||
msgid "Show download button"
|
||||
msgstr "Letöltés gomb megjelenítése"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Embed Links permission. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:239
|
||||
msgid "Show embedded previews for links they send in this channel."
|
||||
msgstr "Mutasd a küldött linkek beágyazott előnézeteit ebben a csatornában."
|
||||
|
||||
#. Permission description in the role/permission editor for the Embed Links permission at community scope. The preview is the card rendered under a message that contains a link.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:142
|
||||
msgid "Show embedded previews for links they send."
|
||||
msgstr "Beágyazott előnézetek megjelenítése a küldött linkekhez."
|
||||
|
||||
#. Settings search synonym. Used to match this term when the user types it in the settings search bar.
|
||||
#: src/features/user/components/settings_utils/section_registry/ChatSettingsSections.ts:46
|
||||
msgid "Show embeds"
|
||||
@@ -29712,8 +29857,8 @@ msgstr "Valami hiba történt."
|
||||
#: src/features/emoji/components/emojis/EmojiListItem.tsx:129
|
||||
#: src/features/theme/components/modals/ShareThemeModal.tsx:51
|
||||
#: src/features/ui/action_menu/items/CallMenuItems.tsx:45
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:128
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:144
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:126
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:142
|
||||
msgid "Something went wrong. Please try again in a moment."
|
||||
msgstr "Valami hiba történt. Kérjük, próbálja meg újra egy pillanat múlva."
|
||||
|
||||
@@ -29889,7 +30034,7 @@ msgid "Spatial and temporal layers"
|
||||
msgstr "Térbeli és időbeli rétegek"
|
||||
|
||||
#. Permission name: allows speaking in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:269
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:460
|
||||
msgctxt "voice-permission"
|
||||
msgid "Speak"
|
||||
msgstr "Beszéd"
|
||||
@@ -30552,7 +30697,7 @@ msgid "Stream settings"
|
||||
msgstr "Adatfolyam beállításai"
|
||||
|
||||
#. Permission name: allows video streaming or screen sharing in voice.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:274
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:465
|
||||
msgid "Stream video"
|
||||
msgstr "Videó streamelése"
|
||||
|
||||
@@ -31160,6 +31305,16 @@ msgstr "Azonnal életbe lép. Előfordulhat, hogy a(z) {PAYMENT_PROVIDER_NAME} a
|
||||
msgid "Talk in calls and test your input."
|
||||
msgstr "Beszélj a hívásokban és teszteld a bemeneted."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Speak permission. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:285
|
||||
msgid "Talk in this voice channel. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Beszélj ebben a hangcsatornában. Enélkül a tagok némítva maradnak, amíg valaki, akinek van \"Tagok némítása\" engedélye, fel nem oldja a némításukat."
|
||||
|
||||
#. Permission description in the role/permission editor for the Speak permission at community scope. "Mute members" is another permission in this same editor, so match the wording used for its name.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:166
|
||||
msgid "Talk in voice channels. Without it, members stay muted until someone with Mute members unmutes them."
|
||||
msgstr "Beszélj hangcsatornákban. Enélkül a tagok némák maradnak, amíg valaki a \"Tagok némítása\" engedéllyel fel nem oldja a némításukat."
|
||||
|
||||
#. Label in the note edit sheet.
|
||||
#: src/features/user/components/modals/NoteEditSheet.tsx:21
|
||||
msgid "Tap to add a note"
|
||||
@@ -32647,7 +32802,7 @@ msgid "Time format selection"
|
||||
msgstr "Időformátum kiválasztása"
|
||||
|
||||
#. Permission name: allows temporarily restricting members.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:253
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:444
|
||||
msgid "Time out members"
|
||||
msgstr "Tagok időleges korlátozása"
|
||||
|
||||
@@ -33317,6 +33472,16 @@ msgstr "Stream kikapcsolása"
|
||||
msgid "Turn off streaming privacy before viewing login or account security details."
|
||||
msgstr "Kapcsolja ki az adatvédelmi adatfolyamot, mielőtt megtekintené a bejelentkezési vagy fiókbiztonsági adatokat."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Stream Video permission. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:290
|
||||
msgid "Turn on a camera or share a screen in this voice channel."
|
||||
msgstr "Kamerát kapcsol be, vagy ossz meg egy képernyőt ebben a hangcsatornában."
|
||||
|
||||
#. Permission description in the role/permission editor for the Stream Video permission at community scope. Covers both the webcam and screen sharing.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:171
|
||||
msgid "Turn on a camera or share a screen in voice channels."
|
||||
msgstr "Kamerát vagy képernyőt oszthatsz meg a hangcsatornákon."
|
||||
|
||||
#. Label for the automatic streaming privacy detection settings toggle.
|
||||
#: src/features/user/components/modals/tabs/appearance_tab/StreamerModeTab.tsx:19
|
||||
msgid "Turn on automatically when OBS or XSplit is detected"
|
||||
@@ -34122,7 +34287,7 @@ msgstr "Rögzítés feloldva"
|
||||
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#. Toast confirming a group DM was unpinned in the sidebar.
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:116
|
||||
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:114
|
||||
#: src/features/ui/action_menu/items/dm_menu_data/shared.ts:25
|
||||
msgid "Unpinned group DM"
|
||||
msgstr "Rögzítés feloldva (csoportos DM)"
|
||||
@@ -34508,6 +34673,16 @@ msgstr "Emoji feltöltése"
|
||||
msgid "Upload file"
|
||||
msgstr "Fájl feltöltése"
|
||||
|
||||
#. Permission description in the role/permission editor for the Attach Files permission at community scope.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:147
|
||||
msgid "Upload files and media in messages."
|
||||
msgstr "Fájlok és média feltöltése üzenetekben."
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Attach Files permission.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:244
|
||||
msgid "Upload files and media in this channel."
|
||||
msgstr "Fájlok és média feltöltése ebben a csatornában."
|
||||
|
||||
#: src/features/channel/components/modals/EditGroupBottomSheet.tsx:328
|
||||
#: src/features/channel/components/modals/EditGroupModal.tsx:283
|
||||
#: src/features/guild/components/modals/add_guild_modal/GuildCreateForm.tsx:304
|
||||
@@ -34793,6 +34968,11 @@ msgstr "Másik e-mail-cím használata"
|
||||
msgid "Use email"
|
||||
msgstr "E-mail használata"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Emoji permission. "Other communities" means custom emoji uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:259
|
||||
msgid "Use emoji from other communities in this channel."
|
||||
msgstr "Más közösségek emojijainak használata ebben a csatornában."
|
||||
|
||||
#. Premium upsell shown when sending external emoji without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:24
|
||||
msgid "Use emoji from other communities with {premiumProductName}"
|
||||
@@ -34804,12 +34984,12 @@ msgid "Use emoji from other communities."
|
||||
msgstr "Hangulatjelek használata más közösségekből."
|
||||
|
||||
#. Permission name: allows using emoji from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:237
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:428
|
||||
msgid "Use external emoji"
|
||||
msgstr "Külső emojik használata"
|
||||
|
||||
#. Permission name: allows using stickers from other communities.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:241
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:432
|
||||
msgid "Use external stickers"
|
||||
msgstr "Külső matricák használata"
|
||||
|
||||
@@ -34905,11 +35085,21 @@ msgstr "Mentett média használata"
|
||||
msgid "Use selection"
|
||||
msgstr "Kijelölés használata"
|
||||
|
||||
#. Permission description in the channel-scoped permissions editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:264
|
||||
msgid "Use stickers from other communities in this channel."
|
||||
msgstr "Más közösségek matricáinak használata ebben a csatornában."
|
||||
|
||||
#. Premium upsell shown when sending external stickers without a subscription.
|
||||
#: src/features/expressions/utils/ExpressionPermissionUtils.ts:36
|
||||
msgid "Use stickers from other communities with {premiumProductName}"
|
||||
msgstr "Használj matricákat más közösségekből a {premiumProductName} segítségével"
|
||||
|
||||
#. Permission description in the role/permission editor for the Use External Stickers permission. "Other communities" means stickers uploaded in a different Fluxer community.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:157
|
||||
msgid "Use stickers from other communities."
|
||||
msgstr "Matricák használata más közösségekből."
|
||||
|
||||
#. Label in the language tab.
|
||||
#: src/features/user/components/modals/tabs/LanguageTab.tsx:63
|
||||
msgid "Use system locale for time format"
|
||||
@@ -34976,7 +35166,7 @@ msgid "Use video and camera previews."
|
||||
msgstr "Videó- és kameraképek használata."
|
||||
|
||||
#. Permission name: allows voice activation instead of requiring push-to-talk.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:278
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:469
|
||||
msgid "Use voice activity"
|
||||
msgstr "Hangaktivitás használata"
|
||||
|
||||
@@ -35720,7 +35910,7 @@ msgid "View {userName}'s profile"
|
||||
msgstr "{userName} profiljának megtekintése"
|
||||
|
||||
#. Permission name: allows viewing community audit/activity logs.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:161
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:352
|
||||
msgid "View activity log"
|
||||
msgstr "Tevékenységi napló megtekintése"
|
||||
|
||||
@@ -35776,12 +35966,12 @@ msgid "View call controls"
|
||||
msgstr "Hívásvezérlők megtekintése"
|
||||
|
||||
#. Permission name: allows seeing a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:257
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:448
|
||||
msgid "View channel"
|
||||
msgstr "Csatorna megtekintése"
|
||||
|
||||
#. Permission name: allows seeing the member list for a channel.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:261
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:452
|
||||
msgid "View channel members"
|
||||
msgstr "Csatornatagok megtekintése"
|
||||
|
||||
@@ -37029,6 +37219,11 @@ msgstr "Hibával"
|
||||
msgid "Withdraw"
|
||||
msgstr "Visszavonás"
|
||||
|
||||
#. 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."
|
||||
msgstr "Enélkül a jogosultság nélkül ehhez a csatornához nyomógombos beszéd szükséges."
|
||||
|
||||
#. Permission description in the role/permission editor for the Use Voice Activity permission. Explains the inverse: without it, the user must use push-to-talk in voice channels.
|
||||
#: src/features/permissions/utils/PermissionLabelDescriptors.ts:103
|
||||
msgid "Without this permission, push-to-talk is required."
|
||||
@@ -37905,7 +38100,7 @@ msgid "You're timed out. Messaging, reactions, and voice are paused until the ti
|
||||
msgstr "Időtúllépés. Az üzenetküldés, a reakciók és a hangüzenetek szünetelnek, amíg az időtúllépés le nem jár."
|
||||
|
||||
#. Label in the channel and chat messages.
|
||||
#: src/features/channel/components/ChannelMessages.tsx:79
|
||||
#: src/features/channel/components/ChannelMessages.tsx:85
|
||||
msgid "You're viewing older messages"
|
||||
msgstr "Régebbi üzeneteket nézel"
|
||||
|
||||
@@ -37950,7 +38145,7 @@ msgstr "Elérte a közösségi korlátot"
|
||||
#. Label in the saved messages content popout.
|
||||
#. Short label in the shared app channel pins content.
|
||||
#: src/features/app/components/shared/ChannelPinsContent.tsx:63
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:26
|
||||
#: src/features/messaging/components/pages/MessageListPage.tsx:27
|
||||
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:411
|
||||
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:38
|
||||
msgid "You've reached the end"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user