Compare commits

..
Author SHA1 Message Date
HampusandGitHub 5660972c71 perf(app): cut idle renderer CPU and unbounded memory growth (#1724) 2026-08-18 23:13:42 +02:00
HampusandGitHub b4a5eb77a8 docs: fix community health document links broken by the .github move (#1723) 2026-08-18 20:23:40 +02:00
HampusandGitHub 4bbfee4cec fix(app): make click-through the default and move animation pausing to Accessibility (#1722) 2026-08-18 19:40:35 +02:00
HampusandGitHub 9e89539f0a perf(app): stop unbounded WASM heap growth and idle-CPU churn (#1721) 2026-08-18 18:31:28 +02:00
fa71eb8682 chore(marketing): advance pointer 9720a17 → a31164c (#1717)
Co-authored-by: hampus-fluxer <[email protected]>
2026-08-18 16:50:27 +02:00
HampusandGitHub 49b7127bc7 chore(static): regenerate marketing screenshots and README showcase (#1718) 2026-08-18 16:50:23 +02:00
HampusandGitHub 9cb8812be0 fix(app-proxy): collapse the discovery cold-start retry condition (#1716) 2026-08-18 16:12:33 +02:00
HampusandGitHub 7d82d188a0 fix(gateway): register the session process with presence on resume (#1715) 2026-08-18 16:06:26 +02:00
HampusandGitHub 5ce5669f17 fix(app): allow the inbox shortcut while the composer is empty (#1714) 2026-08-18 14:31:23 +02:00
HampusandGitHub 9ea750152e fix(app-proxy): serve the SPA from cached discovery instead of blocking on refresh (#1713) 2026-08-18 06:07:53 +02:00
HampusandGitHub e87e2fe7bf fix(admin): show the deferred phone gate controls on hosted instances (#1712) 2026-08-18 05:49:33 +02:00
HampusandGitHub 871b5116dc fix(media-proxy): stop sending X-Robots-Tag in static mode (#1710) 2026-08-18 05:21:10 +02:00
HampusandGitHub d7b2e67c35 feat(api): defer registration phone verification to community joins (#1709) 2026-08-18 05:13:41 +02:00
HampusandGitHub 7e1ca9ed6a fix(api): mirror Stripe billing data using the shapes the pinned API version sends (#1708) 2026-08-18 02:35:58 +02:00
HampusandGitHub 1922d56188 fix(api): keep Stripe expand paths within the four-level limit (#1707) 2026-08-18 01:06:10 +02:00
HampusandGitHub cc105883a5 feat(app): restyle the inbox and message preview surfaces (#1706) 2026-08-18 00:43:18 +02:00
177 changed files with 12763 additions and 11445 deletions
+4 -4
View File
@@ -25,7 +25,7 @@ Closes #456
You must understand every line you submit and be able to explain why the change is correct.
The [LLM usage policy](LLM_USAGE_POLICY.md) defines the authorship requirements for contributors who do not have write access.
The [LLM usage policy](https://github.com/fluxerapp/fluxer/blob/main/.github/LLM_USAGE_POLICY.md) defines the authorship requirements for contributors who do not have write access.
Each contribution must contain one coherent change. Do not include unrelated fixes, refactoring or formatting changes.
@@ -80,15 +80,15 @@ Complete every section of the pull request template. Clearly describe:
Use the [bug report form](https://github.com/fluxerapp/fluxer/issues/new?template=bug-report.yaml) to report reproducible defects.
Report security vulnerabilities privately through the channels specified in the [security policy](SECURITY.md). Do not report vulnerabilities in public issues or discussions.
Report security vulnerabilities privately through the channels specified in the [security policy](https://github.com/fluxerapp/fluxer/blob/main/.github/SECURITY.md). Do not report vulnerabilities in public issues or discussions.
Use [discussions](https://github.com/orgs/fluxerapp/discussions) for feature proposals and self-hosting questions.
Submit translations through [Weblate](https://weblate.fluxer.tools), not through pull requests.
All repository activity is governed by the [Code of Conduct](CODE_OF_CONDUCT.md).
All repository activity is governed by the [Code of Conduct](https://github.com/fluxerapp/fluxer/blob/main/.github/CODE_OF_CONDUCT.md).
Fluxer is distributed under the [GNU Affero General Public License, version 3.0 or later](../LICENSE). By adding a DCO sign-off, you certify that you have the right to submit the contribution under that licence.
Fluxer is distributed under the [GNU Affero General Public License, version 3.0 or later](https://github.com/fluxerapp/fluxer/blob/main/LICENSE). By adding a DCO sign-off, you certify that you have the right to submit the contribution under that licence.
## Private marketing project
+2 -2
View File
@@ -8,11 +8,11 @@ External contributions do not grant voting rights, commit access, employment or
## Licence and contributor rights
Source code owned by Fluxer Platform AB in this repository is distributed under the [GNU Affero General Public License, version 3.0 or later](../LICENSE). The licence permits its use, modification and redistribution subject to its terms.
Source code owned by Fluxer Platform AB in this repository is distributed under the [GNU Affero General Public License, version 3.0 or later](https://github.com/fluxerapp/fluxer/blob/main/LICENSE). The licence permits its use, modification and redistribution subject to its terms.
Fluxer Platform AB does not require contributors to sign a contributor licence agreement or assign their copyright. Contributors retain the copyright in their work.
Every commit made by a contributor must include the [Developer Certificate of Origin](https://developercertificate.org) sign-off required by the [contributing guidelines](CONTRIBUTING.md). Pull requests opened by Fluxer repository automation are exempt from this requirement.
Every commit made by a contributor must include the [Developer Certificate of Origin](https://developercertificate.org) sign-off required by the [contributing guidelines](https://github.com/fluxerapp/fluxer/blob/main/.github/CONTRIBUTING.md). Pull requests opened by Fluxer repository automation are exempt from this requirement.
## Name and marks
+1 -1
View File
@@ -129,7 +129,7 @@ Deliberately submitting a fabricated security report MAY result in an immediate
Maintainers are not required to investigate possible LLM use proactively. Writing style alone is not evidence of a violation.
A person MUST NOT publicly accuse or harass a contributor because of suspected LLM use. All discussion, review and enforcement under this policy MUST comply with the [Code of Conduct](CODE_OF_CONDUCT.md).
A person MUST NOT publicly accuse or harass a contributor because of suspected LLM use. All discussion, review and enforcement under this policy MUST comply with the [Code of Conduct](https://github.com/fluxerapp/fluxer/blob/main/.github/CODE_OF_CONDUCT.md).
## 11. Normative References
+1 -1
View File
@@ -31,5 +31,5 @@
Fluxer is a free and open source instant messaging and VoIP chat app built for friends, groups, and communities.
<p align="center">
<img src="./fluxer_static/marketing/screenshots/desktop-1920w.png" alt="Fluxer app showcase" width="900">
<img src="./fluxer_static/marketing/screenshots/desktop-readme-1920w.png" alt="Fluxer app showcase" width="900">
</p>
+31 -1
View File
@@ -12573,6 +12573,15 @@
"bluesky": {"type": "boolean"}
},
"required": ["gif", "youtube", "bluesky"]
},
"deferred_phone_gate": {
"type": "object",
"properties": {
"enabled": {"type": "boolean"},
"window_hours": {"type": "number"},
"member_threshold": {"type": "number"}
},
"required": ["enabled", "window_hours", "member_threshold"]
}
},
"required": [
@@ -12583,7 +12592,8 @@
"premium_mode",
"services",
"services_resolved",
"services_available"
"services_available",
"deferred_phone_gate"
]
},
"integrations": {
@@ -13110,6 +13120,21 @@
"youtube_enabled": {"nullable": true, "type": "boolean"},
"bluesky_enabled": {"nullable": true, "type": "boolean"}
}
},
"deferred_phone_gate": {
"nullable": true,
"type": "object",
"properties": {
"enabled": {"type": "boolean"},
"window_hours": {"type": "number", "maximum": 8760, "minimum": 0, "exclusiveMinimum": true},
"member_threshold": {
"type": "integer",
"maximum": 1000000,
"format": "int32",
"minimum": 0,
"exclusiveMinimum": true
}
}
}
}
}
@@ -14879,6 +14904,10 @@
"premium_grace_ends_at": {"nullable": true, "type": "string"},
"premium_lifetime_sequence": {"nullable": true, "allOf": [{"$ref": "#/components/schemas/Int32Type"}]},
"suspicious_activity_flags": {"$ref": "#/components/schemas/SuspiciousActivityFlags"},
"phone_verification_deferred": {
"type": "boolean",
"description": "Whether a stored phone requirement is deferred until the user joins a discoverable or large community"
},
"temp_banned_until": {"nullable": true, "type": "string"},
"pending_deletion_at": {"nullable": true, "type": "string"},
"pending_bulk_message_deletion_at": {"nullable": true, "type": "string"},
@@ -14919,6 +14948,7 @@
"premium_grace_ends_at",
"premium_lifetime_sequence",
"suspicious_activity_flags",
"phone_verification_deferred",
"temp_banned_until",
"pending_deletion_at",
"pending_bulk_message_deletion_at",
+1
View File
@@ -69,6 +69,7 @@ mod tests {
"premium_grace_ends_at": null,
"premium_lifetime_sequence": null,
"suspicious_activity_flags": 0,
"phone_verification_deferred": false,
"temp_banned_until": null,
"pending_deletion_at": null,
"pending_bulk_message_deletion_at": null,
+2
View File
@@ -102,6 +102,8 @@ pub struct AdminUser {
#[serde(default)]
pub suspicious_activity_flags: i32,
#[serde(default)]
pub phone_verification_deferred: bool,
#[serde(default)]
pub has_totp: bool,
#[serde(default)]
pub authenticator_types: Vec<i32>,
@@ -37,6 +37,28 @@ pub struct InstancePolicyResponse {
pub services_resolved: InstanceServicesResolved,
#[serde(default)]
pub services_available: InstanceServicesAvailable,
#[serde(default)]
pub deferred_phone_gate: DeferredPhoneGateResponse,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct DeferredPhoneGateResponse {
#[serde(default)]
pub enabled: bool,
#[serde(default)]
pub window_hours: f64,
#[serde(default)]
pub member_threshold: i64,
}
impl Default for DeferredPhoneGateResponse {
fn default() -> Self {
Self {
enabled: true,
window_hours: 6.0,
member_threshold: 50,
}
}
}
impl Default for InstancePolicyResponse {
@@ -50,6 +72,7 @@ impl Default for InstancePolicyResponse {
services: InstanceServicesOverrides::default(),
services_resolved: InstanceServicesResolved::default(),
services_available: InstanceServicesAvailable::default(),
deferred_phone_gate: DeferredPhoneGateResponse::default(),
}
}
}
@@ -516,6 +539,18 @@ pub struct InstancePolicyUpdateRequest {
pub premium_mode: Option<PremiumMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub services: Option<InstanceServicesUpdateRequest>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deferred_phone_gate: Option<DeferredPhoneGateUpdateRequest>,
}
#[derive(Clone, Debug, Default, Serialize)]
pub struct DeferredPhoneGateUpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub window_hours: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub member_threshold: Option<i64>,
}
#[derive(Clone, Debug, Default, Serialize)]
+28 -1
View File
@@ -7,7 +7,7 @@ use crate::{
AppBrandingConfigUpdateRequest, AppLegalConfigUpdateRequest,
AppPublicConfigUpdateRequest, AppRegistrationConfigUpdateRequest,
AppSetupConfigUpdateRequest, CreateRegistrationUrlRequest,
GatewayRolloutConfigUpdateRequest, GatewayRolloutMode,
DeferredPhoneGateUpdateRequest, GatewayRolloutConfigUpdateRequest, GatewayRolloutMode,
InstanceAttachmentDecayUpdateRequest, InstanceBlueskyIntegrationUpdateRequest,
InstanceBlueskyKeyIntegrationUpdateRequest, InstanceCaptchaIntegrationUpdateRequest,
InstanceConfigUpdateRequest, InstanceEmailIntegrationUpdateRequest,
@@ -547,6 +547,7 @@ fn build_policy_update(form: &MultiValueForm) -> InstanceConfigUpdateRequest {
_ => None,
};
let services = build_services_update(form);
let deferred_phone_gate = build_deferred_phone_gate_update(form);
InstanceConfigUpdateRequest {
gateway_rollout: None,
registration: None,
@@ -558,12 +559,37 @@ fn build_policy_update(form: &MultiValueForm) -> InstanceConfigUpdateRequest {
direct_messages_disabled,
premium_mode,
services,
deferred_phone_gate,
}),
integrations: None,
media: None,
}
}
fn build_deferred_phone_gate_update(
form: &MultiValueForm,
) -> Option<DeferredPhoneGateUpdateRequest> {
let enabled = form
.first("policy_deferred_phone_gate_enabled")
.map(|value| value == "true");
let window_hours = form
.first("policy_deferred_phone_gate_window_hours")
.and_then(|value| value.parse::<f64>().ok())
.filter(|value| *value > 0.0);
let member_threshold = form
.first("policy_deferred_phone_gate_member_threshold")
.and_then(|value| value.parse::<i64>().ok())
.filter(|value| *value > 0);
if enabled.is_none() && window_hours.is_none() && member_threshold.is_none() {
return None;
}
Some(DeferredPhoneGateUpdateRequest {
enabled,
window_hours,
member_threshold,
})
}
fn build_services_update(form: &MultiValueForm) -> Option<InstanceServicesUpdateRequest> {
let parse_tristate = |key: &str| match form.first(key) {
Some("inherit") => Some(None),
@@ -712,6 +738,7 @@ fn build_single_community_update(enabled: bool) -> InstanceConfigUpdateRequest {
direct_messages_disabled: None,
premium_mode: None,
services: None,
deferred_phone_gate: None,
}),
integrations: None,
media: None,
@@ -103,6 +103,7 @@ pub fn instance_config_page(
instance_config.self_hosted,
))
(sso_config_section(base, csrf_token, &instance_config.sso))
(deferred_phone_gate_form(base, csrf_token, &instance_config.policy))
},
))
@if instance_config.self_hosted {
@@ -283,6 +284,57 @@ fn direct_messages_form(base: &str, csrf_token: &str, policy: &InstancePolicyRes
}
}
fn deferred_phone_gate_form(
base: &str,
csrf_token: &str,
policy: &InstancePolicyResponse,
) -> Markup {
let gate = &policy.deferred_phone_gate;
let status = if gate.enabled {
("Enabled", BadgeVariant::Success)
} else {
("Disabled", BadgeVariant::Default)
};
html! {
div class="space-y-4 border-t border-neutral-200 pt-6" {
div class="flex flex-wrap items-center gap-2" {
h3 class="text-sm font-semibold text-neutral-900" { "Deferred phone verification" }
(badge(status.0, status.1))
}
p class="text-sm text-neutral-500" {
"When enabled, a phone requirement raised at registration is held back and only \
applied if the account joins a discoverable community, or one above the member \
threshold, within the window. Accounts that wait out the window are not challenged. \
Inbound-SMS requirements are never deferred."
}
form method="post" action={(base) "/instance-config?action=update_policy"} {
(csrf_input(csrf_token))
div class="space-y-4" {
(select_input("policy_deferred_phone_gate_enabled", "Deferred phone verification", &[
("true", "Enabled"),
("false", "Disabled"),
], if gate.enabled { "true" } else { "false" }))
(text_input(
"policy_deferred_phone_gate_window_hours",
"Window (hours)",
&gate.window_hours.to_string(),
"6",
))
(text_input(
"policy_deferred_phone_gate_member_threshold",
"Member threshold",
&gate.member_threshold.to_string(),
"50",
))
(form_actions(html! {
(submit_button("Save deferred phone verification"))
}))
}
}
}
}
}
fn premium_mode_form(base: &str, csrf_token: &str, policy: &InstancePolicyResponse) -> Markup {
html! {
div class="space-y-4 border-t border-neutral-200 pt-6" {
@@ -291,6 +291,11 @@ fn flags_card(
can_update_suspicious,
Some(acl::USER_UPDATE_SUSPICIOUS_ACTIVITY),
))
@if user.phone_verification_deferred {
p class="text-sm text-amber-700 dark:text-amber-400" {
"Phone verification is deferred: the requirement above is stored but not enforced until this user joins a discoverable or large community within the deferral window."
}
}
}
}
}
+1
View File
@@ -898,6 +898,7 @@ fn user(id: &str, username: &str) -> Value {
"premium_grace_ends_at": null,
"premium_lifetime_sequence": null,
"suspicious_activity_flags": 0,
"phone_verification_deferred": false,
"has_totp": false,
"authenticator_types": [],
"has_verified_phone": false,
@@ -25,6 +25,7 @@
"premium_grace_ends_at": null,
"premium_lifetime_sequence": null,
"suspicious_activity_flags": 0,
"phone_verification_deferred": false,
"temp_banned_until": null,
"pending_deletion_at": null,
"pending_bulk_message_deletion_at": null,
@@ -26,6 +26,7 @@
"premium_grace_ends_at": null,
"premium_lifetime_sequence": null,
"suspicious_activity_flags": 0,
"phone_verification_deferred": false,
"temp_banned_until": null,
"pending_deletion_at": null,
"pending_bulk_message_deletion_at": null,
@@ -26,6 +26,7 @@
"premium_grace_ends_at": null,
"premium_lifetime_sequence": null,
"suspicious_activity_flags": 0,
"phone_verification_deferred": false,
"temp_banned_until": null,
"pending_deletion_at": null,
"pending_bulk_message_deletion_at": null,
@@ -742,6 +742,9 @@ class BillingAdminControllerService {
refundTarget,
subscription,
});
if (refundDecision.amountCents !== null && !refundTarget) {
throw new StripeError('No paid Stripe invoice with a refundable payment was found for this subscription');
}
const intentId = await this.billingRepository.actionIntents.create({
userId: BigInt(syncedTargetUser.id),
actorAdminId: BigInt(params.adminUserId),
@@ -758,10 +761,7 @@ class BillingAdminControllerService {
await this.billingRepository.actionIntents.markStage(intentId, 'sub_canceled', {
sub_canceled_at: new Date(),
});
if (refundDecision.amountCents !== null) {
if (!refundTarget) {
throw new StripeError('No paid Stripe invoice with a refundable payment was found for this subscription');
}
if (refundDecision.amountCents !== null && refundTarget) {
refund = await this.stripe.refunds.create(
{
...(refundTarget.paymentIntentId
@@ -100,6 +100,11 @@ async function buildInstanceConfigResponse(): Promise<InstanceConfigResponse> {
youtube_enabled: policy.youtube_enabled,
bluesky_enabled: policy.bluesky_enabled,
},
deferred_phone_gate: {
enabled: policy.deferred_phone_gate_enabled,
window_hours: policy.deferred_phone_gate_window_hours,
member_threshold: policy.deferred_phone_gate_member_threshold,
},
services_resolved: resolvedServices,
services_available: {
gif: integrations.gif.effective_available,
@@ -591,6 +596,17 @@ async function applyInstancePolicyUpdate(
patch.bluesky_enabled = policy.services.bluesky_enabled ?? null;
}
}
if (policy.deferred_phone_gate) {
if (policy.deferred_phone_gate.enabled !== undefined) {
patch.deferred_phone_gate_enabled = policy.deferred_phone_gate.enabled;
}
if (policy.deferred_phone_gate.window_hours !== undefined) {
patch.deferred_phone_gate_window_hours = policy.deferred_phone_gate.window_hours;
}
if (policy.deferred_phone_gate.member_threshold !== undefined) {
patch.deferred_phone_gate_member_threshold = policy.deferred_phone_gate.member_threshold;
}
}
if (Object.keys(patch).length > 0) {
await instanceConfigRepository.setInstancePolicyConfig(patch);
}
@@ -2,6 +2,7 @@
import dns from 'node:dns';
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
import {DEFERRED_PHONE_ON_COMMUNITY_JOIN} from '@fluxer/constants/src/UserConstants';
import type {UserAdminResponse} from '@fluxer/schema/src/domains/admin/AdminUserSchemas';
import type {ICacheService} from '@pkgs/cache/src/ICacheService';
import {formatGeoipLocation} from '@pkgs/geoip/src/GeoipLookup';
@@ -82,6 +83,7 @@ export async function mapUserToAdminResponse(
premium_grace_ends_at: user.premiumGraceEndsAt?.toISOString() ?? null,
premium_lifetime_sequence: user.premiumLifetimeSequence ?? null,
suspicious_activity_flags: user.suspiciousActivityFlags,
phone_verification_deferred: ((user.suspiciousActivityFlags ?? 0) & DEFERRED_PHONE_ON_COMMUNITY_JOIN) !== 0,
temp_banned_until: user.tempBannedUntil?.toISOString() ?? null,
pending_deletion_at: user.pendingDeletionAt?.toISOString() ?? null,
pending_bulk_message_deletion_at: user.pendingBulkMessageDeletionAt?.toISOString() ?? null,
@@ -2,7 +2,15 @@
import {AdminACLs} from '@fluxer/constants/src/AdminACLs';
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
import {SuspiciousActivityFlags, UserFlags} from '@fluxer/constants/src/UserConstants';
import {
ADMIN_PHONE_TOGGLE_CLEARABLE_FLAGS,
ALL_SUSPICIOUS_ACTIVITY_FLAGS,
DEFERRABLE_PHONE_FLAGS,
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
imposePhoneRequirements,
SuspiciousActivityFlags,
UserFlags,
} from '@fluxer/constants/src/UserConstants';
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
import {AccessDeniedError} from '@fluxer/errors/src/domains/core/AccessDeniedError';
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
@@ -31,6 +39,7 @@ import * as AuthMfa from '../../auth/AuthMfa';
import * as AuthSession from '../../auth/AuthSession';
import * as AuthUtility from '../../auth/AuthUtility';
import {createPasswordResetToken, createUserID, type UserID} from '../../BrandedTypes';
import type {UserRow} from '../../database/types/UserTypes';
import {Logger} from '../../Logger';
import type {IRiskHistoryRepository} from '../../risk/HistoricalOutcomeRepository';
import type {HistoricalOutcomeCode} from '../../risk/RiskHistoryTypes';
@@ -406,11 +415,14 @@ export class AdminUserSecurityService {
if (!user) {
throw new UnknownUserError();
}
const updatedUser = await userRepository.patchUpsert(
userId,
{has_verified_phone: data.has_verified_phone},
user.toRow(),
);
const phonePatch: Partial<UserRow> = {has_verified_phone: data.has_verified_phone};
if (data.has_verified_phone) {
const clearedFlags = (user.suspiciousActivityFlags ?? 0) & ~ADMIN_PHONE_TOGGLE_CLEARABLE_FLAGS;
if (clearedFlags !== (user.suspiciousActivityFlags ?? 0)) {
phonePatch.suspicious_activity_flags = clearedFlags;
}
}
const updatedUser = await userRepository.patchUpsert(userId, phonePatch, user.toRow());
await updatePropagator.propagateUserUpdate({userId, oldUser: user, updatedUser});
await auditService.createAuditLog({
adminUserId,
@@ -418,7 +430,15 @@ export class AdminUserSecurityService {
targetId: BigInt(userId),
action: 'update_has_verified_phone',
auditLogReason,
metadata: new Map([['has_verified_phone', String(data.has_verified_phone)]]),
metadata: new Map(
phonePatch.suspicious_activity_flags === undefined
? [['has_verified_phone', String(data.has_verified_phone)]]
: [
['has_verified_phone', String(data.has_verified_phone)],
['suspicious_activity_flags_before', String(user.suspiciousActivityFlags ?? 0)],
['suspicious_activity_flags_after', String(phonePatch.suspicious_activity_flags)],
],
),
});
return {
user: await mapUserToAdminResponse(updatedUser, cacheService, acls),
@@ -438,15 +458,24 @@ export class AdminUserSecurityService {
if (!user) {
throw new UnknownUserError();
}
const currentFlags = user.suspiciousActivityFlags ?? 0;
const keepsDeferral =
(currentFlags & DEFERRED_PHONE_ON_COMMUNITY_JOIN) !== 0 &&
(data.flags & DEFERRABLE_PHONE_FLAGS) !== 0 &&
(data.flags & DEFERRABLE_PHONE_FLAGS) === (currentFlags & DEFERRABLE_PHONE_FLAGS);
const newFlags = keepsDeferral ? data.flags | DEFERRED_PHONE_ON_COMMUNITY_JOIN : data.flags;
const updatedUser = await userRepository.patchUpsert(
userId,
{
suspicious_activity_flags: data.flags,
suspicious_activity_flags: newFlags,
},
user.toRow(),
);
await updatePropagator.propagateUserUpdate({userId, oldUser: user, updatedUser: updatedUser});
if ((user.suspiciousActivityFlags ?? 0) !== data.flags && data.flags !== 0) {
if (
(currentFlags & ALL_SUSPICIOUS_ACTIVITY_FLAGS) !== (newFlags & ALL_SUSPICIOUS_ACTIVITY_FLAGS) &&
(newFlags & ALL_SUSPICIOUS_ACTIVITY_FLAGS) !== 0
) {
await this.recordRiskOutcomes(userId, ['challenged'], 'admin_update_suspicious_activity_flags');
}
await auditService.createAuditLog({
@@ -600,7 +629,7 @@ export class AdminUserSecurityService {
throw new UnknownUserError();
}
const currentFlags = user.suspiciousActivityFlags ?? 0;
const newFlags = (currentFlags | addMask) & ~removeMask;
const newFlags = imposePhoneRequirements(currentFlags, addMask) & ~removeMask;
const updatedUser = await userRepository.patchUpsert(
userId,
{suspicious_activity_flags: newFlags},
@@ -43,6 +43,7 @@ export class AdminGuildMembershipService {
throw new UnknownUserError();
}
await guildService.members.addUserToGuild({
skipRiskGate: true,
userId,
guildId,
sendJoinMessage: true,
@@ -83,6 +84,7 @@ export class AdminGuildMembershipService {
try {
const userId = createUserID(userIdBigInt);
await guildService.members.addUserToGuild({
skipRiskGate: true,
userId,
guildId,
sendJoinMessage: false,
@@ -283,7 +283,7 @@ describe('Admin billing overview', () => {
invoices: {
[params.invoiceId]: {
customer: params.stripeCustomerId,
subscription: params.stripeSubscriptionId,
subscriptionId: params.stripeSubscriptionId,
amount_due: params.amountPaidCents,
amount_paid: params.amountPaidCents,
billing_reason: 'subscription_cycle',
@@ -359,7 +359,7 @@ describe('Admin billing overview', () => {
invoices: {
in_local_checkout_1: {
customer: stripeCustomerId,
subscription: 'sub_billing_target',
subscriptionId: 'sub_billing_target',
amount_due: 499,
amount_paid: 499,
billing_reason: 'subscription_create',
@@ -396,7 +396,7 @@ describe('Admin billing overview', () => {
},
in_renewal_1: {
customer: stripeCustomerId,
subscription: 'sub_billing_target',
subscriptionId: 'sub_billing_target',
amount_due: 499,
amount_paid: 499,
billing_reason: 'subscription_cycle',
@@ -545,7 +545,7 @@ describe('Admin billing overview', () => {
invoices: {
[invoiceId]: {
customer: stripeCustomerId,
subscription: stripeSubscriptionId,
subscriptionId: stripeSubscriptionId,
amount_due: 499,
amount_paid: 499,
billing_reason: 'subscription_create',
+2 -1
View File
@@ -39,6 +39,7 @@ import {
normalizePolicyContactDomain,
} from '../risk/AccountPolicyEvaluator';
import type {IRegistrationEventsRepository} from '../risk/adapters/VelocityAdapter';
import {deferPhoneFlagsUntilCommunityJoin} from '../risk/DeferredPhoneGate';
import type {IRiskHistoryRepository} from '../risk/HistoricalOutcomeRepository';
import type {IRiskAssessmentRepository} from '../risk/RiskAssessmentRepository';
import {deriveLatestRiskContext} from '../risk/RiskHistoryContext';
@@ -334,7 +335,7 @@ export async function register(
action: riskResult.recommendedAction,
},
});
const combinedFlags = policyDecision.flagBits;
const combinedFlags = await deferPhoneFlagsUntilCommunityJoin(policyDecision.flagBits);
const createdAt = new Date();
const riskContext = deriveLatestRiskContext({
userId: userId.toString(),
@@ -0,0 +1,211 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {DEFERRED_PHONE_ON_COMMUNITY_JOIN, SuspiciousActivityFlags} from '@fluxer/constants/src/UserConstants';
import type {GuildResponse} from '@fluxer/schema/src/domains/guild/GuildResponseSchemas';
import {afterAll, beforeAll, beforeEach, describe, expect, it} from 'vitest';
import {setInjectedRegistrationRiskEvaluator} from '../../middleware/ServiceMiddleware';
import {getInstanceConfigRepository} from '../../middleware/ServiceSingletons';
import {
RecommendedAction,
RiskConfidence,
RiskDecisionMethod,
RiskLevel,
type RiskLevel as RiskLevelType,
} from '../../risk/RiskTypes';
import type {ApiTestHarness} from '../../test/ApiTestHarness';
import {createBuilder, createBuilderWithoutAuth} from '../../test/TestRequestBuilder';
import type {IRegistrationRiskEvaluator} from '../services/IRegistrationRiskEvaluator';
import {
createAuthHarness,
createTestAccount,
createUniqueEmail,
createUniqueUsername,
loginAccount,
registerUser,
} from './AuthTestUtils';
function phoneRiskEvaluator(level: RiskLevelType, riskScore: number): IRegistrationRiskEvaluator {
return {
async evaluate() {
return {
level,
recommendedAction: RecommendedAction.RequireOutboundPhone,
assessment: {
suspicious: true,
level,
confidence: RiskConfidence.High,
riskScore,
reasoning: 'deferred phone gate test',
recommendedAction: RecommendedAction.RequireOutboundPhone,
method: RiskDecisionMethod.Noop,
modelUsed: 'test',
rounds: 0,
elapsedMs: 0,
signals: {},
},
};
},
};
}
async function createGuildWithInvite(harness: ApiTestHarness): Promise<{guildId: string; inviteCode: string}> {
let owner = await createTestAccount(harness);
await createBuilderWithoutAuth(harness)
.post(`/test/users/${owner.userId}/acls`)
.body({acls: ['*']})
.expect(200)
.execute();
owner = await loginAccount(harness, owner);
const guild = await createBuilder<GuildResponse>(harness, owner.token)
.post('/guilds')
.body({name: `PhoneGate-${Date.now()}`})
.execute();
const invite = await createBuilder<{code: string}>(harness, owner.token)
.post(`/channels/${guild.system_channel_id}`.concat('/invites'))
.body({max_uses: 0, max_age: 0, unique: false, temporary: false})
.execute();
return {guildId: guild.id, inviteCode: invite.code};
}
async function readFlags(userId: string): Promise<number> {
const {UserRepository} = await import('../../user/repositories/UserRepository');
const {createUserID} = await import('../../BrandedTypes');
const user = await new UserRepository().findUnique(createUserID(BigInt(userId)));
return user?.suspiciousActivityFlags ?? 0;
}
describe('Deferred phone verification gate', () => {
let harness: ApiTestHarness;
beforeAll(async () => {
harness = await createAuthHarness();
});
beforeEach(async () => {
setInjectedRegistrationRiskEvaluator(undefined);
await harness.reset();
});
afterAll(async () => {
setInjectedRegistrationRiskEvaluator(undefined);
await harness?.shutdown();
});
it('applies the phone requirement immediately while the gate is off', async () => {
await getInstanceConfigRepository().setInstancePolicyConfig({deferred_phone_gate_enabled: false});
setInjectedRegistrationRiskEvaluator(phoneRiskEvaluator(RiskLevel.High, 70));
const registration = await registerUser(harness, {
email: createUniqueEmail('gate-off'),
username: createUniqueUsername('gate_off'),
global_name: 'Gate Off',
password: 'StrongPassword!123',
date_of_birth: '2000-01-01',
consent: true,
});
const flags = await readFlags(registration.user_id);
expect(flags & SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE).not.toBe(0);
expect(flags & DEFERRED_PHONE_ON_COMMUNITY_JOIN).toBe(0);
});
it('defers the phone requirement at registration while the gate is on', async () => {
await getInstanceConfigRepository().setInstancePolicyConfig({deferred_phone_gate_enabled: true});
setInjectedRegistrationRiskEvaluator(phoneRiskEvaluator(RiskLevel.High, 70));
const registration = await registerUser(harness, {
email: createUniqueEmail('gate-on'),
username: createUniqueUsername('gate_on'),
global_name: 'Gate On',
password: 'StrongPassword!123',
date_of_birth: '2000-01-01',
consent: true,
});
const flags = await readFlags(registration.user_id);
expect(flags & DEFERRED_PHONE_ON_COMMUNITY_JOIN).not.toBe(0);
expect(flags & SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE).not.toBe(0);
const me = await createBuilder<{required_actions: Array<string>}>(harness, registration.token)
.get('/users/@me')
.expect(200)
.execute();
expect(me.required_actions ?? []).toEqual([]);
});
it('lets a deferred account join a small guild without being challenged', async () => {
await getInstanceConfigRepository().setInstancePolicyConfig({deferred_phone_gate_enabled: true});
const {guildId, inviteCode} = await createGuildWithInvite(harness);
setInjectedRegistrationRiskEvaluator(phoneRiskEvaluator(RiskLevel.High, 70));
const registration = await registerUser(harness, {
email: createUniqueEmail('gate-small'),
username: createUniqueUsername('gate_small'),
global_name: 'Gate Small',
password: 'StrongPassword!123',
date_of_birth: '2000-01-01',
consent: true,
});
setInjectedRegistrationRiskEvaluator(undefined);
await createBuilder(harness, registration.token).post(`/invites/${inviteCode}`).expect(200).execute();
const flags = await readFlags(registration.user_id);
expect(flags & DEFERRED_PHONE_ON_COMMUNITY_JOIN).not.toBe(0);
expect(guildId).toBeTruthy();
});
it('does not defer the inbound-SMS tier, which stays enforced from registration', async () => {
await getInstanceConfigRepository().setInstancePolicyConfig({deferred_phone_gate_enabled: true});
setInjectedRegistrationRiskEvaluator({
async evaluate() {
return {
level: RiskLevel.VeryHigh,
recommendedAction: RecommendedAction.RequireInboundPhone,
assessment: {
suspicious: true,
level: RiskLevel.VeryHigh,
confidence: RiskConfidence.High,
riskScore: 90,
reasoning: 'inbound tier',
recommendedAction: RecommendedAction.RequireInboundPhone,
method: RiskDecisionMethod.Noop,
modelUsed: 'test',
rounds: 0,
elapsedMs: 0,
signals: {},
},
};
},
});
const registration = await registerUser(harness, {
email: createUniqueEmail('gate-inbound'),
username: createUniqueUsername('gate_inbound'),
global_name: 'Gate Inbound',
password: 'StrongPassword!123',
date_of_birth: '2000-01-01',
consent: true,
});
const flags = await readFlags(registration.user_id);
expect(flags & DEFERRED_PHONE_ON_COMMUNITY_JOIN).toBe(0);
expect(flags & SuspiciousActivityFlags.REQUIRE_INBOUND_PHONE_VERIFICATION).not.toBe(0);
});
it('promotes the requirement and refuses the join on a qualifying guild inside the window', async () => {
await getInstanceConfigRepository().setInstancePolicyConfig({
deferred_phone_gate_enabled: true,
deferred_phone_gate_member_threshold: 1,
deferred_phone_gate_window_hours: 24,
});
const {inviteCode} = await createGuildWithInvite(harness);
const filler = await createTestAccount(harness);
await createBuilder(harness, filler.token).post(`/invites/${inviteCode}`).expect(200).execute();
setInjectedRegistrationRiskEvaluator(phoneRiskEvaluator(RiskLevel.High, 70));
const registration = await registerUser(harness, {
email: createUniqueEmail('gate-qualifying'),
username: createUniqueUsername('gate_qualifying'),
global_name: 'Gate Qualifying',
password: 'StrongPassword!123',
date_of_birth: '2000-01-01',
consent: true,
});
setInjectedRegistrationRiskEvaluator(undefined);
expect((await readFlags(registration.user_id)) & DEFERRED_PHONE_ON_COMMUNITY_JOIN).not.toBe(0);
await createBuilder(harness, registration.token).post(`/invites/${inviteCode}`).expect(403).execute();
const flags = await readFlags(registration.user_id);
expect(flags & DEFERRED_PHONE_ON_COMMUNITY_JOIN).toBe(0);
expect(flags & SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE).not.toBe(0);
});
});
@@ -324,7 +324,7 @@ describe('mapStripeInvoiceToRow', () => {
const inv = stripeFixture<Stripe.Invoice>({
id: 'in_1',
customer: 'cus_1',
subscription: 'sub_1',
parent: {type: 'subscription_details', subscription_details: {subscription: 'sub_1'}},
status: 'paid',
number: 'INV-001',
currency: 'usd',
@@ -94,28 +94,6 @@ export interface StripeSubscriptionPayload {
trial_start?: number | null;
}
interface StripeInvoiceCompatibility extends Stripe.Invoice {
subscription?: StripeExpandableId;
tax?: number | null;
application_fee_amount?: number | null;
}
interface StripePaymentIntentCompatibility extends Stripe.PaymentIntent {
invoice?: StripeExpandableId;
}
interface StripeChargeCompatibility extends Stripe.Charge {
invoice?: StripeExpandableId;
}
type StripeRefundCompatibility = Stripe.Refund & {
livemode?: boolean | null;
};
interface StripeCheckoutSessionCompatibility extends Stripe.Checkout.Session {
completed_at?: number | null;
}
function createBillingSubscriptionItemValue(
itemId: string,
priceId: string,
@@ -280,6 +258,14 @@ export function computeStripeUpdatedAt(
return new Date(max * 1000);
}
function sumInvoiceTotalTaxes(inv: Stripe.Invoice): bigint | null {
const taxes = inv.total_taxes ?? null;
if (taxes === null) {
return null;
}
return BigInt(taxes.reduce((total, tax) => total + (tax.amount ?? 0), 0));
}
function idOf(
ref:
| string
@@ -689,9 +675,7 @@ export function mapStripeInvoiceToRow(
throw new BillingMappingError('Invoice is missing customer', inv.id);
}
const now = new Date();
const invoice = inv as StripeInvoiceCompatibility;
const subscriptionId =
idOf(invoice.subscription ?? null) ?? idOf(invoice.parent?.subscription_details?.subscription ?? null);
const subscriptionId = idOf(inv.parent?.subscription_details?.subscription ?? null);
const userIdFromMetadata = parseUserIdFromMetadata(inv.metadata);
const userId = hints?.knownUserId ?? userIdFromMetadata;
const transitions = inv.status_transitions ?? null;
@@ -718,12 +702,11 @@ export function mapStripeInvoiceToRow(
amount_paid: typeof inv.amount_paid === 'number' ? BigInt(inv.amount_paid) : null,
amount_remaining: typeof inv.amount_remaining === 'number' ? BigInt(inv.amount_remaining) : null,
subtotal: typeof inv.subtotal === 'number' ? BigInt(inv.subtotal) : null,
tax: typeof invoice.tax === 'number' ? BigInt(invoice.tax) : null,
tax: sumInvoiceTotalTaxes(inv),
total: typeof inv.total === 'number' ? BigInt(inv.total) : null,
starting_balance: typeof inv.starting_balance === 'number' ? BigInt(inv.starting_balance) : null,
ending_balance: typeof inv.ending_balance === 'number' ? BigInt(inv.ending_balance) : null,
application_fee_amount:
typeof invoice.application_fee_amount === 'number' ? BigInt(invoice.application_fee_amount) : null,
application_fee_amount: null,
attempt_count: inv.attempt_count ?? null,
attempted: inv.attempted ?? null,
auto_advance: inv.auto_advance ?? null,
@@ -818,7 +801,6 @@ export function mapStripePaymentIntentToRow(pi: Stripe.PaymentIntent): {
throw new BillingMappingError('PaymentIntent is missing id');
}
const now = new Date();
const paymentIntent = pi as StripePaymentIntentCompatibility;
const customerId = idOf(
pi.customer as
| string
@@ -828,7 +810,7 @@ export function mapStripePaymentIntentToRow(pi: Stripe.PaymentIntent): {
| null
| undefined,
);
const invoiceId = idOf(paymentIntent.invoice ?? null);
const invoiceId = null;
const paymentMethodId = idOf(
pi.payment_method as
| string
@@ -892,7 +874,6 @@ export function mapStripeChargeToRow(c: Stripe.Charge): {
throw new BillingMappingError('Charge is missing id');
}
const now = new Date();
const charge = c as StripeChargeCompatibility;
const customerId = idOf(
c.customer as
| string
@@ -911,7 +892,7 @@ export function mapStripeChargeToRow(c: Stripe.Charge): {
| null
| undefined,
);
const invoiceId = idOf(charge.invoice ?? null);
const invoiceId = null;
const paymentMethodId = c.payment_method ?? null;
const card = c.payment_method_details?.card ?? null;
const billingDetails = c.billing_details ?? null;
@@ -974,6 +955,7 @@ export function mapStripeRefundToRow(
invoiceId?: string;
customerId?: string;
userId?: bigint;
livemode?: boolean;
},
): {
primary: BillingRefundRow;
@@ -990,7 +972,6 @@ export function mapStripeRefundToRow(
const invoiceId = hints?.invoiceId ?? null;
const customerId = hints?.customerId ?? null;
const userId = hints?.userId ?? null;
const refund = r as StripeRefundCompatibility;
const primary: BillingRefundRow = {
provider_id: r.id,
charge_id: chargeId,
@@ -1005,7 +986,7 @@ export function mapStripeRefundToRow(
receipt_number: r.receipt_number ?? null,
failure_reason: r.failure_reason ?? null,
description: r.description ?? null,
livemode: refund.livemode ?? null,
livemode: hints?.livemode ?? null,
metadata: safeMetadata(r.metadata),
stripe_created_at: unixToDate(r.created),
stripe_updated_at: computeStripeUpdatedAt({created: r.created}),
@@ -1049,16 +1030,17 @@ export function mapStripeCheckoutSessionToRow(
cs: Stripe.Checkout.Session,
hints?: {
knownUserId?: bigint;
eventCreated?: number;
},
): {
primary: BillingCheckoutSessionRow;
byCustomer: BillingCheckoutSessionByCustomerRow | null;
} {
const completedAt = cs.status === 'complete' ? (hints?.eventCreated ?? null) : null;
if (!cs.id) {
throw new BillingMappingError('Checkout session is missing id');
}
const now = new Date();
const checkoutSession = cs as StripeCheckoutSessionCompatibility;
const customerId = idOf(
cs.customer as
| string
@@ -1124,14 +1106,14 @@ export function mapStripeCheckoutSessionToRow(
amount_total: typeof cs.amount_total === 'number' ? BigInt(cs.amount_total) : null,
currency: cs.currency ?? null,
expires_at: unixToDate(cs.expires_at),
completed_at: unixToDate(checkoutSession.completed_at ?? null),
completed_at: completedAt === null ? null : unixToDate(completedAt),
livemode: cs.livemode ?? null,
client_reference_id: cs.client_reference_id ?? null,
metadata: safeMetadata(cs.metadata),
stripe_created_at: unixToDate(cs.created),
stripe_updated_at: computeStripeUpdatedAt({
created: cs.created,
completed_at: checkoutSession.completed_at ?? null,
completed_at: completedAt,
}),
mirrored_at: now,
} as BillingCheckoutSessionRow;
@@ -49,6 +49,7 @@ export class BillingCheckoutSessionRepository {
cs: Stripe.Checkout.Session,
hints?: {
knownUserId?: bigint;
eventCreated?: number;
},
): Promise<{
changed: boolean;
@@ -71,6 +71,7 @@ export class BillingRefundRepository {
invoiceId?: string;
customerId?: string;
userId?: bigint;
livemode?: boolean;
},
): Promise<{
changed: boolean;
@@ -104,6 +104,7 @@ export function GuildDiscoveryController(app: HonoApp) {
app.post(
'/discovery/guilds/:guild_id/join',
RateLimitMiddleware(RateLimitConfigs.DISCOVERY_JOIN),
LoginRequired,
DefaultUserOnly,
Validator('param', GuildIdParam),
OpenAPI({
@@ -319,6 +319,7 @@ export class GuildMemberService {
sendJoinMessage?: boolean;
skipGuildLimitCheck?: boolean;
skipBanCheck?: boolean;
skipRiskGate?: boolean;
isTemporary?: boolean;
joinSourceType?: JoinSourceType;
sourceInviteCode?: InviteCode;
@@ -2,10 +2,17 @@
import {AuditLogActionType} from '@fluxer/constants/src/AuditLogActionType';
import {Permissions} from '@fluxer/constants/src/ChannelConstants';
import {type JoinSourceType, JoinSourceTypes, SystemChannelFlags} from '@fluxer/constants/src/GuildConstants';
import {
GuildFeatures,
type JoinSourceType,
JoinSourceTypes,
SystemChannelFlags,
} from '@fluxer/constants/src/GuildConstants';
import {
DEFAULT_GUILD_FOLDER_ICON,
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
type MentionReplyPreference,
PHONE_REQUIREMENT_FLAGS,
UserNotificationSettings,
} from '@fluxer/constants/src/UserConstants';
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
@@ -17,10 +24,12 @@ import {MaxGuildsError} from '@fluxer/errors/src/domains/guild/MaxGuildsError';
import {UnknownGuildError} from '@fluxer/errors/src/domains/guild/UnknownGuildError';
import {UnknownGuildMemberError} from '@fluxer/errors/src/domains/guild/UnknownGuildMemberError';
import {CommunicationDisabledError} from '@fluxer/errors/src/domains/moderation/CommunicationDisabledError';
import {AccountSuspiciousActivityError} from '@fluxer/errors/src/domains/user/AccountSuspiciousActivityError';
import {UserNotInVoiceError} from '@fluxer/errors/src/domains/user/UserNotInVoiceError';
import {DEFAULT_STOCK_LIMITS} from '@fluxer/limits/src/LimitDefaults';
import type {GuildMemberResponse} from '@fluxer/schema/src/domains/guild/GuildMemberSchemas';
import type {GuildMemberUpdateRequest} from '@fluxer/schema/src/domains/guild/GuildRequestSchemas';
import {snowflakeToDate} from '@fluxer/snowflake/src/Snowflake';
import type {IRateLimitService} from '@pkgs/rate_limit/src/IRateLimitService';
import {ms} from 'itty-time';
import {requireEmailVerified} from '../../../auth/EmailVerificationUtils';
@@ -38,13 +47,24 @@ import {resolveLimitSafe} from '../../../limits/LimitConfigUtils';
import {createLimitMatchContext} from '../../../limits/LimitMatchContextBuilder';
import {profileSubstringBlocklistCache} from '../../../middleware/ProfileSubstringBlocklistCache';
import type {RequestCache} from '../../../middleware/RequestCacheMiddleware';
import type {Guild} from '../../../models/Guild';
import type {GuildMember} from '../../../models/GuildMember';
import type {User} from '../../../models/User';
import type {UserGuildSettings} from '../../../models/UserGuildSettings';
import type {UserSettings} from '../../../models/UserSettings';
import {
DEFAULT_PHONE_GATE_MEMBER_THRESHOLD,
evaluateDeferredPhoneGate,
getDeferredPhoneGateConfig,
guildTriggersPhoneGate,
} from '../../../risk/DeferredPhoneGate';
import type {IUserRepository} from '../../../user/IUserRepository';
import {isProfileSubstringExempt} from '../../../user/UserHelpers';
import {mapUserGuildSettingsToResponse, mapUserSettingsToResponse} from '../../../user/UserMappers';
import {getEffectiveSuspiciousFlags, isProfileSubstringExempt} from '../../../user/UserHelpers';
import {
mapUserGuildSettingsToResponse,
mapUserSettingsToResponse,
mapUserToPrivateResponse,
} from '../../../user/UserMappers';
import {addGuildToUncategorizedFolder, removeGuildFromUserFolders} from '../../../user/utils/GuildFolderUtils';
import type {GuildAuditLogService} from '../../GuildAuditLogService';
import type {GuildAuditLogChange} from '../../GuildAuditLogTypes';
@@ -374,6 +394,68 @@ export class GuildMemberOperationsService {
await this.gatewayService.leaveGuild({userId: targetId, guildId});
}
private async applyDeferredPhoneGate(user: User, guild: Guild): Promise<void> {
if (user.hasVerifiedPhone) {
return;
}
const rawFlags = user.suspiciousActivityFlags ?? 0;
if ((rawFlags & (DEFERRED_PHONE_ON_COMMUNITY_JOIN | PHONE_REQUIREMENT_FLAGS)) === 0) {
return;
}
const {status, config} = await getDeferredPhoneGateConfig();
const logContext = {
userId: user.id.toString(),
guildId: guild.id.toString(),
discoverable: guild.features.has(GuildFeatures.DISCOVERABLE),
memberCount: guild.memberCount,
accountAgeMs: Date.now() - snowflakeToDate(BigInt(user.id)).getTime(),
};
if (status !== 'ok') {
const undeferredFlags = getEffectiveSuspiciousFlags({
...user,
suspiciousActivityFlags: rawFlags & ~DEFERRED_PHONE_ON_COMMUNITY_JOIN,
} as User);
if (
(undeferredFlags & PHONE_REQUIREMENT_FLAGS) === 0 ||
!guildTriggersPhoneGate(guild, DEFAULT_PHONE_GATE_MEMBER_THRESHOLD)
) {
return;
}
Logger.info(logContext, `deferred_phone_gate.enforced_while_${status}`);
throw new AccountSuspiciousActivityError(undeferredFlags);
}
const liveFlags = getEffectiveSuspiciousFlags(user);
if ((liveFlags & PHONE_REQUIREMENT_FLAGS) !== 0) {
if (!guildTriggersPhoneGate(guild, config.memberThreshold)) {
return;
}
Logger.info(logContext, 'deferred_phone_gate.blocked_unsatisfied_phone_requirement');
throw new AccountSuspiciousActivityError(liveFlags);
}
const outcome = evaluateDeferredPhoneGate(user, guild, config, Date.now());
if (!outcome.applies) {
Logger.info(logContext, `deferred_phone_gate.skipped_${outcome.reason}`);
return;
}
const promotedFlags = getEffectiveSuspiciousFlags({...user, suspiciousActivityFlags: outcome.flags} as User);
if (promotedFlags === 0) {
Logger.info(logContext, 'deferred_phone_gate.skipped_unenforceable');
return;
}
const updatedUser = await this.userRepository.patchUpsert(
user.id,
{suspicious_activity_flags: outcome.flags},
user.toRow(),
);
await this.gatewayService.dispatchPresence({
userId: user.id,
event: 'USER_UPDATE',
data: mapUserToPrivateResponse(updatedUser),
});
Logger.info(logContext, 'deferred_phone_gate.applied');
throw new AccountSuspiciousActivityError(promotedFlags);
}
async addUserToGuild(
params: {
userId: UserID;
@@ -381,6 +463,7 @@ export class GuildMemberOperationsService {
sendJoinMessage?: boolean;
skipGuildLimitCheck?: boolean;
skipBanCheck?: boolean;
skipRiskGate?: boolean;
isTemporary?: boolean;
joinSourceType?: JoinSourceType;
sourceInviteCode?: InviteCode;
@@ -398,6 +481,7 @@ export class GuildMemberOperationsService {
sendJoinMessage = true,
skipGuildLimitCheck = false,
skipBanCheck = false,
skipRiskGate = false,
isTemporary = false,
joinSourceType = JoinSourceTypes.INSTANT_INVITE,
sourceInviteCode = null,
@@ -418,6 +502,9 @@ export class GuildMemberOperationsService {
if (!skipGuildLimitCheck) {
await this.enforceGuildLimit(user, userGuildsCount);
}
if (!skipRiskGate && !user.isBot) {
await this.applyDeferredPhoneGate(user, guild);
}
const maxGuildMembers = resolveMaxGuildMembersLimit({
guildFeatures: guild.features,
snapshot: this.limitConfigService.getConfigSnapshot(),
@@ -13,6 +13,7 @@ import {sanitizeLimitConfigForInstance} from '../constants/LimitConfig';
import {fetchMany, fetchOne, upsertOne} from '../database/CassandraQueryExecution';
import type {InstanceConfigurationRow} from '../database/types/InstanceConfigTypes';
import {Logger} from '../Logger';
import {resolveDeferredPhoneGateEnabled, setCachedDeferredPhoneGateEnabled} from '../risk/DeferredPhoneGateCache';
import {InstanceConfiguration} from '../Tables';
import {DEFAULT_DECAY_CONSTANTS, DEFAULT_RENEWAL_CONSTANTS} from '../utils/AttachmentDecay';
import {isJsonRecord, parseJsonArray, parseJsonRecord} from '../utils/JsonBoundaryUtils';
@@ -84,6 +85,9 @@ export interface InstancePolicyConfig {
gif_enabled: boolean | null;
youtube_enabled: boolean | null;
bluesky_enabled: boolean | null;
deferred_phone_gate_enabled: boolean;
deferred_phone_gate_window_hours: number;
deferred_phone_gate_member_threshold: number;
}
interface InstanceCommunityPublicConfig {
@@ -402,6 +406,9 @@ const DEFAULT_INSTANCE_POLICY_CONFIG: InstancePolicyConfig = {
gif_enabled: null,
youtube_enabled: null,
bluesky_enabled: null,
deferred_phone_gate_enabled: false,
deferred_phone_gate_window_hours: 6,
deferred_phone_gate_member_threshold: 50,
};
function isPremiumMode(value: unknown): value is InstancePremiumMode {
@@ -412,6 +419,13 @@ function normalizeNullableBoolean(value: unknown): boolean | null {
return typeof value === 'boolean' ? value : null;
}
function normalizePositiveNumber(value: unknown, fallback: number): number {
if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
return fallback;
}
return value;
}
function normalizeInstancePolicyConfig(value: unknown): InstancePolicyConfig {
if (!isJsonRecord(value)) {
return {...DEFAULT_INSTANCE_POLICY_CONFIG};
@@ -425,6 +439,15 @@ function normalizeInstancePolicyConfig(value: unknown): InstancePolicyConfig {
gif_enabled: normalizeNullableBoolean(value.gif_enabled),
youtube_enabled: normalizeNullableBoolean(value.youtube_enabled),
bluesky_enabled: normalizeNullableBoolean(value.bluesky_enabled),
deferred_phone_gate_enabled: value.deferred_phone_gate_enabled === true,
deferred_phone_gate_window_hours: normalizePositiveNumber(
value.deferred_phone_gate_window_hours,
DEFAULT_INSTANCE_POLICY_CONFIG.deferred_phone_gate_window_hours,
),
deferred_phone_gate_member_threshold: normalizePositiveNumber(
value.deferred_phone_gate_member_threshold,
DEFAULT_INSTANCE_POLICY_CONFIG.deferred_phone_gate_member_threshold,
),
};
}
@@ -913,12 +936,18 @@ export class InstanceConfigRepository {
this.refreshRequested = false;
this.configCache = await this.fetchAllConfigsFromDatabase();
} while (this.refreshRequested);
this.syncDeferredPhoneGateCache(this.configCache.get(INSTANCE_POLICY_CONFIG_KEY) ?? null);
})().finally(() => {
this.refreshPromise = null;
});
await this.refreshPromise;
}
private syncDeferredPhoneGateCache(raw: string | null): void {
const policy = raw ? normalizeInstancePolicyConfig(parseJsonRecord(raw)) : {...DEFAULT_INSTANCE_POLICY_CONFIG};
setCachedDeferredPhoneGateEnabled(resolveDeferredPhoneGateEnabled(policy));
}
private updateCachedConfigs(entries: Array<[string, string]>): void {
if (!this.configCache) {
return;
@@ -1079,16 +1108,16 @@ export class InstanceConfigRepository {
async getInstancePolicyConfig(): Promise<InstancePolicyConfig> {
const raw = await this.getConfig(INSTANCE_POLICY_CONFIG_KEY);
if (!raw) {
return {...DEFAULT_INSTANCE_POLICY_CONFIG};
}
return normalizeInstancePolicyConfig(parseJsonRecord(raw));
const policy = raw ? normalizeInstancePolicyConfig(parseJsonRecord(raw)) : {...DEFAULT_INSTANCE_POLICY_CONFIG};
setCachedDeferredPhoneGateEnabled(resolveDeferredPhoneGateEnabled(policy));
return policy;
}
async setInstancePolicyConfig(config: Partial<InstancePolicyConfig>): Promise<InstancePolicyConfig> {
const current = await this.getInstancePolicyConfig();
const next = normalizeInstancePolicyConfig({...current, ...config});
await this.setConfig(INSTANCE_POLICY_CONFIG_KEY, JSON.stringify(next));
setCachedDeferredPhoneGateEnabled(resolveDeferredPhoneGateEnabled(next));
return next;
}
@@ -35,6 +35,7 @@ export class SingleCommunityService {
}
try {
await this.guildMemberService.addUserToGuild({
skipRiskGate: true,
userId,
guildId,
skipGuildLimitCheck: true,
@@ -69,7 +69,8 @@ export class LimitConfigService {
}
async refreshCache(): Promise<void> {
this.premiumMode = (await this.repository.getInstancePolicyConfig()).premium_mode;
const policyConfig = await this.repository.getInstancePolicyConfig();
this.premiumMode = policyConfig.premium_mode;
setCachedInstancePremiumMode(this.premiumMode);
const currentHash = computeDefaultsHash();
const lockToken = await this.cacheService.acquireLock(LIMIT_CONFIG_REFRESH_LOCK_KEY, 10);
@@ -273,6 +273,7 @@ export class OAuth2RequestService {
}
}
await this.guildService.members.addUserToGuild({
skipRiskGate: true,
userId: botUserId,
guildId,
skipGuildLimitCheck: true,
@@ -0,0 +1,154 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {GuildFeatures} from '@fluxer/constants/src/GuildConstants';
import {DEFERRED_PHONE_ON_COMMUNITY_JOIN, SuspiciousActivityFlags} from '@fluxer/constants/src/UserConstants';
import {snowflakeToDate} from '@fluxer/snowflake/src/Snowflake';
import {ms} from 'itty-time';
import {describe, expect, it} from 'vitest';
import type {Guild} from '../models/Guild';
import type {User} from '../models/User';
import {type DeferredPhoneGateConfig, evaluateDeferredPhoneGate, guildTriggersPhoneGate} from './DeferredPhoneGate';
import {resolveDeferredPhoneGateEnabled} from './DeferredPhoneGateCache';
const CONFIG: DeferredPhoneGateConfig = {
enabled: true,
windowMs: 6 * ms('1 hour'),
memberThreshold: 50,
};
const USER_SNOWFLAKE = 1485046297690587136n;
const REGISTERED_AT = snowflakeToDate(USER_SNOWFLAKE).getTime();
function createUser(overrides: Partial<Pick<User, 'hasVerifiedPhone' | 'suspiciousActivityFlags'>> = {}): User {
return {
id: USER_SNOWFLAKE,
hasVerifiedPhone: false,
suspiciousActivityFlags: SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE | DEFERRED_PHONE_ON_COMMUNITY_JOIN,
...overrides,
} as unknown as User;
}
function createGuild(overrides: {discoverable?: boolean; memberCount?: number} = {}): Guild {
return {
id: 1n,
features: new Set(overrides.discoverable ? [GuildFeatures.DISCOVERABLE] : []),
memberCount: overrides.memberCount ?? 10,
} as unknown as Guild;
}
describe('evaluateDeferredPhoneGate', () => {
it('applies to a discoverable guild inside the window, promoting the real phone flags', () => {
const outcome = evaluateDeferredPhoneGate(
createUser(),
createGuild({discoverable: true, memberCount: 3}),
CONFIG,
REGISTERED_AT + ms('1 hour'),
);
expect(outcome.applies).toBe(true);
if (!outcome.applies) return;
expect(outcome.flags & DEFERRED_PHONE_ON_COMMUNITY_JOIN).toBe(0);
expect(outcome.flags & SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE).not.toBe(0);
});
it('applies to a large non-discoverable guild inside the window', () => {
const outcome = evaluateDeferredPhoneGate(
createUser(),
createGuild({memberCount: 51}),
CONFIG,
REGISTERED_AT + ms('1 hour'),
);
expect(outcome.applies).toBe(true);
});
it('does not apply to a small non-discoverable guild', () => {
const outcome = evaluateDeferredPhoneGate(
createUser(),
createGuild({memberCount: 50}),
CONFIG,
REGISTERED_AT + ms('1 hour'),
);
expect(outcome).toEqual({applies: false, reason: 'guild_below_threshold'});
});
it('applies on the last millisecond inside the window', () => {
const outcome = evaluateDeferredPhoneGate(
createUser(),
createGuild({discoverable: true}),
CONFIG,
REGISTERED_AT + CONFIG.windowMs - 1,
);
expect(outcome.applies).toBe(true);
});
it('does not gate once the window has elapsed, and mutates nothing', () => {
const outcome = evaluateDeferredPhoneGate(
createUser(),
createGuild({discoverable: true}),
CONFIG,
REGISTERED_AT + CONFIG.windowMs,
);
expect(outcome).toEqual({applies: false, reason: 'outside_window'});
});
it('is inert while the gate is disabled, even on a qualifying guild', () => {
const outcome = evaluateDeferredPhoneGate(
createUser(),
createGuild({discoverable: true}),
{...CONFIG, enabled: false},
REGISTERED_AT + ms('1 hour'),
);
expect(outcome).toEqual({applies: false, reason: 'gate_disabled'});
});
it('does not apply to a user who already has a verified phone', () => {
const outcome = evaluateDeferredPhoneGate(
createUser({hasVerifiedPhone: true}),
createGuild({discoverable: true}),
CONFIG,
REGISTERED_AT + ms('1 hour'),
);
expect(outcome).toEqual({applies: false, reason: 'already_verified'});
});
it('preserves non-phone requirements when promoting', () => {
const outcome = evaluateDeferredPhoneGate(
createUser({
suspiciousActivityFlags:
SuspiciousActivityFlags.REQUIRE_VERIFIED_EMAIL |
SuspiciousActivityFlags.REQUIRE_INBOUND_PHONE_VERIFICATION |
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
}),
createGuild({discoverable: true}),
CONFIG,
REGISTERED_AT + ms('1 hour'),
);
expect(outcome.applies).toBe(true);
if (!outcome.applies) return;
expect(outcome.flags).toBe(
SuspiciousActivityFlags.REQUIRE_VERIFIED_EMAIL | SuspiciousActivityFlags.REQUIRE_INBOUND_PHONE_VERIFICATION,
);
});
});
describe('resolveDeferredPhoneGateEnabled', () => {
it('is on only when the tunable is set and the instance is not single-community', () => {
expect(resolveDeferredPhoneGateEnabled({deferred_phone_gate_enabled: true, single_community_enabled: false})).toBe(
true,
);
expect(resolveDeferredPhoneGateEnabled({deferred_phone_gate_enabled: true, single_community_enabled: true})).toBe(
false,
);
expect(resolveDeferredPhoneGateEnabled({deferred_phone_gate_enabled: false, single_community_enabled: false})).toBe(
false,
);
});
});
describe('guildTriggersPhoneGate', () => {
it('qualifies a discoverable guild regardless of size', () => {
expect(guildTriggersPhoneGate(createGuild({discoverable: true, memberCount: 1}), 50)).toBe(true);
});
it('qualifies a guild strictly above the member threshold', () => {
expect(guildTriggersPhoneGate(createGuild({memberCount: 51}), 50)).toBe(true);
expect(guildTriggersPhoneGate(createGuild({memberCount: 50}), 50)).toBe(false);
});
});
@@ -0,0 +1,94 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {GuildFeatures} from '@fluxer/constants/src/GuildConstants';
import {
DEFERRABLE_PHONE_FLAGS,
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
NEVER_DEFERRABLE_PHONE_FLAGS,
} from '@fluxer/constants/src/UserConstants';
import {snowflakeToDate} from '@fluxer/snowflake/src/Snowflake';
import {ms} from 'itty-time';
import {Logger} from '../Logger';
import {getInstanceConfigRepository} from '../middleware/ServiceSingletons';
import type {Guild} from '../models/Guild';
import type {User} from '../models/User';
import {resolveDeferredPhoneGateEnabled} from './DeferredPhoneGateCache';
export interface DeferredPhoneGateConfig {
enabled: boolean;
windowMs: number;
memberThreshold: number;
}
export const DEFAULT_PHONE_GATE_MEMBER_THRESHOLD = 50;
const DISABLED_CONFIG: DeferredPhoneGateConfig = {
enabled: false,
windowMs: Number.POSITIVE_INFINITY,
memberThreshold: Number.POSITIVE_INFINITY,
};
type DeferredPhoneGateConfigResult =
| {status: 'ok'; config: DeferredPhoneGateConfig}
| {status: 'disabled'; config: DeferredPhoneGateConfig}
| {status: 'unreadable'; config: DeferredPhoneGateConfig};
export async function getDeferredPhoneGateConfig(): Promise<DeferredPhoneGateConfigResult> {
try {
const policy = await getInstanceConfigRepository().getInstancePolicyConfig();
if (!resolveDeferredPhoneGateEnabled(policy)) {
return {status: 'disabled', config: DISABLED_CONFIG};
}
return {
status: 'ok',
config: {
enabled: true,
windowMs: policy.deferred_phone_gate_window_hours * ms('1 hour'),
memberThreshold: policy.deferred_phone_gate_member_threshold,
},
};
} catch (error) {
Logger.warn({error}, 'Failed to read deferred phone gate config');
return {status: 'unreadable', config: DISABLED_CONFIG};
}
}
export async function deferPhoneFlagsUntilCommunityJoin(flagBits: number): Promise<number> {
if ((flagBits & DEFERRABLE_PHONE_FLAGS) === 0 || (flagBits & NEVER_DEFERRABLE_PHONE_FLAGS) !== 0) {
return flagBits;
}
const {status} = await getDeferredPhoneGateConfig();
if (status !== 'ok') {
return flagBits;
}
return flagBits | DEFERRED_PHONE_ON_COMMUNITY_JOIN;
}
export function guildTriggersPhoneGate(guild: Guild, memberThreshold: number): boolean {
return guild.features.has(GuildFeatures.DISCOVERABLE) || guild.memberCount > memberThreshold;
}
type DeferredPhoneGateOutcome =
| {applies: false; reason: 'gate_disabled' | 'already_verified' | 'guild_below_threshold' | 'outside_window'}
| {applies: true; flags: number};
export function evaluateDeferredPhoneGate(
user: User,
guild: Guild,
config: DeferredPhoneGateConfig,
now: number,
): DeferredPhoneGateOutcome {
if (!config.enabled) {
return {applies: false, reason: 'gate_disabled'};
}
if (user.hasVerifiedPhone) {
return {applies: false, reason: 'already_verified'};
}
if (!guildTriggersPhoneGate(guild, config.memberThreshold)) {
return {applies: false, reason: 'guild_below_threshold'};
}
if (now - snowflakeToDate(BigInt(user.id)).getTime() >= config.windowMs) {
return {applies: false, reason: 'outside_window'};
}
return {applies: true, flags: (user.suspiciousActivityFlags ?? 0) & ~DEFERRED_PHONE_ON_COMMUNITY_JOIN};
}
@@ -0,0 +1,18 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
let cachedEnabled = false;
export function resolveDeferredPhoneGateEnabled(policy: {
deferred_phone_gate_enabled: boolean;
single_community_enabled: boolean;
}): boolean {
return policy.deferred_phone_gate_enabled && !policy.single_community_enabled;
}
export function getCachedDeferredPhoneGateEnabled(): boolean {
return cachedEnabled;
}
export function setCachedDeferredPhoneGateEnabled(enabled: boolean): void {
cachedEnabled = enabled;
}
@@ -1,6 +1,12 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {PremiumFlags, SuspiciousActivityFlags, UserFlags} from '@fluxer/constants/src/UserConstants';
import {
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
imposePhoneRequirements,
PremiumFlags,
SuspiciousActivityFlags,
UserFlags,
} from '@fluxer/constants/src/UserConstants';
import type {RpcSessionTimings} from '@fluxer/schema/src/domains/rpc/RpcSchemas';
import {Config} from '../Config';
import type {UserRow} from '../database/types/UserTypes';
@@ -370,12 +376,14 @@ export class RpcSessionStartService {
timeRpcStepSync(
timingSteps,
'check_required_inbound_phone_flags_already_set',
() => (user.suspiciousActivityFlags & requiredFlags) === requiredFlags,
() =>
(user.suspiciousActivityFlags & requiredFlags) === requiredFlags &&
(user.suspiciousActivityFlags & DEFERRED_PHONE_ON_COMMUNITY_JOIN) === 0,
)
) {
return null;
}
const newFlags = user.suspiciousActivityFlags | requiredFlags;
const newFlags = imposePhoneRequirements(user.suspiciousActivityFlags, requiredFlags);
try {
const updatedUser = await timeRpcStep(timingSteps, 'persist_inbound_phone_requirement', async () =>
this.deps.userRepository.patchUpsert(user.id, {suspicious_activity_flags: newFlags}, user.toRow()),
@@ -115,15 +115,3 @@ export function getFirstInvoicePaymentIntentId(invoice: Stripe.Invoice | null):
}
return paymentIntent.id ?? null;
}
export function getFirstInvoicePaymentIntentLatestChargeId(invoice: Stripe.Invoice | null): string | null {
const paymentIntent = getFirstInvoicePaymentIntent(invoice);
if (!paymentIntent || typeof paymentIntent === 'string') {
return null;
}
const latestCharge = paymentIntent.latest_charge ?? null;
if (typeof latestCharge === 'string') {
return latestCharge;
}
return latestCharge?.id ?? null;
}
@@ -21,7 +21,6 @@ import {mapUserToPrivateResponse} from '../../user/UserMappers';
import type {ProductInfo, ProductRegistry} from '../ProductRegistry';
import {
getFirstInvoicePaymentIntentId,
getFirstInvoicePaymentIntentLatestChargeId,
getPrimarySubscriptionItem,
getSubscriptionItemPeriodEnd,
getSubscriptionPremiumPeriodEnd,
@@ -600,11 +599,16 @@ export class StripeCheckoutWebhookHandler {
if (!this.stripe) return null;
try {
const subscription = await this.stripe.subscriptions.retrieve(subscriptionId, {
expand: ['latest_invoice.payments.data.payment.payment_intent.latest_charge'],
expand: ['latest_invoice.payments.data.payment'],
});
const latestInvoice =
typeof subscription.latest_invoice === 'string' ? null : (subscription.latest_invoice ?? null);
return getFirstInvoicePaymentIntentLatestChargeId(latestInvoice);
const paymentIntentId = getFirstInvoicePaymentIntentId(latestInvoice);
if (!paymentIntentId) {
return null;
}
const paymentIntent = await this.stripe.paymentIntents.retrieve(paymentIntentId);
return extractId(paymentIntent.latest_charge);
} catch (err) {
Logger.warn({err, subscriptionId}, 'Failed to resolve latest charge for duplicate-subscription refund');
return null;
@@ -739,7 +743,7 @@ export class StripeCheckoutWebhookHandler {
};
try {
const subscription = (await this.stripe.subscriptions.retrieve(subscriptionId, {
expand: ['default_payment_method', 'latest_invoice.payments.data.payment.payment_intent'],
expand: ['default_payment_method', 'latest_invoice.payments.data.payment'],
})) as StripeSubscriptionWithFallbackPaymentState;
const latestInvoice =
typeof subscription.latest_invoice === 'string' ? null : (subscription.latest_invoice ?? null);
@@ -296,6 +296,7 @@ export class StripePremiumService {
const existingMember = await this.guildRepository.getMember(visionariesGuildId, userId);
if (!existingMember) {
await this.guildService.members.addUserToGuild({
skipRiskGate: true,
userId,
guildId: visionariesGuildId,
sendJoinMessage: true,
@@ -39,7 +39,6 @@ interface RefundTarget {
type StripeInvoiceWithPayments = Stripe.Invoice & {
customer?: string | Stripe.Customer | null;
subscription?: string | Stripe.Subscription | null;
payments?: {
data?: Array<{
payment?: {
@@ -54,6 +53,10 @@ type StripeInvoiceWithPayments = Stripe.Invoice & {
} | null;
};
function resolveInvoiceSubscriptionId(invoice: Stripe.Invoice): string | null {
return extractId(invoice.parent?.subscription_details?.subscription ?? null);
}
function getInvoicePaymentRef(invoice: Stripe.Invoice): {
chargeId: string | null;
paymentIntentId: string | null;
@@ -113,7 +116,7 @@ export class StripeRefundService {
const list = await this.stripe.invoices.list({
customer: user.stripeCustomerId,
limit: 5,
expand: ['data.payments.data.payment.payment_intent'],
expand: ['data.payments.data.payment'],
});
for (const invoice of list.data) {
if (!invoice.id || invoice.status !== 'paid' || invoice.amount_paid <= 0) {
@@ -132,7 +135,7 @@ export class StripeRefundService {
chargeId: ref.chargeId,
paymentIntentId: ref.paymentIntentId,
paidAt,
subscriptionId: extractId((invoice as StripeInvoiceWithPayments).subscription),
subscriptionId: resolveInvoiceSubscriptionId(invoice),
};
}
} catch (error) {
@@ -260,37 +260,13 @@ export class StripeSubscriptionReconciler {
}
getPriceIdFromInvoice(invoice: Stripe.Invoice): string | null {
type InvoiceLineWithPrice = Stripe.InvoiceLineItem & {
price?: string | Stripe.Price | null;
pricing?: {
price_details?: {
price?: string;
};
};
parent?: {
subscription_item_details?: {
price?: {
price?: string;
};
};
};
};
if (!invoice.lines?.data?.length) {
return null;
}
for (const line of invoice.lines.data) {
const lineWithPrice = line as InvoiceLineWithPrice;
const directPriceId = extractId(lineWithPrice.price);
if (directPriceId) {
return directPriceId;
}
const nestedPriceId = lineWithPrice.pricing?.price_details?.price;
if (nestedPriceId) {
return extractId(nestedPriceId);
}
const parentNestedPriceId = lineWithPrice.parent?.subscription_item_details?.price?.price;
if (parentNestedPriceId) {
return extractId(parentNestedPriceId);
const priceId = extractId(line.pricing?.price_details?.price ?? null);
if (priceId) {
return priceId;
}
}
return null;
@@ -328,39 +304,15 @@ export class StripeSubscriptionReconciler {
}
getSubscriptionIdFromInvoice(invoice: Stripe.Invoice): string | null {
type InvoiceWithSubscription = Stripe.Invoice & {
subscription?: string | Stripe.Subscription;
};
const invoiceWithSubscription = invoice as InvoiceWithSubscription;
const directSubscription = invoiceWithSubscription.subscription;
if (directSubscription) {
return extractId(directSubscription);
}
type InvoiceWithParent = Stripe.Invoice & {
parent?: {
subscription_details?: {
subscription?: string;
};
};
};
type InvoiceLineWithParent = Stripe.InvoiceLineItem & {
parent?: {
subscription_item_details?: {
subscription?: string;
};
};
};
const invoiceWithParent = invoice as InvoiceWithParent;
const parentSubscription = invoiceWithParent.parent?.subscription_details?.subscription;
const parentSubscription = extractId(invoice.parent?.subscription_details?.subscription ?? null);
if (parentSubscription) {
return extractId(parentSubscription);
return parentSubscription;
}
if (invoice.lines?.data?.length) {
for (const line of invoice.lines.data) {
const lineWithParent = line as InvoiceLineWithParent;
const subscriptionId = lineWithParent.parent?.subscription_item_details?.subscription;
const subscriptionId = line.parent?.subscription_item_details?.subscription ?? null;
if (subscriptionId) {
return extractId(subscriptionId);
return subscriptionId;
}
}
}
@@ -150,7 +150,7 @@ export class StripeWebhookService {
case 'checkout.session.completed': {
const checkoutSession = event.data.object as Stripe.Checkout.Session;
await this.safeMirrorUpsert(event, () =>
this.billingRepository.checkoutSessions.upsertFromStripe(checkoutSession),
this.billingRepository.checkoutSessions.upsertFromStripe(checkoutSession, {eventCreated: event.created}),
);
if (checkoutSession.metadata?.verification_type === 'uk_age_verification' && this.ageVerificationService) {
await this.ageVerificationService.completeVerification(checkoutSession);
@@ -165,44 +165,48 @@ export class StripeWebhookService {
}
case 'checkout.session.async_payment_succeeded': {
const cs = event.data.object as Stripe.Checkout.Session;
await this.safeMirrorUpsert(event, () => this.billingRepository.checkoutSessions.upsertFromStripe(cs));
await this.safeMirrorUpsert(event, () =>
this.billingRepository.checkoutSessions.upsertFromStripe(cs, {eventCreated: event.created}),
);
await this.checkoutHandler.handleAsyncPaymentSucceeded(cs);
break;
}
case 'checkout.session.async_payment_failed': {
const cs = event.data.object as Stripe.Checkout.Session;
await this.safeMirrorUpsert(event, () => this.billingRepository.checkoutSessions.upsertFromStripe(cs));
await this.safeMirrorUpsert(event, () =>
this.billingRepository.checkoutSessions.upsertFromStripe(cs, {eventCreated: event.created}),
);
await this.checkoutHandler.handleAsyncPaymentFailed(cs);
break;
}
case 'invoice.paid':
case 'invoice.payment_succeeded': {
const inv = event.data.object as Stripe.Invoice;
await this.safeMirrorUpsert(event, () => this.billingRepository.invoices.upsertFromStripe(inv));
await this.mirrorInvoice(event, inv);
await this.subscriptionHandler.handleInvoicePaymentSucceeded(event.id, inv);
break;
}
case 'invoice.payment_failed': {
const inv = event.data.object as Stripe.Invoice;
await this.safeMirrorUpsert(event, () => this.billingRepository.invoices.upsertFromStripe(inv));
await this.mirrorInvoice(event, inv);
await this.subscriptionHandler.handleInvoicePaymentFailed(inv);
break;
}
case 'invoice.payment_action_required': {
const inv = event.data.object as Stripe.Invoice;
await this.safeMirrorUpsert(event, () => this.billingRepository.invoices.upsertFromStripe(inv));
await this.mirrorInvoice(event, inv);
await this.subscriptionHandler.handleInvoicePaymentActionRequired(inv);
break;
}
case 'invoice.finalization_failed': {
const inv = event.data.object as Stripe.Invoice;
await this.safeMirrorUpsert(event, () => this.billingRepository.invoices.upsertFromStripe(inv));
await this.mirrorInvoice(event, inv);
await this.subscriptionHandler.handleInvoiceFinalizationFailed(inv);
break;
}
case 'invoice.updated': {
const inv = event.data.object as Stripe.Invoice;
await this.safeMirrorUpsert(event, () => this.billingRepository.invoices.upsertFromStripe(inv));
await this.mirrorInvoice(event, inv);
await this.subscriptionHandler.handleInvoiceUpdated(inv);
break;
}
@@ -253,11 +257,12 @@ export class StripeWebhookService {
case 'charge.refunded': {
const c = event.data.object as Stripe.Charge;
await this.safeMirrorUpsert(event, () => this.billingRepository.charges.upsertFromStripe(c));
const refunds = c.refunds?.data ?? [];
const refunds = await this.listChargeRefunds(c);
for (const r of refunds) {
await this.safeMirrorUpsert(event, () =>
this.billingRepository.refunds.upsertFromStripe(r, {
customerId: typeof c.customer === 'string' ? c.customer : (c.customer?.id ?? undefined),
livemode: event.livemode,
}),
);
}
@@ -324,7 +329,13 @@ export class StripeWebhookService {
case 'refund.updated':
case 'refund.failed': {
const r = event.data.object as Stripe.Refund;
await this.safeMirrorUpsert(event, () => this.billingRepository.refunds.upsertFromStripe(r));
const customerId = await this.resolveRefundCustomerId(r);
await this.safeMirrorUpsert(event, () =>
this.billingRepository.refunds.upsertFromStripe(r, {
customerId: customerId ?? undefined,
livemode: event.livemode,
}),
);
break;
}
case 'invoice.created':
@@ -332,12 +343,14 @@ export class StripeWebhookService {
case 'invoice.voided':
case 'invoice.marked_uncollectible': {
const inv = event.data.object as Stripe.Invoice;
await this.safeMirrorUpsert(event, () => this.billingRepository.invoices.upsertFromStripe(inv));
await this.mirrorInvoice(event, inv);
break;
}
case 'checkout.session.expired': {
const cs = event.data.object as Stripe.Checkout.Session;
await this.safeMirrorUpsert(event, () => this.billingRepository.checkoutSessions.upsertFromStripe(cs));
await this.safeMirrorUpsert(event, () =>
this.billingRepository.checkoutSessions.upsertFromStripe(cs, {eventCreated: event.created}),
);
break;
}
case 'charge.dispute.updated':
@@ -353,6 +366,54 @@ export class StripeWebhookService {
}
}
private async resolveRefundCustomerId(refund: Stripe.Refund): Promise<string | null> {
const chargeId = typeof refund.charge === 'string' ? refund.charge : (refund.charge?.id ?? null);
if (chargeId !== null) {
const chargeRow = await this.billingRepository.charges.findById(chargeId);
if (chargeRow?.customer_id != null) {
return chargeRow.customer_id;
}
}
const paymentIntentId =
typeof refund.payment_intent === 'string' ? refund.payment_intent : (refund.payment_intent?.id ?? null);
if (paymentIntentId !== null) {
const paymentIntentRow = await this.billingRepository.paymentIntents.findById(paymentIntentId);
if (paymentIntentRow?.customer_id != null) {
return paymentIntentRow.customer_id;
}
}
return null;
}
private async listChargeRefunds(charge: Stripe.Charge): Promise<Array<Stripe.Refund>> {
const inlined = charge.refunds?.data ?? [];
if (inlined.length > 0 || charge.id == null || this.stripe == null) {
return inlined;
}
try {
const listed = await this.stripe.refunds.list({charge: charge.id, limit: 100});
return listed.data;
} catch (listErr) {
Logger.warn({listErr, chargeId: charge.id}, 'Failed to list refunds for charge; skipping refund mirror');
return [];
}
}
private async mirrorInvoice(event: Stripe.Event, inv: Stripe.Invoice): Promise<void> {
let hydrated = inv;
if (inv.payments === undefined && inv.id != null && this.stripe != null) {
try {
hydrated = await this.stripe.invoices.retrieve(inv.id, {expand: ['payments.data.payment']});
} catch (hydrateErr) {
Logger.warn(
{hydrateErr, eventId: event.id, invoiceId: inv.id},
'Failed to hydrate invoice payments; mirroring invoice without payment rows',
);
}
}
await this.safeMirrorUpsert(event, () => this.billingRepository.invoices.upsertFromStripe(hydrated));
}
private async safeMirrorUpsert(event: Stripe.Event, fn: () => Promise<unknown>): Promise<void> {
try {
await fn();
@@ -22,7 +22,7 @@ interface MockStripeInvoice {
id: string;
object: 'invoice';
customer: string;
subscription: string | null;
parent: {subscription_details: {subscription: string}} | null;
amount_due: number;
amount_paid: number;
currency: string;
@@ -66,7 +66,7 @@ function buildInvoice(opts: {
id: opts.id,
object: 'invoice',
customer: customerId,
subscription: subscriptionId,
parent: subscriptionId == null ? null : {subscription_details: {subscription: subscriptionId}},
amount_due: 2500,
amount_paid: 2500,
currency: 'usd',
@@ -166,7 +166,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_cycle',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
},
},
};
@@ -217,7 +217,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_cycle',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
},
},
};
@@ -252,7 +252,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: invoiceId,
billing_reason: 'subscription_cycle',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
},
},
};
@@ -300,7 +300,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_create',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
},
},
};
@@ -351,7 +351,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_cycle',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
},
},
};
@@ -372,7 +372,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_cycle',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
},
},
};
@@ -422,7 +422,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_cycle',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
},
},
};
@@ -460,7 +460,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_update',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
amount_paid: 0,
amount_due: 0,
total: 0,
@@ -503,7 +503,7 @@ describe('Stripe Webhook - Invoice Events', () => {
object: {
id: `in_test_${Date.now()}`,
billing_reason: 'subscription_update',
subscription: subscriptionId,
parent: {subscription_details: {subscription: subscriptionId}},
amount_paid: 1250,
amount_due: 1250,
total: 1250,
@@ -59,7 +59,7 @@ interface StripeApiMockConfig {
subscriptionsListEmpty?: boolean;
charges?: Record<string, Partial<MockStripeCharge>>;
customers?: Record<string, Partial<MockStripeCustomer>>;
invoices?: Record<string, Partial<MockStripeInvoice>>;
invoices?: Record<string, Partial<MockStripeInvoice> & {subscriptionId?: string}>;
paymentIntents?: Record<string, Partial<MockStripePaymentIntent>>;
paymentMethods?: Record<string, Partial<MockStripePaymentMethod>>;
setupIntents?: Record<string, Partial<MockStripeSetupIntent>>;
@@ -284,7 +284,10 @@ interface MockStripeInvoice {
url: string;
};
status: 'draft' | 'open' | 'paid' | 'uncollectible' | 'void' | null;
subscription: string | null;
parent: {
type: 'subscription_details';
subscription_details: {subscription: string};
} | null;
}
interface MockStripeValueList {
@@ -571,13 +574,14 @@ export function createStripeApiHandlers(config: StripeApiMockConfig = {}): Strip
});
}
for (const [invoiceId, overrides] of Object.entries(config.invoices ?? {})) {
const {subscriptionId, ...invoiceOverrides} = overrides;
const defaultInvoice = createDefaultInvoice(invoiceId, {
customerId: overrides.customer ?? 'cus_test_1',
subscriptionId: overrides.subscription ?? 'sub_test_1',
subscriptionId: subscriptionId ?? 'sub_test_1',
});
invoiceStore.set(invoiceId, {
...defaultInvoice,
...overrides,
...invoiceOverrides,
id: invoiceId,
object: 'invoice',
payments: overrides.payments ?? defaultInvoice.payments,
@@ -739,7 +743,10 @@ export function createStripeApiHandlers(config: StripeApiMockConfig = {}): Strip
url: `/v1/invoices/${id}/payments`,
},
status: 'paid',
subscription: subscriptionId,
parent:
subscriptionId === null
? null
: {type: 'subscription_details', subscription_details: {subscription: subscriptionId}},
};
}
function getPaymentIntent(paymentIntentId: string): MockStripePaymentIntent {
@@ -838,8 +845,6 @@ export function createStripeApiHandlers(config: StripeApiMockConfig = {}): Strip
object: 'subscription',
customer: subState.customer,
status: subState.status,
current_period_start: subState.current_period_start,
current_period_end: subState.current_period_end,
latest_invoice: subState.latest_invoice ? getInvoice(subState.latest_invoice) : null,
trial_end: subState.trial_end,
items: {
@@ -1070,7 +1075,7 @@ export function createStripeApiHandlers(config: StripeApiMockConfig = {}): Strip
const limit = Number.parseInt(requestUrl.searchParams.get('limit') ?? '10', 10);
const sortedInvoices = [...invoiceStore.values()]
.filter((invoice) => !customerId || invoice.customer === customerId)
.filter((invoice) => !subscriptionId || invoice.subscription === subscriptionId)
.filter((invoice) => !subscriptionId || invoice.parent?.subscription_details?.subscription === subscriptionId)
.sort((left, right) => right.created - left.created);
const startIndex = startingAfter ? sortedInvoices.findIndex((invoice) => invoice.id === startingAfter) + 1 : 0;
const pagedInvoices = sortedInvoices.slice(Math.max(startIndex, 0), Math.max(startIndex, 0) + limit);
@@ -1460,7 +1465,6 @@ export function createStripeApiHandlers(config: StripeApiMockConfig = {}): Strip
object: 'subscription',
customer,
status: 'active',
current_period_start: Math.floor(Date.now() / 1000) - 30 * 24 * 60 * 60,
trial_end: null,
items: {
object: 'list',
@@ -1482,6 +1486,7 @@ export function createStripeApiHandlers(config: StripeApiMockConfig = {}): Strip
livemode: false,
},
quantity: 1,
current_period_start: Math.floor(Date.now() / 1000) - 30 * 24 * 60 * 60,
current_period_end: currentPeriodEnd,
},
],
@@ -1879,11 +1884,13 @@ export function createInvoicePaidEvent(options: {
id: options.invoiceId ?? `in_test_${Date.now()}`,
object: 'invoice',
customer: options.customerId ?? 'cus_test_1',
subscription: options.subscriptionId ?? 'sub_test_1',
parent: {
type: 'subscription_details',
subscription_details: {subscription: options.subscriptionId ?? 'sub_test_1'},
},
amount_paid: options.amountPaid ?? 2500,
currency: options.currency ?? 'usd',
status: 'paid',
paid: true,
},
},
};
@@ -1902,7 +1909,10 @@ export function createInvoicePaymentFailedEvent(options: {
id: options.invoiceId ?? `in_test_${Date.now()}`,
object: 'invoice',
customer: options.customerId ?? 'cus_test_1',
subscription: options.subscriptionId ?? 'sub_test_1',
parent: {
type: 'subscription_details',
subscription_details: {subscription: options.subscriptionId ?? 'sub_test_1'},
},
amount_due: options.amountDue ?? 2500,
status: 'open',
paid: false,
@@ -1926,7 +1936,10 @@ export function createInvoicePaymentActionRequiredEvent(options: {
id: options.invoiceId ?? `in_test_${Date.now()}`,
object: 'invoice',
customer: options.customerId ?? 'cus_test_1',
subscription: options.subscriptionId ?? 'sub_test_1',
parent: {
type: 'subscription_details',
subscription_details: {subscription: options.subscriptionId ?? 'sub_test_1'},
},
amount_due: options.amountDue ?? 2500,
status: 'open',
paid: false,
@@ -1950,7 +1963,10 @@ export function createInvoiceFinalizationFailedEvent(options: {
id: options.invoiceId ?? `in_test_${Date.now()}`,
object: 'invoice',
customer: options.customerId ?? 'cus_test_1',
subscription: options.subscriptionId ?? 'sub_test_1',
parent: {
type: 'subscription_details',
subscription_details: {subscription: options.subscriptionId ?? 'sub_test_1'},
},
status: 'draft',
paid: false,
last_finalization_error: {
@@ -1980,7 +1996,10 @@ export function createInvoiceUpdatedEvent(options: {
id: options.invoiceId ?? `in_test_${Date.now()}`,
object: 'invoice',
customer: options.customerId ?? 'cus_test_1',
subscription: options.subscriptionId ?? 'sub_test_1',
parent: {
type: 'subscription_details',
subscription_details: {subscription: options.subscriptionId ?? 'sub_test_1'},
},
amount_due: options.amountDue ?? 2500,
status: options.status ?? 'open',
paid: options.paid ?? false,
+90 -1
View File
@@ -1,9 +1,16 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {PremiumFlags, SuspiciousActivityFlags, UserPremiumTypes} from '@fluxer/constants/src/UserConstants';
import {
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
imposePhoneRequirements,
PremiumFlags,
SuspiciousActivityFlags,
UserPremiumTypes,
} from '@fluxer/constants/src/UserConstants';
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
import type {User} from '../models/User';
import {setInjectedAccountPolicyEvaluator} from '../risk/AccountPolicyService';
import {setCachedDeferredPhoneGateEnabled} from '../risk/DeferredPhoneGateCache';
import {
createCurrentBehaviorTestAccountPolicyEvaluator,
TEST_POLICY_CONTACT_DOMAIN,
@@ -23,6 +30,88 @@ function createUser(
} as User;
}
describe('deferred phone gate marker', () => {
beforeEach(() => {
setInjectedAccountPolicyEvaluator(createCurrentBehaviorTestAccountPolicyEvaluator());
setCachedDeferredPhoneGateEnabled(true);
});
afterEach(() => {
setInjectedAccountPolicyEvaluator(undefined);
setCachedDeferredPhoneGateEnabled(false);
});
it('does not suppress anything until a policy read has proven the gate is on', () => {
setCachedDeferredPhoneGateEnabled(false);
const user = createUser({
suspiciousActivityFlags: SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE | DEFERRED_PHONE_ON_COMMUNITY_JOIN,
});
expect(getRequiredActions(user)).toEqual(['REQUIRE_VERIFIED_PHONE']);
});
it('suppresses a deferred phone requirement so the account is not locked out', () => {
const user = createUser({
suspiciousActivityFlags: SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE | DEFERRED_PHONE_ON_COMMUNITY_JOIN,
});
expect(getRequiredActions(user)).toEqual([]);
expect(getEffectiveSuspiciousFlags(user)).toBe(0);
});
it('never lets an inbound-SMS requirement be suppressed, since that tier is never deferred', () => {
const user = createUser({
suspiciousActivityFlags:
SuspiciousActivityFlags.REQUIRE_INBOUND_PHONE_VERIFICATION | DEFERRED_PHONE_ON_COMMUNITY_JOIN,
});
expect(getRequiredActions(user)).toEqual(['REQUIRE_VERIFIED_PHONE', 'REQUIRE_INBOUND_PHONE_VERIFICATION']);
});
it('keeps non-phone requirements active while a phone requirement is deferred', () => {
const user = createUser({
suspiciousActivityFlags:
SuspiciousActivityFlags.REQUIRE_VERIFIED_EMAIL |
SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE |
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
});
expect(getRequiredActions(user)).toEqual(['REQUIRE_VERIFIED_EMAIL']);
expect(getEffectiveSuspiciousFlags(user)).toBe(SuspiciousActivityFlags.REQUIRE_VERIFIED_EMAIL);
});
it('applies the phone requirement in full once the marker is cleared', () => {
const user = createUser({
suspiciousActivityFlags: SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE,
});
expect(getRequiredActions(user)).toEqual(['REQUIRE_VERIFIED_PHONE']);
expect(getEffectiveSuspiciousFlags(user)).toBe(SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE);
});
it('leaves an account carrying only the marker completely unrestricted', () => {
const user = createUser({suspiciousActivityFlags: DEFERRED_PHONE_ON_COMMUNITY_JOIN});
expect(getRequiredActions(user)).toEqual([]);
expect(getEffectiveSuspiciousFlags(user)).toBe(0);
});
it('re-arms stored phone requirements as soon as the gate is switched off', () => {
const user = createUser({
suspiciousActivityFlags: SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE | DEFERRED_PHONE_ON_COMMUNITY_JOIN,
});
expect(getRequiredActions(user)).toEqual([]);
setCachedDeferredPhoneGateEnabled(false);
expect(getRequiredActions(user)).toEqual(['REQUIRE_VERIFIED_PHONE']);
});
it('stops suppressing once another subsystem imposes the phone requirement directly', () => {
const deferred = SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE | DEFERRED_PHONE_ON_COMMUNITY_JOIN;
const imposed = imposePhoneRequirements(deferred, SuspiciousActivityFlags.REQUIRE_REVERIFIED_PHONE);
expect(imposed & DEFERRED_PHONE_ON_COMMUNITY_JOIN).toBe(0);
const user = createUser({suspiciousActivityFlags: imposed});
expect(getRequiredActions(user)).toEqual(['REQUIRE_REVERIFIED_PHONE']);
});
it('keeps the marker when a non-phone requirement is imposed', () => {
const deferred = SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE | DEFERRED_PHONE_ON_COMMUNITY_JOIN;
const imposed = imposePhoneRequirements(deferred, SuspiciousActivityFlags.REQUIRE_VERIFIED_EMAIL);
expect(imposed & DEFERRED_PHONE_ON_COMMUNITY_JOIN).not.toBe(0);
expect(getRequiredActions(createUser({suspiciousActivityFlags: imposed}))).toEqual(['REQUIRE_VERIFIED_EMAIL']);
});
it('yields no enforceable requirement for an account without an email, so the gate must not promote it', () => {
const user = createUser({
email: null,
suspiciousActivityFlags: SuspiciousActivityFlags.REQUIRE_VERIFIED_PHONE,
});
expect(getEffectiveSuspiciousFlags(user)).toBe(0);
});
});
describe('getRequiredActions', () => {
beforeEach(() => {
setInjectedAccountPolicyEvaluator(createCurrentBehaviorTestAccountPolicyEvaluator());
+19 -2
View File
@@ -1,6 +1,12 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {PremiumFlags, SuspiciousActivityFlags, UserFlags} from '@fluxer/constants/src/UserConstants';
import {
DEFERRABLE_PHONE_FLAGS,
DEFERRED_PHONE_ON_COMMUNITY_JOIN,
PremiumFlags,
SuspiciousActivityFlags,
UserFlags,
} from '@fluxer/constants/src/UserConstants';
import type {RequiredAction} from '@fluxer/schema/src/domains/user/UserResponseSchemas';
import {ms} from 'itty-time';
import {Config} from '../Config';
@@ -8,6 +14,7 @@ import type {UserRow} from '../database/types/UserTypes';
import {getCachedInstancePremiumMode} from '../limits/InstancePremiumModeCache';
import type {User} from '../models/User';
import {accountPolicyContactHasCapability} from '../risk/AccountPolicyService';
import {getCachedDeferredPhoneGateEnabled} from '../risk/DeferredPhoneGateCache';
type ClauseAction = Exclude<RequiredAction, 'REQUIRE_INBOUND_PHONE_VERIFICATION'>;
type VerificationChannel = 'email' | 'phone';
@@ -123,8 +130,18 @@ function getRequiredActionSortIndex(action: RequiredAction): number {
return index === -1 ? REQUIRED_ACTION_ORDER.length : index;
}
function suppressDeferredPhoneFlags(rawFlags: number): number {
if ((rawFlags & DEFERRED_PHONE_ON_COMMUNITY_JOIN) === 0) {
return rawFlags;
}
if (!getCachedDeferredPhoneGateEnabled()) {
return rawFlags & ~DEFERRED_PHONE_ON_COMMUNITY_JOIN;
}
return rawFlags & ~DEFERRABLE_PHONE_FLAGS;
}
export function getRequiredActions(user: User): ReadonlyArray<RequiredAction> {
const flags = user.suspiciousActivityFlags ?? 0;
const flags = suppressDeferredPhoneFlags(user.suspiciousActivityFlags ?? 0);
if (flags === 0) {
return [];
}
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {DEFERRED_PHONE_ON_COMMUNITY_JOIN, imposePhoneRequirements} from '@fluxer/constants/src/UserConstants';
import {ValidationErrorCodes} from '@fluxer/constants/src/ValidationErrorCodes';
import {getCurrentTimeZoneOffsetMinutes} from '@fluxer/date_utils/src/TimeZoneUtils';
import {InputValidationError} from '@fluxer/errors/src/domains/core/InputValidationError';
@@ -299,7 +300,7 @@ export class UserAccountRequestService {
action: emailSetRecommendedAction,
},
});
nextSuspiciousFlags |= policyDecision.flagBits;
nextSuspiciousFlags = imposePhoneRequirements(nextSuspiciousFlags, policyDecision.flagBits);
if (nextSuspiciousFlags !== currentSuspiciousFlags) {
user = await this.userRepository.patchUpsert(
user.id,
@@ -550,7 +551,7 @@ export class UserAccountRequestService {
}
private shouldSkipFollowupRiskChecks(user: User): boolean {
return user.hasEverPurchased || user.suspiciousActivityFlags === 0;
return user.hasEverPurchased || ((user.suspiciousActivityFlags ?? 0) & ~DEFERRED_PHONE_ON_COMMUNITY_JOIN) === 0;
}
private enforceUserAccess(user: User): void {
@@ -41,6 +41,7 @@ const handler: WorkerTaskHandler = async (rawPayload, helpers) => {
const userId = createUserID(userIdBigInt);
try {
await deps.guildService.members.addUserToGuild({
skipRiskGate: true,
userId,
guildId,
sendJoinMessage: false,
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {SuspiciousActivityFlags} from '@fluxer/constants/src/UserConstants';
import {imposePhoneRequirements, SuspiciousActivityFlags} from '@fluxer/constants/src/UserConstants';
import type {WorkerTaskHandler} from '@pkgs/worker/src/contracts/WorkerTask';
import {JobCancelledError} from '@pkgs/worker/src/contracts/WorkerTask';
import {AdminAuditService} from '../../../admin/services/AdminAuditService';
@@ -58,7 +58,7 @@ const handler: WorkerTaskHandler = async (rawPayload, helpers) => {
const user = await deps.userRepository.findUnique(userId);
if (!user) throw new Error('user_not_found');
const currentFlags = user.suspiciousActivityFlags ?? 0;
const newFlags = (currentFlags | addMask) & ~removeMask;
const newFlags = imposePhoneRequirements(currentFlags, addMask) & ~removeMask;
const updatedUser = await deps.userRepository.patchUpsert(
userId,
{suspicious_activity_flags: newFlags},
+3 -50
View File
@@ -53,12 +53,6 @@ dependencies = [
"shlex",
]
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "cfg-if"
version = "1.0.4"
@@ -111,7 +105,7 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if 1.0.4",
"cfg-if",
"libc",
"r-efi 5.3.0",
"wasip2",
@@ -123,7 +117,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
dependencies = [
"cfg-if 1.0.4",
"cfg-if",
"libc",
"r-efi 6.0.0",
"wasip2",
@@ -203,7 +197,6 @@ version = "0.1.0"
dependencies = [
"proptest",
"wasm-bindgen",
"wee_alloc",
"zstd",
]
@@ -225,12 +218,6 @@ version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "memory_units"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -530,7 +517,7 @@ version = "0.2.123"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563"
dependencies = [
"cfg-if 1.0.4",
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
@@ -603,40 +590,6 @@ dependencies = [
"semver",
]
[[package]]
name = "wee_alloc"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
dependencies = [
"cfg-if 0.1.10",
"libc",
"memory_units",
"winapi",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-link"
version = "0.2.1"
-1
View File
@@ -10,7 +10,6 @@ crate-type = ["cdylib", "rlib"]
[dependencies]
wasm-bindgen = "=0.2.123"
wee_alloc = {version = "0.4.5", default-features = false}
zstd = {version = "0.13.3", default-features = false, features = ["no_asm", "thin", "wasm"]}
[dev-dependencies]
-4
View File
@@ -9,10 +9,6 @@ use formats::is_animated_image_bytes;
use rgba::{TransformRequest, crop_rotate_rgba_alloc};
use wasm_bindgen::prelude::*;
#[cfg(target_arch = "wasm32")]
#[global_allocator]
static WASM_ALLOCATOR: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
#[wasm_bindgen]
#[allow(clippy::too_many_arguments)]
pub fn crop_rotate_rgba_raw(
-11
View File
@@ -16,11 +16,6 @@
background: transparent;
}
:global(html.platform-native.window-focus-activation-guard:not(.first-click-passthrough-when-unfocused))
:local(.appContainer) {
pointer-events: none;
}
:global(html.is-standalone:not(.auth-page)) :local(.appContainer) {
padding-top: env(safe-area-inset-top);
}
@@ -86,12 +81,6 @@
--skip-link-titlebar-offset: var(--native-titlebar-height);
--skip-link-traffic-lights-offset: 4.5rem;
}
:global(html.platform-native.window-focus-activation-guard:not(.first-click-passthrough-when-unfocused))
:local(.overlayScope)
> :not([data-overlay-pass-through]) {
pointer-events: none;
}
.quickSwitcherPortal {
position: fixed;
inset: 0;
+2 -14
View File
@@ -45,15 +45,9 @@ import {getActivePortalHost, setActivePortalHost} from '@app/features/ui/overlay
import MobileLayout from '@app/features/ui/state/MobileLayout';
import Modal from '@app/features/ui/state/Modal';
import Popout from '@app/features/ui/state/Popout';
import {
getDesktopWindowBehaviorSettings,
setDesktopWindowBehaviorSettings,
} from '@app/features/ui/utils/DesktopWindowBehaviorUtils';
import {getDesktopWindowBehaviorSettings} from '@app/features/ui/utils/DesktopWindowBehaviorUtils';
import {attachExternalLinkInterceptor, isDesktop} from '@app/features/ui/utils/NativeUtils';
import {
FIRST_CLICK_PASSTHROUGH_WHEN_UNFOCUSED_CLASS,
UNFOCUSED_FULLY_INTERACTIVE_CLASS,
} from '@app/features/ui/utils/WindowFocusInteractionGuard';
import {UNFOCUSED_FULLY_INTERACTIVE_CLASS} from '@app/features/ui/utils/WindowFocusInteractionGuard';
import UserSettings from '@app/features/user/state/UserSettings';
import {IncomingCallManager} from '@app/features/voice/components/IncomingCallManager';
import {VoiceLiveKitRoot} from '@app/features/voice/components/VoiceLiveKitRoot';
@@ -86,7 +80,6 @@ export const AppWrapper = observer(({children}: AppWrapperProps) => {
const {i18n} = useLingui();
const reducedMotion = Accessibility.useReducedMotion;
const stayInteractiveWhenUnfocused = Accessibility.stayInteractiveWhenUnfocused;
const firstClickPassThroughWhenUnfocused = Accessibility.firstClickPassThroughWhenUnfocused;
const {platform, isNative} = useNativePlatform();
const useSystemTitleBar = useNativeTitleBar();
const messageDisplayCompact = UserSettings.getMessageDisplayCompact();
@@ -163,11 +156,6 @@ export const AppWrapper = observer(({children}: AppWrapperProps) => {
useDocumentClassToggle('reduced-motion', reducedMotion);
useDocumentClassToggle('mobile-layout', MobileLayout.platformMobileDetected || MobileLayout.enabled);
useDocumentClassToggle(UNFOCUSED_FULLY_INTERACTIVE_CLASS, stayInteractiveWhenUnfocused);
useDocumentClassToggle(FIRST_CLICK_PASSTHROUGH_WHEN_UNFOCUSED_CLASS, firstClickPassThroughWhenUnfocused);
useEffect(() => {
if (!isNative) return;
void setDesktopWindowBehaviorSettings({firstClickPassThroughWhenUnfocused});
}, [isNative, firstClickPassThroughWhenUnfocused]);
useDesktopAllowTransparency(isNative);
useWindowEventListeners({preventDocumentScroll: !isNative});
useRemScaleTracking();
+6
View File
@@ -332,6 +332,9 @@ var {
--guild-members-table-row-border-width: 0.0625rem;
--form-surface-background: var(--background-tertiary);
--message-preview-card-background: hsla(0, 0%, 100%, 0.022);
--message-preview-card-border: hsla(0, 0%, 100%, 0.07);
--message-preview-card-divider: hsla(0, 0%, 100%, 0.05);
--surface-interactive-hover-bg: var(--background-modifier-hover);
--surface-interactive-selected-bg: var(--background-modifier-selected);
--surface-interactive-selected-color: var(--text-primary);
@@ -349,6 +352,9 @@ html.platform-native.platform-macos {
.theme-light {
--guilds-layout-item-bg: color-mix(in srgb, var(--guild-list-foreground) 72%, var(--background-primary) 28%);
--form-surface-background: var(--background-primary);
--message-preview-card-background: hsl(0, 0%, 100%);
--message-preview-card-border: hsla(0, 0%, 0%, 0.07);
--message-preview-card-divider: hsla(0, 0%, 0%, 0.05);
--surface-interactive-hover-bg: var(--background-modifier-hover);
--surface-interactive-selected-bg: var(--background-modifier-selected);
--surface-interactive-selected-color: var(--text-primary);
@@ -600,7 +600,6 @@ export interface AccessibilitySettings {
hdrDisplayMode: HdrDisplayMode;
preserveEditDraft: boolean;
stayInteractiveWhenUnfocused: boolean;
firstClickPassThroughWhenUnfocused: boolean;
scrollToBottomOnMessageSend: boolean;
sequentialFileSend: boolean;
showNeko: boolean;
@@ -718,7 +717,6 @@ class Accessibility {
hdrDisplayMode = HdrDisplayMode.FULL;
preserveEditDraft = false;
stayInteractiveWhenUnfocused = false;
firstClickPassThroughWhenUnfocused = false;
scrollToBottomOnMessageSend = true;
sequentialFileSend = false;
showNeko = false;
@@ -829,7 +827,6 @@ class Accessibility {
'hdrDisplayMode',
'preserveEditDraft',
'stayInteractiveWhenUnfocused',
'firstClickPassThroughWhenUnfocused',
'scrollToBottomOnMessageSend',
'sequentialFileSend',
],
@@ -890,7 +887,6 @@ class Accessibility {
hdrDisplayMode: HDR_TO_PROTO[s.hdrDisplayMode],
preserveEditDraft: s.preserveEditDraft,
stayInteractiveWhenUnfocused: s.stayInteractiveWhenUnfocused,
firstClickPassThroughWhenUnfocused: s.firstClickPassThroughWhenUnfocused,
scrollToBottomOnMessageSend: s.scrollToBottomOnMessageSend,
sequentialFileSend: s.sequentialFileSend,
}),
@@ -980,8 +976,6 @@ class Accessibility {
if (m.preserveEditDraft !== undefined) s.preserveEditDraft = m.preserveEditDraft;
if (m.stayInteractiveWhenUnfocused !== undefined)
s.stayInteractiveWhenUnfocused = m.stayInteractiveWhenUnfocused;
if (m.firstClickPassThroughWhenUnfocused !== undefined)
s.firstClickPassThroughWhenUnfocused = m.firstClickPassThroughWhenUnfocused;
if (m.scrollToBottomOnMessageSend !== undefined) s.scrollToBottomOnMessageSend = m.scrollToBottomOnMessageSend;
if (m.sequentialFileSend !== undefined) s.sequentialFileSend = m.sequentialFileSend;
},
@@ -1316,8 +1310,6 @@ class Accessibility {
if (validated.preserveEditDraft !== undefined) this.preserveEditDraft = validated.preserveEditDraft;
if (validated.stayInteractiveWhenUnfocused !== undefined)
this.stayInteractiveWhenUnfocused = validated.stayInteractiveWhenUnfocused;
if (validated.firstClickPassThroughWhenUnfocused !== undefined)
this.firstClickPassThroughWhenUnfocused = validated.firstClickPassThroughWhenUnfocused;
if (validated.scrollToBottomOnMessageSend !== undefined)
this.scrollToBottomOnMessageSend = validated.scrollToBottomOnMessageSend;
if (validated.sequentialFileSend !== undefined) this.sequentialFileSend = validated.sequentialFileSend;
@@ -1418,8 +1410,6 @@ class Accessibility {
hdrDisplayMode: data.hdrDisplayMode ?? this.hdrDisplayMode,
preserveEditDraft: data.preserveEditDraft ?? this.preserveEditDraft,
stayInteractiveWhenUnfocused: data.stayInteractiveWhenUnfocused ?? this.stayInteractiveWhenUnfocused,
firstClickPassThroughWhenUnfocused:
data.firstClickPassThroughWhenUnfocused ?? this.firstClickPassThroughWhenUnfocused,
scrollToBottomOnMessageSend: data.scrollToBottomOnMessageSend ?? this.scrollToBottomOnMessageSend,
sequentialFileSend: data.sequentialFileSend ?? this.sequentialFileSend,
showNeko: data.showNeko ?? this.showNeko,
@@ -0,0 +1,57 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {describe, expect, it} from 'vitest';
import {mergeFrozenUnreadOrder} from './UnreadChannelOrder';
function ids(channels: ReadonlyArray<{id: string}>): Array<string> {
return channels.map((channel) => channel.id);
}
describe('mergeFrozenUnreadOrder', () => {
it('keeps channels in their frozen position while the list is open', () => {
const order = new Map([
['a', 0],
['b', 1],
['c', 2],
]);
const merged = mergeFrozenUnreadOrder(order, [{id: 'c'}, {id: 'a'}, {id: 'b'}]);
expect(ids(merged)).toEqual(['a', 'b', 'c']);
});
it('shows a channel that becomes unread after the order was frozen', () => {
const order = new Map([['a', 0]]);
const merged = mergeFrozenUnreadOrder(order, [{id: 'a'}, {id: 'late'}]);
expect(ids(merged)).toEqual(['a', 'late']);
});
it('appends late arrivals after existing entries rather than reshuffling', () => {
const order = new Map([
['a', 0],
['b', 1],
]);
const merged = mergeFrozenUnreadOrder(order, [{id: 'late'}, {id: 'b'}, {id: 'a'}]);
expect(ids(merged)).toEqual(['a', 'b', 'late']);
});
it('remembers a late arrival position once assigned', () => {
const order = new Map([['a', 0]]);
mergeFrozenUnreadOrder(order, [{id: 'a'}, {id: 'late'}]);
const merged = mergeFrozenUnreadOrder(order, [{id: 'late'}, {id: 'a'}]);
expect(ids(merged)).toEqual(['a', 'late']);
});
it('drops nothing when every channel is new', () => {
const order = new Map<string, number>();
const merged = mergeFrozenUnreadOrder(order, [{id: 'x'}, {id: 'y'}, {id: 'z'}]);
expect(ids(merged)).toEqual(['x', 'y', 'z']);
});
it('does not resurrect channels that are no longer unread', () => {
const order = new Map([
['a', 0],
['gone', 1],
]);
const merged = mergeFrozenUnreadOrder(order, [{id: 'a'}]);
expect(ids(merged)).toEqual(['a']);
});
});
@@ -0,0 +1,21 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
function resolveUnreadOrderIndex(order: Map<string, number>, channelId: string): number {
const index = order.get(channelId);
if (index == null) {
return Number.POSITIVE_INFINITY;
}
return index;
}
export function mergeFrozenUnreadOrder<T extends {id: string}>(
order: Map<string, number>,
current: ReadonlyArray<T>,
): Array<T> {
for (const channel of current) {
if (!order.has(channel.id)) {
order.set(channel.id, order.size);
}
}
return [...current].sort((a, b) => resolveUnreadOrderIndex(order, a.id) - resolveUnreadOrderIndex(order, b.id));
}
@@ -5,14 +5,6 @@
--inbox-scroller-padding-bottom: 0.75rem;
--inbox-section-gap: 0.25rem;
--inbox-card-gap: 1rem;
--inbox-heading-padding-x: 0.25rem;
--inbox-heading-padding-y: 0.75rem;
--inbox-sticky-bg: var(--form-surface-background);
--inbox-sticky-radius: 0.375rem;
--inbox-sticky-separator: 0 0.0625rem 0 var(--background-modifier-accent);
--inbox-sticky-group-heading-height: 2.25rem;
--inbox-sticky-channel-heading-height: 3rem;
--inbox-sticky-channel-top: var(--inbox-sticky-group-heading-height);
--inbox-icon-button-size: 1.75rem;
--inbox-icon-button-radius: 0.375rem;
--inbox-collapse-button-size: 1.375rem;
@@ -21,64 +13,32 @@
min-height: 0;
min-width: 0;
padding: 0 var(--inbox-scroller-padding-x) var(--inbox-scroller-padding-bottom);
scroll-padding-top: calc(
var(--inbox-sticky-group-heading-height) +
var(--inbox-sticky-channel-heading-height) +
0.5rem
);
}
.guildGroup {
margin-bottom: var(--inbox-section-gap);
min-width: 0;
}
.guildGroup:last-child {
margin-bottom: 0;
.list {
display: block;
min-width: 0;
}
.guildGroupHeading {
position: sticky;
top: 0;
z-index: 3;
display: flex;
align-items: center;
.row {
display: block;
box-sizing: border-box;
min-height: var(--inbox-sticky-group-heading-height);
margin: 0;
padding: var(--inbox-heading-padding-y) var(--inbox-heading-padding-x) 0.5rem;
font-size: 0.6875rem;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--text-primary-muted);
border-radius: var(--inbox-sticky-radius);
background-color: var(--inbox-sticky-bg);
transition: color 0.12s ease;
padding-bottom: var(--inbox-card-gap);
}
.rowGroupEnd {
padding-bottom: calc(var(--inbox-card-gap) + var(--inbox-section-gap));
}
.channelCard {
margin-bottom: var(--inbox-card-gap);
}
.channelCard:focus {
min-width: 0;
outline: none;
}
.channelStickyHeader {
position: sticky;
top: var(--inbox-sticky-channel-top);
z-index: 2;
margin: 0 0 0.5rem;
padding: 0 var(--inbox-heading-padding-x);
border-radius: var(--inbox-sticky-radius);
background-color: var(--inbox-sticky-bg);
box-shadow: var(--inbox-sticky-separator);
transition:
background-color 0.12s ease,
box-shadow 0.12s ease;
}
.srOnly {
position: absolute;
width: 0.0625rem;
@@ -107,16 +67,13 @@
}
.messageStream {
--chat-horizontal-padding: 0.75rem;
padding: 0 0.5rem;
min-width: 0;
overflow: hidden;
}
.previewFooter {
display: flex;
justify-content: flex-start;
padding: 0.5rem 0.75rem 0.625rem;
padding: 0.375rem 0.5rem 0.25rem;
}
.viewAllButton {
@@ -148,8 +105,8 @@
.messageActions {
display: none;
position: absolute;
top: 0.5rem;
right: 0.75rem;
top: 0.375rem;
right: 0.5rem;
gap: 0.25rem;
}
@@ -222,7 +179,7 @@
}
.previewDateDivider :global(.text) {
background-color: var(--inbox-sticky-bg);
background-color: var(--form-surface-background);
border-radius: 0.375rem;
padding: 0.125rem 0.625rem;
}
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import Accessibility from '@app/features/accessibility/state/Accessibility';
import {mergeFrozenUnreadOrder} from '@app/features/app/components/floating/UnreadChannelOrder';
import styles from '@app/features/app/components/floating/UnreadChannelsContent.module.css';
import previewStyles from '@app/features/app/components/shared/MessagePreview.module.css';
import {Endpoints} from '@app/features/app/constants/Endpoints';
@@ -38,6 +39,7 @@ import FocusRing from '@app/features/ui/focus_ring/FocusRing';
import {Tooltip} from '@app/features/ui/tooltip/Tooltip';
import UserGuildSettings from '@app/features/user/state/UserGuildSettings';
import UserSettings from '@app/features/user/state/UserSettings';
import {MessagePreviewContext} from '@fluxer/constants/src/ChannelConstants';
import type {Message as WireMessage} from '@fluxer/schema/src/domains/message/MessageResponseSchemas';
import {compare as compareSnowflakes, extractTimestamp} from '@fluxer/snowflake/src/SnowflakeUtils';
import {msg} from '@lingui/core/macro';
@@ -50,7 +52,7 @@ import type React from 'react';
import {useCallback, useEffect, useMemo, useRef, useState} from 'react';
const MENTIONS_DESCRIPTOR = msg({
message: '{channelHeading}, {mentionCount} mentions',
message: '{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}',
comment:
'Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.',
});
@@ -223,13 +225,13 @@ function buildPreviewDataFromMessages(
oldestUnreadMessageId: plan.oldestUnreadMessageId,
};
}
return buildEmptyPreview(plan.channel);
}
const sorted = [...records].sort((a, b) => compareSnowflakes(a.id, b.id));
const latest = sorted.slice(Math.max(0, sorted.length - UNREAD_PREVIEW_MESSAGE_LIMIT));
return {
channel: plan.channel,
messages: sorted.slice(0, UNREAD_PREVIEW_MESSAGE_LIMIT),
oldestUnreadMessageId: sorted[0]?.id ?? null,
messages: latest,
oldestUnreadMessageId: latest[0]?.id ?? null,
};
}
@@ -239,13 +241,37 @@ async function fetchPreviewBatch(plans: Array<PreviewFetchPlan>): Promise<void>
body: {requests: plans.map((plan) => plan.request)},
});
const responseChannels = new Map((response.body?.channels ?? []).map((entry) => [entry.channel_id, entry.messages]));
const retryPlans: Array<PreviewFetchPlan> = [];
for (const plan of plans) {
const messages = responseChannels.get(plan.channel.id) ?? [];
const isAnchored = plan.request.around != null || plan.request.after != null;
if (messages.length === 0 && isAnchored) {
retryPlans.push({
channel: plan.channel,
cacheKey: plan.cacheKey,
oldestUnreadMessageId: null,
request: {channel_id: plan.channel.id, limit: UNREAD_PREVIEW_MESSAGE_LIMIT},
});
continue;
}
previewCache.set(plan.channel.id, {
cacheKey: plan.cacheKey,
data: buildPreviewDataFromMessages(plan, messages),
});
}
if (retryPlans.length === 0) return;
const retryResponse = await http.post<BulkPreviewResponse>(Endpoints.CHANNEL_MESSAGES_BULK, {
body: {requests: retryPlans.map((plan) => plan.request)},
});
const retryChannels = new Map(
(retryResponse.body?.channels ?? []).map((entry) => [entry.channel_id, entry.messages]),
);
for (const plan of retryPlans) {
previewCache.set(plan.channel.id, {
cacheKey: plan.cacheKey,
data: buildPreviewDataFromMessages(plan, retryChannels.get(plan.channel.id) ?? []),
});
}
}
function chunkPlans(plans: Array<PreviewFetchPlan>): Array<Array<PreviewFetchPlan>> {
@@ -423,7 +449,8 @@ const UnreadChannelCard = observer(function UnreadChannelCard({
messageRowClassName: styles.messageRow,
messageActionsClassName: styles.messageActions,
renderMessageActions,
readonlyPreview: true,
suppressMessageActions: true,
previewContext: MessagePreviewContext.LIST_POPOUT,
dateDividerClassName: styles.previewDateDivider,
suppressUnreadIndicator: true,
getMessageHeadingActivate,
@@ -468,7 +495,6 @@ const UnreadChannelCard = observer(function UnreadChannelCard({
</h2>
<InboxMessageHeader
channel={channel}
className={styles.channelStickyHeader}
onClick={handleHeaderClick}
mentionCount={mentionCount}
leftAdornment={
@@ -627,15 +653,11 @@ export const UnreadChannelsContent = observer(function UnreadChannelsContent() {
frozenOrderRef.current = new Map(getUnreadChannels().map((channel, index) => [channel.id, index]));
}
const allUnreadChannels = useMemo(() => {
const order = frozenOrderRef.current!;
const current = getUnreadChannels();
return current
.filter((channel) => order.has(channel.id))
.sort((a, b) => {
const aIdx = order.get(a.id) ?? Number.POSITIVE_INFINITY;
const bIdx = order.get(b.id) ?? Number.POSITIVE_INFINITY;
return aIdx - bIdx;
});
const order = frozenOrderRef.current;
if (order == null) {
return [];
}
return mergeFrozenUnreadOrder(order, getUnreadChannels());
}, [readStateVersion, settingsVersion]);
const [loadedCount, setLoadedCount] = useState(INITIAL_VISIBLE_CHANNELS);
const visibleChannels = useMemo(() => allUnreadChannels.slice(0, loadedCount), [allUnreadChannels, loadedCount]);
@@ -672,6 +694,20 @@ export const UnreadChannelsContent = observer(function UnreadChannelsContent() {
}
return groups;
}, [visibleChannels, channelPreviews, i18n.locale]);
const unreadRows = useMemo(() => {
const rows: Array<{channel: Channel; endsGroup: boolean; groupLabel: string; key: string}> = [];
for (const group of groupedChannels) {
for (const [index, channel] of group.channels.entries()) {
rows.push({
channel,
endsGroup: index === group.channels.length - 1,
groupLabel: group.label,
key: channel.id,
});
}
}
return rows;
}, [groupedChannels]);
const hasMore = loadedCount < allUnreadChannels.length;
const handleScroll = useCallback(
(event: React.UIEvent<HTMLDivElement>) => {
@@ -751,34 +787,31 @@ export const UnreadChannelsContent = observer(function UnreadChannelsContent() {
data-message-selection-root="true"
data-flx="app.floating.unread-channels-content.scroller"
>
{groupedChannels.map((group) => {
const groupHeadingId = `inbox-unread-group-${group.key}`;
return (
<section
key={group.key}
className={styles.guildGroup}
aria-labelledby={groupHeadingId}
data-flx="app.floating.unread-channels-content.guild-group"
<div className={styles.list} role="list" data-flx="app.floating.unread-channels-content.list">
{unreadRows.map((row, rowIndex) => (
<div
key={row.key}
className={clsx(styles.row, row.endsGroup && styles.rowGroupEnd)}
role="listitem"
aria-posinset={rowIndex + 1}
aria-setsize={unreadRows.length}
data-flx="app.floating.unread-channels-content.row"
>
<h1
id={groupHeadingId}
className={styles.guildGroupHeading}
data-flx="app.floating.unread-channels-content.guild-group-heading"
<section
className={styles.guildGroup}
aria-label={row.groupLabel}
data-flx="app.floating.unread-channels-content.guild-group"
>
{group.label}
</h1>
{group.channels.map((channel) => (
<UnreadChannelCard
key={channel.id}
channel={channel}
headingId={`inbox-unread-channel-${channel.id}`}
previewData={channelPreviews.get(channel.id) ?? null}
channel={row.channel}
headingId={`inbox-unread-channel-${row.channel.id}`}
previewData={channelPreviews.get(row.channel.id) ?? null}
data-flx="app.floating.unread-channels-content.unread-channel-card"
/>
))}
</section>
);
})}
</section>
</div>
))}
</div>
</Scroller>
);
});
@@ -9,8 +9,8 @@
-webkit-user-select: none;
overflow: visible;
flex-shrink: 0;
border-radius: 0.375rem;
border: 0.0625rem solid var(--background-header-secondary);
border-radius: 0.5rem;
border: 0.0625rem solid var(--message-preview-card-border, var(--background-header-secondary));
background-color: var(--message-preview-card-background, transparent);
padding-top: 0.5rem;
padding-bottom: 0.5rem;
@@ -1,177 +0,0 @@
// @vitest-environment happy-dom
// SPDX-License-Identifier: AGPL-3.0-or-later
import {useRovingFocusList} from '@app/features/app/hooks/useRovingFocusList';
import {act} from 'react';
import {createRoot, type Root} from 'react-dom/client';
import {afterEach, beforeEach, describe, expect, it} from 'vitest';
(globalThis as {IS_REACT_ACT_ENVIRONMENT?: boolean}).IS_REACT_ACT_ENVIRONMENT = true;
function RovingFocusProbe() {
const listRef = useRovingFocusList<HTMLDivElement>({
autoFocusFirst: true,
focusableSelector: '[data-roving-focus="true"]',
manageTabIndex: true,
});
return (
<div
ref={listRef}
role="menu"
aria-orientation="vertical"
data-flx="app.use-roving-focus-list-test.roving-focus-probe.menu"
>
<button
type="button"
role="menuitem"
data-roving-focus="true"
data-flx="app.use-roving-focus-list-test.roving-focus-probe.menuitem.button"
>
First
</button>
<button
type="button"
role="menuitem"
data-roving-focus="true"
data-flx="app.use-roving-focus-list-test.roving-focus-probe.menuitem.button--2"
>
Second
</button>
<div
role="menuitemcheckbox"
aria-checked="false"
tabIndex={0}
data-roving-focus="true"
data-flx="app.use-roving-focus-list-test.roving-focus-probe.menuitemcheckbox"
>
Third
</div>
</div>
);
}
function ManualEntryRovingFocusProbe() {
const listRef = useRovingFocusList<HTMLDivElement>({
focusableSelector: '[data-roving-focus="true"]',
manageTabIndex: true,
});
return (
<div
ref={listRef}
role="menu"
aria-orientation="vertical"
tabIndex={-1}
data-autofocus
data-flx="app.use-roving-focus-list-test.manual-entry-roving-focus-probe.menu"
>
<button
type="button"
role="menuitem"
data-roving-focus="true"
data-flx="app.use-roving-focus-list-test.manual-entry-roving-focus-probe.menuitem.button"
>
First
</button>
<button
type="button"
role="menuitem"
data-roving-focus="true"
data-flx="app.use-roving-focus-list-test.manual-entry-roving-focus-probe.menuitem.button--2"
>
Second
</button>
</div>
);
}
const press = (target: Element, key: string): KeyboardEvent => {
const event = new KeyboardEvent('keydown', {key, bubbles: true, cancelable: true});
act(() => {
target.dispatchEvent(event);
});
return event;
};
const getItems = (container: HTMLElement): Array<HTMLElement> =>
Array.from(container.querySelectorAll<HTMLElement>('[data-roving-focus="true"]'));
describe('useRovingFocusList', () => {
let root: Root | null = null;
let container: HTMLDivElement | null = null;
beforeEach(() => {
container = document.createElement('div');
document.body.append(container);
root = createRoot(container);
});
afterEach(() => {
act(() => {
root?.unmount();
});
root = null;
container?.remove();
container = null;
});
it('moves focus with vertical arrow keys while keeping one tabbable item', () => {
act(() => {
root?.render(<RovingFocusProbe data-flx="app.use-roving-focus-list-test.roving-focus-probe" />);
});
const items = getItems(container!);
expect(document.activeElement).toBe(items[0]);
expect(items.map((item) => item.tabIndex)).toEqual([0, -1, -1]);
const down = press(items[0], 'ArrowDown');
expect(down.defaultPrevented).toBe(true);
expect(document.activeElement).toBe(items[1]);
expect(items.map((item) => item.tabIndex)).toEqual([-1, 0, -1]);
press(items[1], 'ArrowDown');
expect(document.activeElement).toBe(items[2]);
expect(items.map((item) => item.tabIndex)).toEqual([-1, -1, 0]);
press(items[2], 'ArrowUp');
expect(document.activeElement).toBe(items[1]);
expect(items.map((item) => item.tabIndex)).toEqual([-1, 0, -1]);
});
it('supports Home and End in a managed roving list', () => {
act(() => {
root?.render(<RovingFocusProbe data-flx="app.use-roving-focus-list-test.roving-focus-probe--2" />);
});
const items = getItems(container!);
press(items[0], 'End');
expect(document.activeElement).toBe(items[2]);
expect(items.map((item) => item.tabIndex)).toEqual([-1, -1, 0]);
press(items[2], 'Home');
expect(document.activeElement).toBe(items[0]);
expect(items.map((item) => item.tabIndex)).toEqual([0, -1, -1]);
});
it('can start on the container with no focused item before ArrowDown enters the list', () => {
act(() => {
root?.render(
<ManualEntryRovingFocusProbe data-flx="app.use-roving-focus-list-test.manual-entry-roving-focus-probe" />,
);
});
const menu = container?.querySelector<HTMLElement>('[role="menu"]');
const items = getItems(container!);
expect(menu).toBeInstanceOf(HTMLElement);
expect(document.activeElement).not.toBe(items[0]);
act(() => {
menu?.focus();
});
expect(document.activeElement).toBe(menu);
expect(items.map((item) => item.tabIndex)).toEqual([0, -1]);
const down = press(menu!, 'ArrowDown');
expect(down.defaultPrevented).toBe(true);
expect(document.activeElement).toBe(items[0]);
expect(items.map((item) => item.tabIndex)).toEqual([0, -1]);
});
});
@@ -72,7 +72,9 @@ const applyTabIndices = (focusable: Array<HTMLElement>, activeIndex: number): vo
for (let i = 0; i < focusable.length; i++) {
const element = focusable[i];
const desired = i === clamped ? '0' : '-1';
element.setAttribute(ROVING_MANAGED_ATTR, '');
if (!element.hasAttribute(ROVING_MANAGED_ATTR)) {
element.setAttribute(ROVING_MANAGED_ATTR, '');
}
if (element.getAttribute('tabindex') !== desired) {
element.setAttribute('tabindex', desired);
}
@@ -258,7 +258,6 @@ export type MessageBehaviorOverrides = Partial<{
mobileLayoutEnabled: boolean;
messageGroupSpacing: number;
messageDisplayCompact: boolean;
prefersReducedMotion: boolean;
isEditing: boolean;
isReplying: boolean;
isHighlight: boolean;
@@ -285,7 +284,7 @@ interface MessageProps {
behaviorOverrides?: MessageBehaviorOverrides;
compact?: boolean;
idPrefix?: string;
readonlyPreview?: boolean;
suppressMessageActions?: boolean;
onHeadingActivate?: () => void;
}
@@ -304,7 +303,7 @@ export const Message: React.FC<MessageProps> = observer((props) => {
behaviorOverrides,
compact,
idPrefix = 'message',
readonlyPreview,
suppressMessageActions,
onHeadingActivate,
} = props;
const {i18n} = useLingui();
@@ -326,7 +325,7 @@ export const Message: React.FC<MessageProps> = observer((props) => {
const mobileLayoutEnabled = behaviorOverrides?.mobileLayoutEnabled ?? MobileLayout.isEnabled();
const messageDisplayCompact =
compact ?? behaviorOverrides?.messageDisplayCompact ?? UserSettings.getMessageDisplayCompact();
const prefersReducedMotion = behaviorOverrides?.prefersReducedMotion ?? Accessibility.useReducedMotion;
const prefersReducedMotion = Accessibility.useReducedMotion;
const isEditing = behaviorOverrides?.isEditing ?? MessageEdit.isEditing(message.channelId, message.id);
const isReplying = behaviorOverrides?.isReplying ?? MessageReply.isReplying(message.channelId, message.id);
const isHighlight = behaviorOverrides?.isHighlight ?? MessageReply.isHighlight(message.id);
@@ -742,7 +741,7 @@ export const Message: React.FC<MessageProps> = observer((props) => {
}
: undefined,
onPopoutToggle: handleMessagePopoutToggle,
readonlyPreview,
suppressMessageActions,
onHeadingActivate,
}),
[
@@ -756,7 +755,7 @@ export const Message: React.FC<MessageProps> = observer((props) => {
previewOverrides,
previewMode,
handleMessagePopoutToggle,
readonlyPreview,
suppressMessageActions,
onHeadingActivate,
],
);
@@ -780,8 +779,9 @@ export const Message: React.FC<MessageProps> = observer((props) => {
astNodes.length === 1 &&
astNodes[0].type === NodeType.Link &&
!message.suppressEmbeds;
const shouldDisableHoverBackground = (prefersReducedMotion && !isEditing) || readonlyPreview;
const shouldDisableHoverBackground = prefersReducedMotion && !isEditing;
const isKeyboardFocused = keyboardModeEnabled && isFocusedWithin;
const isPreview = previewContext != null;
const shouldApplySpacing = !shouldGroup && !removeTopSpacing && previewContext !== MessagePreviewContext.LIST_POPOUT;
const systemFollowsSystem = Boolean(
shouldGroup && prevMessage && isDisplaySystemMessage(prevMessage) && isDisplaySystemMessage(message),
@@ -790,7 +790,7 @@ export const Message: React.FC<MessageProps> = observer((props) => {
() =>
clsx(
messageDisplayCompact ? styles.messageCompact : styles.message,
isHovering && styles.messageHovered,
isHovering && !isPreview && styles.messageHovered,
shouldDisableHoverBackground && styles.messageNoHover,
isEditing && styles.messageEditing,
!messageDisplayCompact &&
@@ -812,8 +812,8 @@ export const Message: React.FC<MessageProps> = observer((props) => {
!isEditing &&
message.isUserMessage() &&
styles.messageNoText,
isKeyboardFocused && styles.keyboardFocused,
isKeyboardFocused && 'keyboard-focus-active',
isKeyboardFocused && !isPreview && styles.keyboardFocused,
isKeyboardFocused && !isPreview && 'keyboard-focus-active',
shouldApplySpacing && previewContext && styles.messagePreviewSpacing,
),
[
@@ -836,16 +836,17 @@ export const Message: React.FC<MessageProps> = observer((props) => {
shouldHideContent,
isKeyboardFocused,
shouldApplySpacing,
isPreview,
],
);
const shouldShowActionBar = useMemo(
() =>
!previewContext &&
!readonlyPreview &&
!suppressMessageActions &&
message.state !== MessageStates.SENDING &&
!isEditing &&
!mobileLayoutEnabled,
[previewContext, readonlyPreview, message.state, isEditing, mobileLayoutEnabled],
[previewContext, suppressMessageActions, message.state, isEditing, mobileLayoutEnabled],
);
const shouldRenderInlineActionBar = useMemo(
() => shouldShowActionBar && (previewMode || isHovering || isKeyboardFocused || contextMenuOpen || isPopoutOpen),
@@ -11,6 +11,7 @@ import type {ChannelMessages} from '@app/features/messaging/state/ChannelMessage
import {type ChannelStreamItem, ChannelStreamType} from '@app/features/messaging/utils/MessageGroupingUtils';
import {IS_DEV} from '@app/features/platform/types/Env';
import {Logger} from '@app/features/platform/utils/AppLogger';
import type {MessagePreviewContext} from '@fluxer/constants/src/ChannelConstants';
import {MessageTypes} from '@fluxer/constants/src/ChannelConstants';
import type React from 'react';
@@ -39,7 +40,8 @@ interface RenderChannelStreamProps {
messageRowClassName?: string;
messageActionsClassName?: string;
renderMessageActions?: (message: Message) => React.ReactNode;
readonlyPreview?: boolean;
suppressMessageActions?: boolean;
previewContext?: keyof typeof MessagePreviewContext;
dateDividerClassName?: string;
suppressUnreadIndicator?: boolean;
getMessageHeadingActivate?: (message: Message) => (() => void) | undefined;
@@ -58,7 +60,8 @@ export function renderChannelStream(props: RenderChannelStreamProps): Array<Reac
messageRowClassName,
messageActionsClassName,
renderMessageActions,
readonlyPreview,
suppressMessageActions,
previewContext,
dateDividerClassName,
suppressUnreadIndicator,
getMessageHeadingActivate,
@@ -129,7 +132,8 @@ export function renderChannelStream(props: RenderChannelStreamProps): Array<Reac
messageRowClassName={messageRowClassName}
messageActionsClassName={messageActionsClassName}
renderMessageActions={renderMessageActions}
readonlyPreview={readonlyPreview}
suppressMessageActions={suppressMessageActions}
previewContext={previewContext}
getMessageHeadingActivate={getMessageHeadingActivate}
data-flx="channel.channel-message-stream.flush-pending-group.message-group"
/>,
@@ -16,9 +16,8 @@ import {
EDIT_MESSAGE_DESCRIPTOR,
EMOJIS_DESCRIPTOR,
} from '@app/features/i18n/utils/CommonMessageDescriptors';
import Keybind from '@app/features/input/state/InputKeybind';
import {LexicalRichInput, type LexicalRichInputHandle} from '@app/features/lexical/composer/LexicalRichInput';
import {doesEventMatchShortcut, useMarkdownKeybinds} from '@app/features/messaging/hooks/useMarkdownKeybinds';
import {useMarkdownKeybinds} from '@app/features/messaging/hooks/useMarkdownKeybinds';
import type {Message} from '@app/features/messaging/models/MessagingMessage';
import MessageEdit from '@app/features/messaging/state/MessageEdit';
import {applyMarkdownSegments} from '@app/features/messaging/utils/MarkdownToSegmentUtils';
@@ -155,16 +154,6 @@ export const EditingMessageInput = observer(
if (event.defaultPrevented) {
return;
}
const composer = composerRef.current;
const selection = composer == null ? null : composer.getSelection();
const hasSelectionRange = selection != null && selection.start !== selection.end;
const inboxCombo = Keybind.getByAction('chat_toggle_inbox').combo;
if (doesEventMatchShortcut(event, inboxCombo) && !hasSelectionRange && actualContent.trim().length === 0) {
event.preventDefault();
event.stopPropagation();
ComponentDispatch.dispatch('INBOX_OPEN');
return;
}
if (event.key === 'Escape' && !event.shiftKey && !event.defaultPrevented && !event.nativeEvent.isComposing) {
event.preventDefault();
event.stopPropagation();
@@ -52,8 +52,7 @@ import type {FlatEmoji} from '@app/features/emoji/types/EmojiTypes';
import {ExpressionPickerSheet} from '@app/features/expressions/components/modals/ExpressionPickerSheet';
import GuildGuilds from '@app/features/guild/state/Guilds';
import {CANCEL_DESCRIPTOR, CONTINUE_DESCRIPTOR} from '@app/features/i18n/utils/CommonMessageDescriptors';
import Keybind from '@app/features/input/state/InputKeybind';
import type {ComposerHandle, ComposerSelectionRange} from '@app/features/lexical/composer/ComposerHandle';
import type {ComposerHandle} from '@app/features/lexical/composer/ComposerHandle';
import {insertComposerEmoji} from '@app/features/lexical/composer/ComposerInsertion';
import {LexicalComposerInput} from '@app/features/lexical/composer/LexicalComposerInput';
import {
@@ -69,7 +68,7 @@ import {showAttachmentPermissionDeniedModal} from '@app/features/messaging/compo
import {FileSizeTooLargeModal} from '@app/features/messaging/components/alerts/FileSizeTooLargeModal';
import {TooManyAttachmentsModal} from '@app/features/messaging/components/alerts/TooManyAttachmentsModal';
import {useTextareaAttachments} from '@app/features/messaging/hooks/useCloudUpload';
import {doesEventMatchShortcut, useMarkdownKeybinds} from '@app/features/messaging/hooks/useMarkdownKeybinds';
import {useMarkdownKeybinds} from '@app/features/messaging/hooks/useMarkdownKeybinds';
import {type SendMessageFunction, useMessageSubmission} from '@app/features/messaging/hooks/useMessageSubmission';
import {useTextareaDraftAndTyping} from '@app/features/messaging/hooks/useTextareaDraftAndTyping';
import {useTextareaEditing} from '@app/features/messaging/hooks/useTextareaEditing';
@@ -848,22 +847,9 @@ export const LexicalChannelTextareaContent = observer(
}, [channel.guildId]);
const handleEditorKeyDown = useCallback(
(event: React.KeyboardEvent<HTMLElement>) => {
const handle = handleRef.current;
let selection: ComposerSelectionRange | null = null;
if (handle !== null) {
selection = handle.getSelection();
}
const hasSelectionRange = selection ? selection.start !== selection.end : false;
const inboxCombo = Keybind.getByAction('chat_toggle_inbox').combo;
if (doesEventMatchShortcut(event, inboxCombo) && !hasSelectionRange && value.trim().length === 0) {
event.preventDefault();
event.stopPropagation();
ComponentDispatch.dispatch('INBOX_OPEN');
return;
}
handleEscapeKey(event);
},
[handleEscapeKey, value],
[handleEscapeKey],
);
const handleSubmit = useCallback(() => {
if (!canSubmit) {
@@ -67,7 +67,6 @@ import {Popout} from '@app/features/ui/popover/PopoverPopout';
import ContextMenu from '@app/features/ui/state/ContextMenu';
import KeyboardMode from '@app/features/ui/state/KeyboardMode';
import {Tooltip} from '@app/features/ui/tooltip/Tooltip';
import {canUseWindowFocusedActivationClick} from '@app/features/ui/utils/WindowFocusInteractionGuard';
import UserSettings from '@app/features/user/state/UserSettings';
import * as AvatarUtils from '@app/features/user/utils/AvatarUtils';
import {MessageStates} from '@fluxer/constants/src/ChannelConstants';
@@ -187,14 +186,6 @@ const useShiftKey = (enabled: boolean) => {
}, [enabled]);
return useSyncExternalStore(subscribe, getSnapshot, shiftKeyManager.getServerSnapshot);
};
const suppressBlockedActivationClick = (event: React.SyntheticEvent): boolean => {
if (canUseWindowFocusedActivationClick()) {
return false;
}
event.preventDefault();
event.stopPropagation();
return true;
};
interface MessageActionBarButtonProps {
label: string;
@@ -211,9 +202,6 @@ const MessageActionBarButton = React.forwardRef<HTMLButtonElement, MessageAction
({label, icon, onClick, onPointerDownCapture, danger, isActive, hidden, dataAction}, ref) => {
const handleClick = useCallback(
(event: React.MouseEvent | React.KeyboardEvent) => {
if (suppressBlockedActivationClick(event)) {
return;
}
event.preventDefault();
event.stopPropagation();
onClick?.(event);
@@ -222,9 +210,6 @@ const MessageActionBarButton = React.forwardRef<HTMLButtonElement, MessageAction
);
const handlePointerDownCapture = useCallback(
(event: React.PointerEvent) => {
if (suppressBlockedActivationClick(event)) {
return;
}
onPointerDownCapture?.(event);
},
[onPointerDownCapture],
@@ -275,9 +260,6 @@ const QuickReactionButton = observer(
const {url: displayUrl} = getEmojiDisplayData(emoji);
const handleClick = useCallback(
(event: React.MouseEvent | React.KeyboardEvent) => {
if (suppressBlockedActivationClick(event)) {
return;
}
event.preventDefault();
event.stopPropagation();
EmojiPickerCommands.trackEmojiUsage(emoji);
@@ -700,7 +682,6 @@ export const MessageActionBarCore: React.FC<MessageActionBarCoreProps> = observe
uniqueId={`emoji_picker-actionbar-${message.id}`}
shouldAutoUpdate={false}
animationType="none"
shouldOpenOnClick={() => canUseWindowFocusedActivationClick()}
onOpen={handleEmojiPickerOpen}
onClose={handleEmojiPickerClose}
data-flx="channel.message-action-bar.message-action-bar-core.popout"
@@ -574,9 +574,10 @@ const StickerItem = observer(
},
);
export const MessageAttachments = observer(() => {
const {channel, message, handleDelete, previewContext, onPopoutToggle, readonlyPreview} = useMessageViewContext();
const {channel, message, handleDelete, previewContext, onPopoutToggle, suppressMessageActions} =
useMessageViewContext();
const isPreview = Boolean(previewContext);
const reactionsIsPreview = isPreview || Boolean(readonlyPreview);
const reactionsIsPreview = isPreview || Boolean(suppressMessageActions);
const reactions = useMessageReactionsSnapshot(message.id);
const {shouldAnimate, interactionHandlers} = useStickerAnimation();
const spoileredUrlEmbeds = useMemo(() => {
@@ -40,7 +40,7 @@ export interface MessageGroupProps {
messageRowClassName?: string;
messageActionsClassName?: string;
renderMessageActions?: (message: Message) => React.ReactNode;
readonlyPreview?: boolean;
suppressMessageActions?: boolean;
previewContext?: keyof typeof MessagePreviewContext;
behaviorOverrides?: MessageBehaviorOverrides;
renderMessageWrapper?: (props: MessageGroupRenderWrapperProps) => React.ReactNode;
@@ -61,7 +61,7 @@ export const MessageGroup: React.FC<MessageGroupProps> = observer((props) => {
messageRowClassName,
messageActionsClassName,
renderMessageActions,
readonlyPreview,
suppressMessageActions,
previewContext,
behaviorOverrides: providedBehaviorOverrides,
renderMessageWrapper,
@@ -70,14 +70,13 @@ export const MessageGroup: React.FC<MessageGroupProps> = observer((props) => {
const groupId = useMemo(() => messages[0]?.id, [messages]);
const behaviorOverrides = useMemo(
() =>
readonlyPreview
suppressMessageActions
? {
...providedBehaviorOverrides,
disableContextMenu: true,
prefersReducedMotion: true,
}
: providedBehaviorOverrides,
[readonlyPreview, providedBehaviorOverrides],
[suppressMessageActions, providedBehaviorOverrides],
);
const renderedMessages = useMemo(
() =>
@@ -96,7 +95,7 @@ export const MessageGroup: React.FC<MessageGroupProps> = observer((props) => {
compact={messageDisplayCompact}
idPrefix={idPrefix}
behaviorOverrides={behaviorOverrides}
readonlyPreview={readonlyPreview}
suppressMessageActions={suppressMessageActions}
previewContext={previewContext}
onHeadingActivate={getMessageHeadingActivate?.(message)}
data-flx="channel.message-group.rendered-messages.message-component"
@@ -151,7 +150,7 @@ export const MessageGroup: React.FC<MessageGroupProps> = observer((props) => {
messageActionsClassName,
renderMessageActions,
behaviorOverrides,
readonlyPreview,
suppressMessageActions,
previewContext,
renderMessageWrapper,
getMessageHeadingActivate,
@@ -34,7 +34,7 @@ export interface MessageViewContextValue {
previewPermissions?: MessagePreviewPermissions;
handleDelete: (bypassConfirm?: boolean) => void;
onPopoutToggle?: (isOpen: boolean) => void;
readonlyPreview?: boolean;
suppressMessageActions?: boolean;
onHeadingActivate?: () => void;
}
@@ -21,6 +21,7 @@ import {
reduceGIFVRenderState,
} from '@app/features/channel/components/embeds/media/GIFVRenderStateMachine';
import {GifIndicator} from '@app/features/channel/components/embeds/media/GifIndicator';
import {useGifViewportGate} from '@app/features/channel/components/embeds/media/GifViewportGate';
import {getMediaButtonVisibility} from '@app/features/channel/components/embeds/media/MediaButtonUtils';
import {MediaContainer, shouldShowOverlays} from '@app/features/channel/components/embeds/media/MediaContainer';
import type {BaseMediaProps} from '@app/features/channel/components/embeds/media/MediaTypes';
@@ -985,9 +986,15 @@ export const EmbedGif: FC<
const imgRef = useRef<HTMLImageElement>(null);
const animatedImageRef = useRef<HTMLImageElement>(null);
const freezeCanvasRef = useRef<HTMLCanvasElement>(null);
const {ref: visibilityRef, isNearViewport} = useNearViewport<HTMLDivElement>({
disabled: !isMobile,
const {shouldBlur, gateReason, canReveal, reveal: revealSensitiveMedia} = useMatureMedia(nsfw, channelId);
const {
ref: visibilityRef,
loadMedia: shouldLoadMedia,
animate: shouldAnimate,
} = useGifViewportGate<HTMLDivElement>({
element: containerElement,
rememberKey: proxyURL,
shouldBlur,
});
const setContainerRef = useCallback(
(node: HTMLDivElement | null) => {
@@ -1018,8 +1025,6 @@ export const EmbedGif: FC<
Math.round(displayHeight * 2),
);
const animatedImageSourceRef = useRef(optimizedAnimatedURL);
const {shouldBlur, gateReason, canReveal, reveal: revealSensitiveMedia} = useMatureMedia(nsfw, channelId);
const shouldLoadMedia = isNearViewport && !shouldBlur;
const {
loaded,
error,
@@ -1049,7 +1054,7 @@ export const EmbedGif: FC<
status: ImageCacheUtils.hasImage(optimizedAnimatedURL) ? 'ready' : 'idle',
});
const [decoderRequested, setDecoderRequested] = useState(() => getAnimatedMediaPlaybackAllowed());
const shouldUseDecoder = shouldLoadMedia && hasStartedAnimating;
const shouldUseDecoder = shouldAnimate && hasStartedAnimating;
const decoderPlaying =
shouldUseDecoder && decoderRequested && animatedMediaPlaybackAllowed && (gifAutoPlay || isHoveredState);
const decoderState = useAnimatedImageDecoder({
@@ -1061,7 +1066,7 @@ export const EmbedGif: FC<
const useDecoder =
shouldUseDecoder && decoderRequested && decoderState.supported && hasStartedAnimating && !decoderState.error;
const decoderCanvasVisible = useDecoder && decoderState.loaded;
const shouldRenderFreezeFrame = !decoderCanvasVisible && (gifAutoPlay || hasStartedAnimating);
const shouldRenderFreezeFrame = shouldAnimate && !decoderCanvasVisible && (gifAutoPlay || hasStartedAnimating);
const setAnimatedImageRef = useCallback(
(node: HTMLImageElement | null) => {
animatedImageRef.current = node;
@@ -1406,7 +1411,7 @@ export const EmbedGif: FC<
...(aspectRatio ? {aspectRatio} : {}),
} as React.CSSProperties;
const shouldUseAnimatedImage =
shouldLoadMedia &&
shouldAnimate &&
animatedMediaPlaybackAllowed &&
!decoderCanvasVisible &&
(gifAutoPlay || (hasStartedAnimating && isHoveredState));
@@ -356,9 +356,9 @@ const EmbedVideo: FC<EmbedVideoProps> = observer(
() => {
if (!active) return;
setLoadedPosterSrc(posterSrc);
const image = ImageCacheUtils.getImage(posterSrc);
if (active && image && image.naturalWidth > 0 && image.naturalHeight > 0) {
setPosterNaturalDimensions({src: posterSrc, width: image.naturalWidth, height: image.naturalHeight});
const posterSize = ImageCacheUtils.getImageSize(posterSrc);
if (active && posterSize) {
setPosterNaturalDimensions({src: posterSrc, width: posterSize.width, height: posterSize.height});
}
},
() => {
@@ -0,0 +1,56 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {useNearViewport} from '@app/features/messaging/hooks/useNearViewport';
import {observeIntersection} from '@app/features/platform/utils/SharedIntersectionObserver';
import {useEffect, useState} from 'react';
const ANIMATION_ROOT_MARGIN = '600px 0px';
export interface GifViewportGate {
loadMedia: boolean;
animate: boolean;
}
export function resolveGifViewportGate({
isNearViewport,
isInViewport,
shouldBlur,
}: {
isNearViewport: boolean;
isInViewport: boolean;
shouldBlur: boolean;
}): GifViewportGate {
if (shouldBlur) return {loadMedia: false, animate: false};
return {loadMedia: isNearViewport, animate: isNearViewport && isInViewport};
}
export function useGifViewportGate<T extends Element>({
element,
rememberKey,
shouldBlur,
}: {
element: Element | null;
rememberKey: string;
shouldBlur: boolean;
}): GifViewportGate & {ref: (node: T | null) => void} {
const {ref, isNearViewport} = useNearViewport<T>({rememberKey});
const [isInViewport, setIsInViewport] = useState(() => typeof IntersectionObserver === 'undefined');
useEffect(() => {
if (typeof IntersectionObserver === 'undefined') {
setIsInViewport(true);
return;
}
if (element == null) {
setIsInViewport(false);
return;
}
return observeIntersection(
element,
(entry) => {
setIsInViewport(entry.isIntersecting || entry.intersectionRatio > 0);
},
{rootMargin: ANIMATION_ROOT_MARGIN},
);
}, [element]);
return {ref, ...resolveGifViewportGate({isNearViewport, isInViewport, shouldBlur})};
}
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {trackedRecipientNameKey} from '@app/features/channel/state/ChannelDisplayNameTracking';
import {onLocaleChange} from '@app/features/i18n/utils/LocaleChangeListener';
import {deferUntilModulesLoaded} from '@app/features/platform/utils/DeferUntilModulesLoaded';
import {noteText} from '@app/features/theme/fonts/ScriptFontLoader';
@@ -48,12 +49,8 @@ class ChannelDisplayName {
deferUntilModulesLoaded(() => {
reaction(
() => {
if (!Users) return [];
return Users.usersList.map((user) => ({
id: user.id,
username: user.username,
globalName: user.globalName,
}));
if (!Users) return '';
return trackedRecipientNameKey(this.channelSnapshots, Users.users);
},
() => this.recomputeAll(),
);
@@ -0,0 +1,129 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {
type TrackedRecipientSnapshot,
type TrackedRecipientUser,
trackedRecipientNameKey,
} from '@app/features/channel/state/ChannelDisplayNameTracking';
import {autorun, observable, runInAction} from 'mobx';
import {describe, expect, it} from 'vitest';
const snapshots = (entries: Record<string, ReadonlyArray<string>>): ReadonlyMap<string, TrackedRecipientSnapshot> =>
new Map(Object.entries(entries).map(([id, recipientIds]) => [id, {recipientIds}]));
const userTable = (count: number): Record<string, TrackedRecipientUser> => {
const users: Record<string, TrackedRecipientUser> = {};
for (let i = 0; i < count; i++) {
users[`u${i}`] = {username: `user${i}`, globalName: null};
}
return users;
};
/** Wraps a user table so we can count exactly which keys get read. */
const countingUsers = (
users: Record<string, TrackedRecipientUser | undefined>,
): {proxy: Record<string, TrackedRecipientUser | undefined>; reads: Array<string>} => {
const reads: Array<string> = [];
const proxy = new Proxy(users, {
get(target, key, receiver) {
if (typeof key === 'string') reads.push(key);
return Reflect.get(target, key, receiver);
},
});
return {proxy, reads};
};
describe('trackedRecipientNameKey', () => {
it('reads only the recipients of tracked group DMs, not the whole user cache', () => {
const {proxy, reads} = countingUsers(userTable(10_000));
trackedRecipientNameKey(snapshots({c1: ['u1', 'u2'], c2: ['u3']}), proxy);
// The cost must be a function of tracked recipients, never of cache size.
expect(reads).toEqual(['u1', 'u2', 'u3']);
});
it('cost is independent of how large the user cache grows', () => {
const small = countingUsers(userTable(10));
const huge = countingUsers(userTable(100_000));
const tracked = snapshots({c1: ['u1', 'u2']});
trackedRecipientNameKey(tracked, small.proxy);
trackedRecipientNameKey(tracked, huge.proxy);
expect(small.reads.length).toBe(2);
expect(huge.reads.length).toBe(2);
});
it('changes when a tracked recipient is renamed', () => {
const users = userTable(3);
const tracked = snapshots({c1: ['u1']});
const before = trackedRecipientNameKey(tracked, users);
users.u1 = {username: 'renamed', globalName: null};
expect(trackedRecipientNameKey(tracked, users)).not.toBe(before);
});
it('does not change when an untracked user is renamed', () => {
const users = userTable(3);
const tracked = snapshots({c1: ['u1']});
const before = trackedRecipientNameKey(tracked, users);
users.u2 = {username: 'unrelated-change', globalName: 'also changed'};
expect(trackedRecipientNameKey(tracked, users)).toBe(before);
});
it('distinguishes a missing recipient from one that arrives later', () => {
const users: Record<string, TrackedRecipientUser | undefined> = {};
const tracked = snapshots({c1: ['u1']});
const before = trackedRecipientNameKey(tracked, users);
users.u1 = {username: 'arrived', globalName: null};
expect(trackedRecipientNameKey(tracked, users)).not.toBe(before);
});
it('is not confused by usernames containing the separator characters', () => {
const tracked = snapshots({c1: ['a', 'b']});
const collidingLeft: Record<string, TrackedRecipientUser> = {
a: {username: 'x", "y', globalName: null},
b: {username: '', globalName: null},
};
const collidingRight: Record<string, TrackedRecipientUser> = {
a: {username: '', globalName: null},
b: {username: 'x", "y', globalName: null},
};
expect(trackedRecipientNameKey(tracked, collidingLeft)).not.toBe(trackedRecipientNameKey(tracked, collidingRight));
});
it('drives a MobX reaction on tracked renames but stays quiet on untracked ones', () => {
const users = observable.object<Record<string, TrackedRecipientUser | undefined>>({
u1: {username: 'one', globalName: null},
u2: {username: 'two', globalName: null},
});
const tracked = snapshots({c1: ['u1']});
let runs = 0;
const dispose = autorun(() => {
trackedRecipientNameKey(tracked, users);
runs++;
});
expect(runs).toBe(1);
// An untracked user changing must not wake the reaction.
runInAction(() => {
users.u2 = {username: 'two-renamed', globalName: null};
});
expect(runs).toBe(1);
// A tracked user changing must.
runInAction(() => {
users.u1 = {username: 'one-renamed', globalName: null};
});
expect(runs).toBe(2);
dispose();
});
});
@@ -0,0 +1,24 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
export interface TrackedRecipientSnapshot {
readonly recipientIds: ReadonlyArray<string>;
}
export interface TrackedRecipientUser {
readonly username: string;
readonly globalName?: string | null;
}
export const trackedRecipientNameKey = (
snapshots: ReadonlyMap<string, TrackedRecipientSnapshot>,
users: Record<string, TrackedRecipientUser | undefined>,
): string => {
const parts: Array<[string, string, string]> = [];
for (const snapshot of snapshots.values()) {
for (const recipientId of snapshot.recipientIds) {
const user = users[recipientId];
parts.push([recipientId, user?.username ?? '', user?.globalName ?? '']);
}
}
return JSON.stringify(parts);
};
+133 -35
View File
@@ -16,7 +16,7 @@ import type {Channel as WireChannel} from '@fluxer/schema/src/domains/channel/Ch
import type {Message as WireMessage} from '@fluxer/schema/src/domains/message/MessageResponseSchemas';
import type {UserPartial} from '@fluxer/schema/src/domains/user/UserResponseSchemas';
import * as SnowflakeUtils from '@fluxer/snowflake/src/SnowflakeUtils';
import {action, makeAutoObservable} from 'mobx';
import {action, makeAutoObservable, observable} from 'mobx';
const EMPTY_CHANNELS: ReadonlyArray<Channel> = Object.freeze([]);
const sortDMs = (a: Channel, b: Channel) => {
@@ -30,12 +30,37 @@ const sortDMs = (a: Channel, b: Channel) => {
return b.createdAt.getTime() - a.createdAt.getTime();
};
const isPrivateChannel = (channel: Channel) =>
channel.type === ChannelTypes.DM || channel.type === ChannelTypes.GROUP_DM;
const insertSorted = (channels: ReadonlyArray<Channel>, channel: Channel): Array<Channel> => {
let low = 0;
let high = channels.length;
while (low < high) {
const middle = (low + high) >>> 1;
if (ChannelUtils.compareChannels(channels[middle], channel) <= 0) {
low = middle + 1;
} else {
high = middle;
}
}
const next = channels.slice();
next.splice(low, 0, channel);
return next;
};
class Channels {
private readonly channelsById = new Map<string, Channel>();
private readonly channelsByGuildId = new Map<string, ReadonlyArray<Channel>>();
private privateChannelList: ReadonlyArray<Channel> = EMPTY_CHANNELS;
private readonly optimisticChannelBackups = new Map<string, Channel>();
constructor() {
makeAutoObservable(this, {}, {autoBind: true});
makeAutoObservable<this, 'channelsByGuildId' | 'privateChannelList'>(
this,
{channelsByGuildId: observable.shallow, privateChannelList: observable.ref},
{autoBind: true},
);
}
get channels(): ReadonlyArray<Channel> {
@@ -51,31 +76,14 @@ class Channels {
readonly dms: ReadonlyArray<Channel>;
readonly privateChannels: ReadonlyArray<Channel>;
} {
const byGuild = new Map<string, Array<Channel>>();
const dms: Array<Channel> = [];
const privateChannels: Array<Channel> = [];
for (const channel of this.channelsById.values()) {
if (channel.guildId) {
let list = byGuild.get(channel.guildId);
if (!list) {
list = [];
byGuild.set(channel.guildId, list);
}
list.push(channel);
} else if (channel.type === ChannelTypes.DM || channel.type === ChannelTypes.GROUP_DM) {
privateChannels.push(channel);
dms.push(channel);
}
}
for (const list of byGuild.values()) {
list.sort(ChannelUtils.compareChannels);
}
dms.sort(sortDMs);
return {byGuild, dms, privateChannels};
return {byGuild: this.channelsByGuildId, dms: this.dmChannels, privateChannels: this.privateChannelList};
}
get dmChannels(): ReadonlyArray<Channel> {
return this.channelGroups.dms;
if (this.privateChannelList.length === 0) {
return EMPTY_CHANNELS;
}
return this.privateChannelList.slice().sort(sortDMs);
}
getChannel(channelId: string): Channel | undefined {
@@ -83,11 +91,11 @@ class Channels {
}
getGuildChannels(guildId: string): ReadonlyArray<Channel> {
return this.channelGroups.byGuild.get(guildId) ?? EMPTY_CHANNELS;
return this.channelsByGuildId.get(guildId) ?? EMPTY_CHANNELS;
}
getPrivateChannels(): ReadonlyArray<Channel> {
return this.channelGroups.privateChannels;
return this.privateChannelList;
}
@action
@@ -100,8 +108,7 @@ class Channels {
return;
}
this.optimisticChannelBackups.set(channelId, channel);
this.channelsById.delete(channelId);
ChannelDisplayName.removeChannel(channelId);
this.deleteChannelRecord(channelId);
}
@action
@@ -122,7 +129,16 @@ class Channels {
@action
private removeChannel(channelId: string): void {
this.clearOptimisticallyRemovedChannel(channelId);
this.deleteChannelRecord(channelId);
}
@action
private deleteChannelRecord(channelId: string): void {
const channel = this.channelsById.get(channelId);
this.channelsById.delete(channelId);
if (channel) {
this.removeChannelFromIndex(channel);
}
ChannelDisplayName.removeChannel(channelId);
}
@@ -134,12 +150,95 @@ class Channels {
return;
}
this.channelsById.set(record.id, record);
this.indexChannel(existing, record);
ChannelDisplayName.syncChannel(record);
}
@action
private indexChannel(previous: Channel | undefined, next: Channel): void {
if (previous && previous.guildId === next.guildId && isPrivateChannel(previous) === isPrivateChannel(next)) {
this.replaceChannelInIndex(previous, next);
return;
}
if (previous) {
this.removeChannelFromIndex(previous);
}
this.addChannelToIndex(next);
}
@action
private addChannelToIndex(channel: Channel): void {
if (channel.guildId) {
const list = this.channelsByGuildId.get(channel.guildId) ?? EMPTY_CHANNELS;
this.channelsByGuildId.set(channel.guildId, insertSorted(list, channel));
return;
}
if (isPrivateChannel(channel)) {
this.privateChannelList = [...this.privateChannelList, channel];
}
}
@action
private removeChannelFromIndex(channel: Channel): void {
if (channel.guildId) {
const list = this.channelsByGuildId.get(channel.guildId);
if (!list) {
return;
}
const next = list.filter((entry) => entry.id !== channel.id);
if (next.length === list.length) {
return;
}
if (next.length === 0) {
this.channelsByGuildId.delete(channel.guildId);
} else {
this.channelsByGuildId.set(channel.guildId, next);
}
return;
}
if (isPrivateChannel(channel)) {
const next = this.privateChannelList.filter((entry) => entry.id !== channel.id);
if (next.length !== this.privateChannelList.length) {
this.privateChannelList = next;
}
}
}
@action
private replaceChannelInIndex(previous: Channel, next: Channel): void {
if (next.guildId) {
const list = this.channelsByGuildId.get(next.guildId);
const index = list ? list.findIndex((entry) => entry.id === next.id) : -1;
if (!list || index === -1) {
this.addChannelToIndex(next);
return;
}
const updated = list.slice();
updated[index] = next;
if (ChannelUtils.compareChannels(previous, next) !== 0) {
updated.sort(ChannelUtils.compareChannels);
}
this.channelsByGuildId.set(next.guildId, updated);
return;
}
if (!isPrivateChannel(next)) {
return;
}
const index = this.privateChannelList.findIndex((entry) => entry.id === next.id);
if (index === -1) {
this.addChannelToIndex(next);
return;
}
const updated = this.privateChannelList.slice();
updated[index] = next;
this.privateChannelList = updated;
}
@action
handleConnectionOpen({channels}: {channels: ReadonlyArray<WireChannel>}): void {
this.channelsById.clear();
this.channelsByGuildId.clear();
this.privateChannelList = EMPTY_CHANNELS;
ChannelDisplayName.clear();
const allRecipients = channels
.filter((channel) => channel.recipients && channel.recipients.length > 0)
@@ -177,7 +276,7 @@ class Channels {
return;
}
const syncedChannelIds = new Set(guild.channels.map((channel) => channel.id));
const existingGuildChannels = this.channelGroups.byGuild.get(guild.id) ?? EMPTY_CHANNELS;
const existingGuildChannels = this.getGuildChannels(guild.id);
for (const channel of existingGuildChannels) {
if (!syncedChannelIds.has(channel.id)) {
this.removeChannel(channel.id);
@@ -190,8 +289,8 @@ class Channels {
@action
handleGuildDelete({guildId}: {guildId: string}): void {
const guildChannels = this.channelGroups.byGuild.get(guildId);
if (!guildChannels || guildChannels.length === 0) return;
const guildChannels = this.getGuildChannels(guildId);
if (guildChannels.length === 0) return;
const ids: Array<string> = [];
for (const channel of guildChannels) ids.push(channel.id);
for (const id of ids) {
@@ -269,8 +368,7 @@ class Channels {
return;
}
if (user.id === Authentication.currentUserId) {
this.channelsById.delete(channelId);
ChannelDisplayName.removeChannel(channelId);
this.deleteChannelRecord(channelId);
const history = RouterUtils.getHistory();
const currentPath = history?.location.pathname ?? '';
const expectedPath = Routes.dmChannel(channelId);
@@ -332,8 +430,8 @@ class Channels {
@action
handleGuildRoleDelete({guildId, roleId}: {guildId: string; roleId: string}): void {
const guildChannels = this.channelGroups.byGuild.get(guildId);
if (!guildChannels || guildChannels.length === 0) return;
const guildChannels = this.getGuildChannels(guildId);
if (guildChannels.length === 0) return;
const snapshot = Array.from(guildChannels);
for (const channel of snapshot) {
if (!(roleId in channel.permissionOverwrites)) {
@@ -7,6 +7,7 @@ import * as NavigationCommands from '@app/features/navigation/commands/Navigatio
import {failureCode} from '@app/features/platform/utils/ResponseInspection';
import * as ModalCommands from '@app/features/ui/commands/ModalCommands';
import {modal} from '@app/features/ui/commands/ModalCommands';
import Users from '@app/features/user/state/Users';
import {APIErrorCodes} from '@fluxer/constants/src/ApiErrorCodes';
import {msg} from '@lingui/core/macro';
@@ -100,7 +101,11 @@ function resolveJoinGuildErrorContent(code: string | undefined): {title: string;
}
function showJoinGuildErrorModal(error: unknown): void {
const {title, message} = resolveJoinGuildErrorContent(failureCode(error));
const code = failureCode(error);
if (code === APIErrorCodes.ACCOUNT_SUSPICIOUS_ACTIVITY && (Users.currentUser?.requiredActions?.length ?? 0) > 0) {
return;
}
const {title, message} = resolveJoinGuildErrorContent(code);
ModalCommands.push(
modal(() => <GenericErrorModal title={title} message={message} data-flx="discovery.join.generic-error-modal" />),
);
@@ -43,6 +43,7 @@ interface BatchRequest {
const PARALLEL_FRAME_THRESHOLD = 8;
const PARALLEL_PIXEL_THRESHOLD = 1_000_000;
const WORKER_IDLE_TIMEOUT_MS = 30_000;
export class CropPipelineError extends Error {
readonly code: CropWorkerErrorCode;
@@ -70,6 +71,8 @@ export class AnimatedImageCropWorkerManager {
private readonly pendingBatchRequests = new Set<BatchRequest>();
private readonly maxWorkers: number;
private terminated = false;
private activeJobCount = 0;
private idleTerminationTimeout: NodeJS.Timeout | null = null;
private readonly workerTimeout: number = 30000;
private constructor() {
@@ -197,12 +200,27 @@ export class AnimatedImageCropWorkerManager {
if (this.terminated) {
throw new CropPipelineError('internal', 'Worker manager has been terminated');
}
this.beginJob();
return this.dispatchLibfluxcoreWorker(imageBytes, format, options, outputFormat).finally(() => {
this.endJob();
});
}
private dispatchLibfluxcoreWorker(
imageBytes: Uint8Array,
format: CropWorkerImageFormat,
options: CropParams,
outputFormat: CropOutputFormat | undefined,
): Promise<Uint8Array> {
if (this.terminated) {
return Promise.reject(new CropPipelineError('internal', 'Worker manager has been terminated'));
}
this.ensureWorkersInitialized();
const workerState = this.findAvailableWorker();
if (!workerState) {
return new Promise((resolve, reject) => {
setTimeout(() => {
this.runLibfluxcoreWorker(imageBytes, format, options, outputFormat).then(resolve, reject);
this.dispatchLibfluxcoreWorker(imageBytes, format, options, outputFormat).then(resolve, reject);
}, 50);
});
}
@@ -316,25 +334,30 @@ export class AnimatedImageCropWorkerManager {
frames: Array<NativeFrame>,
options: CropOptionsEx,
): Promise<Array<NativeFrame>> {
this.ensureWorkersInitialized();
const availableWorkers = this.workers.filter((worker) => !worker.busy);
if (availableWorkers.length <= 1) {
return frames.map((frame) => cropDecodedFrame(frame, options));
this.beginJob();
try {
this.ensureWorkersInitialized();
const availableWorkers = this.workers.filter((worker) => !worker.busy);
if (availableWorkers.length <= 1) {
return frames.map((frame) => cropDecodedFrame(frame, options));
}
const batches = createFrameBatches(frames, availableWorkers.length);
const results = await Promise.all(
batches.map((batch, index) =>
this.processFrameBatchWithWorker(availableWorkers[index], index + 1, batch, options),
),
);
const ordered: Array<NativeFrame | undefined> = new Array(frames.length);
for (const batch of results) {
for (const item of batch) ordered[item.index] = item.frame;
}
return ordered.map((frame, index) => {
if (!frame) throw new CropPipelineError('internal', `Missing transformed frame ${index}`);
return frame;
});
} finally {
this.endJob();
}
const batches = createFrameBatches(frames, availableWorkers.length);
const results = await Promise.all(
batches.map((batch, index) =>
this.processFrameBatchWithWorker(availableWorkers[index], index + 1, batch, options),
),
);
const ordered: Array<NativeFrame | undefined> = new Array(frames.length);
for (const batch of results) {
for (const item of batch) ordered[item.index] = item.frame;
}
return ordered.map((frame, index) => {
if (!frame) throw new CropPipelineError('internal', `Missing transformed frame ${index}`);
return frame;
});
}
private processFrameBatchWithWorker(
@@ -417,6 +440,54 @@ export class AnimatedImageCropWorkerManager {
return null;
}
private beginJob(): void {
this.clearIdleTermination();
this.activeJobCount += 1;
}
private endJob(): void {
this.activeJobCount = Math.max(0, this.activeJobCount - 1);
this.scheduleIdleTermination();
}
private isPoolIdle(): boolean {
return (
this.activeJobCount === 0 &&
this.pendingBatchRequests.size === 0 &&
this.workers.every((workerState) => !workerState.busy && workerState.currentRequest === null)
);
}
private clearIdleTermination(): void {
if (this.idleTerminationTimeout === null) {
return;
}
clearTimeout(this.idleTerminationTimeout);
this.idleTerminationTimeout = null;
}
private scheduleIdleTermination(): void {
this.clearIdleTermination();
if (this.terminated || this.workers.length === 0 || !this.isPoolIdle()) {
return;
}
this.idleTerminationTimeout = setTimeout(() => {
this.idleTerminationTimeout = null;
if (this.isPoolIdle()) {
this.terminateIdleWorkers();
}
}, WORKER_IDLE_TIMEOUT_MS);
}
private terminateIdleWorkers(): void {
for (const workerState of this.workers) {
try {
workerState.worker.terminate();
} catch {}
}
this.workers = [];
}
getActiveWorkerCount(): number {
return this.workers.filter((w) => w.busy).length;
}
@@ -430,6 +501,7 @@ export class AnimatedImageCropWorkerManager {
return;
}
this.terminated = true;
this.clearIdleTermination();
for (const workerState of this.workers) {
if (workerState.currentRequest) {
clearTimeout(workerState.currentRequest.timeout);
@@ -453,6 +525,7 @@ export class AnimatedImageCropWorkerManager {
}
this.terminated = false;
this.ensureWorkersInitialized();
this.scheduleIdleTermination();
}
}
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(أنت)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# عضو} other {# أعضاء}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "لا يدعم {blikPaymentMethod} الاشتراكات في صفحة الدفع الخاصة بـ {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}، {count, plural, zero {لا مجتمعات} one {مجتمع واحد} two {مجتمعان} few {# مجتمعات} many {# مجتمعًا} other {# مجتمع}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}، {mentionCount} إشارة"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}، {mentionCount, plural, one {# إشارة} other {# إشارات}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# إشارة مرجعية} few {# إشارات مرجعية} many {# إشارة مرجعية} other {# إشارة مرجعية}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# مجتمع تم العثور عليه} other {# مجتمعات تم العثور عليها}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# مجموعة غير متاحة مؤقتًا بسبب عطل في مكثف التدفق.} other {# مجموعات غير متاحة مؤقتًا بسبب عطل في مكثف التدفق.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# جهاز محدد لتسجيل الخروج} other {# أجهزة محددة لتسجيل الخروج}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} طلبات صداقة"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} رسالة خاصة غير مقروءة"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} دقيقة"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "مجلد {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "يوم واحد"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "طلب صداقة واحد"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "رسالة واحدة غير مقروءة"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "رسالة مباشرة واحدة غير مقروءة"
@@ -2248,13 +2248,13 @@ msgstr "نقرة التفعيل"
msgid "Active"
msgstr "نشط"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "الحساب النشط"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "مكالمة نشطة"
@@ -2907,8 +2907,8 @@ msgstr "عناصر التحكم في المحاذاة متاحة فقط على
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "الكل"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "جميع المدخلات تفاعلية بالكامل، لذا اكتب ما تريد."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "كل اللغات"
@@ -5785,8 +5785,8 @@ msgstr "لا يمكن تحميل الملفات هنا"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "لا يمكن تحميل الملفات هنا"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "يمكن للبطاقات الاحتفاظ بأسعار الليرة ا
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "الفئات"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "الفئة"
@@ -6313,7 +6313,7 @@ msgstr "تُطبّق التغييرات فورًا على العميل المب
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "القناة"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "القناة"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "القناة {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "الوصول إلى القناة"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "لا يمكن الوصول إلى القناة"
@@ -6408,7 +6408,7 @@ msgstr "تم نسخ معرّف القناة إلى الحافظة"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "رابط القناة"
@@ -7009,7 +7009,7 @@ msgstr "المطالبة بحسابك"
msgid "Claim your account and verify your email to send reports."
msgstr "للمطالبة بحسابك والتحقق من بريدك الإلكتروني، يمكنك إرسال التقارير."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "استرجع حسابك بإضافة بريد إلكتروني وكلمة مرور. سنرسل رمز تحقق لتأكيد بريدك الإلكتروني قبل الانتهاء."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "طي"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "طي {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "طي الرسائل غير المقروءة لـ {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "مطوي"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "الاتصال باستخدام {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "متصل"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "نسخ رابط البانر"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "نسخ معلومات الإصدار"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "انسخ مفتاح الإعداد في تطبيق المصادقة الخاص بك."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "نسخ معرّف المستخدم"
@@ -8923,7 +8923,7 @@ msgstr "نسخ الفيديو"
msgid "Copy video link"
msgstr "نسخ رابط الفيديو"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "نسخ تشخيصات الصوت"
@@ -11195,13 +11195,13 @@ msgstr "حالة المطور"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "أدوات المطور"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "أدوات المطور متاحة من شارة الموظف في رأس القناة."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "تم سحب طلب الاكتشاف"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "فئات الاستكشاف"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "التنقل في الاستكشاف"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "نتائج الاستكشاف"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "بحث الاكتشاف"
@@ -12366,7 +12366,7 @@ msgstr "تعديل المرفق"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "تعديل أو حذف الرموز التعبيرية والملصقا
msgid "Edit overwrites for roles and members in this channel."
msgstr "تعديل التجاوزات للأدوار والأعضاء في هذه القناة."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "تعديل الملف الشخصي"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "رموز تعبيرية"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "المفضلة فارغة"
@@ -13465,7 +13465,7 @@ msgstr "أدخل الرمز المعروض في التطبيق للمتابعة.
msgid "Enter the code we emailed to your new address."
msgstr "أدخل الرمز الذي أرسلناه إلى عنوان بريدك الإلكتروني الجديد."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "أدخل الرمز الذي أرسلناه إلى بريدك الإلكتروني للتحقق منه. سيتم تعيين كلمة مرورك بمجرد تأكيد الرمز."
@@ -13802,8 +13802,8 @@ msgstr "توسيع الرسائل غير المقروءة لـ {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "موسّعة"
@@ -13831,7 +13831,7 @@ msgstr "تنتهي بعد"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "إعدادات فلتر المحتوى الصريح"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "استكشاف"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "فلترة حسب طريقة الانضمام"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "فلترة حسب اللغة"
@@ -14801,7 +14801,7 @@ msgstr "صوت مركّز"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "مجلد"
@@ -17155,7 +17155,7 @@ msgstr "في وضع \"نظام التشغيل\"، تكون القواميس ال
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "في المتصفح، لا تعمل ميزة الضغط والتحدث إلا عندما تكون علامة تبويب {PRODUCT_NAME} في التركيز. ثبّت تطبيق سطح المكتب لاستخدام ميزة الضغط والتحدث على مستوى النظام."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "في مكالمة"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "رابط الدعوة مخفي أثناء المشاركة:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "تم إخفاء رابط الدعوة أثناء المشاركة"
@@ -17756,7 +17756,7 @@ msgstr "إخفاء الدعوات"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "الانتقال إلى {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "الانتقال إلى {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "الانتقال إلى المكالمة الحالية"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "الانتقال إلى القناة المرتبطة"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "الانتقال إلى الرسالة المرتبطة"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "انتقل إلى رسالة من {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "الانتقال إلى الرسالة في {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "السمة الفاتحة"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "أعجبني"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "تم الإعجاب."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "إعجابات"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "تنسيق الروابط"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "الرابط غير متاح"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "جارٍ تحميل المستخدمين المحظورين"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "جارٍ تحميل المجتمعات"
@@ -19268,7 +19268,7 @@ msgstr "برامج ضارة، أو سرقة بيانات اعتماد، أو م
msgid "Manage"
msgstr "إدارة"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "إدارة الحسابات"
@@ -20079,8 +20079,8 @@ msgstr "رسالة"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "رسالة"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "تخطيط الرسائل"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "رابط الرسالة"
@@ -20665,7 +20665,7 @@ msgstr "هدية شهرية"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "كتم صوت البث"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "جديد"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "جديد"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "ليس لديك إذن {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "لا يوجد وصول"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "فتح {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "افتح {labelText} في الإعدادات"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "فتح الدردشة"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "إنهاء {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "اقتباس"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "اقتباسات"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "علامة المستخدم المُبلّغ عنه (اختياري)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "إعادة نشر"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "إعادات النشر"
@@ -26470,7 +26470,7 @@ msgstr "يتطلب كل ما في المستوى المتوسط، بالإضاف
msgid "Reschedule message"
msgstr "إعادة جدولة الرسالة"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "إعادة الإرسال ({originalSecondsRemaining}ث)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "إعادة الإرسال ({resendCooldownSeconds}ث)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "إعادة الإرسال ({resendSecondsRemaining}ث)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "التشبع"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "حفظ"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "تم الحفظ."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "عمليات الحفظ"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "البحث في القنوات أو المحادثات الخاصة"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "البحث عن مجتمعات"
@@ -27758,7 +27758,7 @@ msgstr "فلتر البحث: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "فلاتر البحث"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "نتائج البحث"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "نتائج البحث عن «{query}»"
@@ -28232,8 +28232,8 @@ msgstr "نص قابل للتحديد"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "زر الإرسال"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "إرسال برامج ضارة أو روابط خطيرة"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "تم تعطيل إرسال الرسائل في هذا المجتمع"
@@ -28623,7 +28623,7 @@ msgstr "الجلسات"
msgid "Set {fieldNode} to {0}."
msgstr "تم تعيين {fieldNode} إلى {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "تعيين حالة مخصصة"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "الإعدادات"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "رابط الإعدادات"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "تخطّي هذه الخطوة"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "تجاوز إلى المحتوى"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "الوضع البطيء"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "الوضع البطيء · انتظر {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "السويدية"
msgid "Switch account"
msgstr "تبديل الحساب"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "تبديل الحسابات"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "قناة الرابط هذه مخصصة للمحتوى الناضج وقد تفتح مواد قد تكون غير مناسبة لبعض المستخدمين."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "هذا الرابط غير متاح لحسابك."
@@ -34716,9 +34716,9 @@ msgstr "محادثة جماعية غير مثبتة"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "تفعيل الصوت"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "نشاط صوتي"
@@ -36716,7 +36716,7 @@ msgstr "مكالمة صوتية. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "قناة صوتية"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "لقد غيرت علامتك أثناء استخدامك لـ {PREMIUM_PRODUCT_NAME}. ستتغير عشوائيًا عند انتهاء صلاحية {PREMIUM_PRODUCT_NAME} الخاص بك، ما لم يتم تجديده."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "ليس لديك صلاحية الوصول إلى القناة التي أُرسلت منها هذه الرسالة."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "تحتاج إلى الوصول إلى بريدك الإلكتروني الحالي لتغييره من هنا. استخدم التحقق عبر الهاتف إذا كان متاحًا أو اتصل بالدعم."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "أنت بحاجة إلى إذن \"{attachFilesPermissionLabel}\" لإرفاق الملفات في هذه القناة"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "أنت بحاجة إلى إذن \"{embedLinksPermissionLabel}\" لتضمين الروابط في هذه القناة"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "أنت بحاجة إلى إذن \"{permissionLabel}\" لاستخدام الملصقات من المجتمعات الأخرى هنا."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "أنت بحاجة إلى إذن \"{sendMessagesPermissionLabel}\" لإرسال الرسائل في هذه القناة"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "أنت تستخدم سعرًا قديمًا. السعر الحالي لهذه الخطة هو {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "أنت في فترة توقف مؤقت في هذا المجتمع"
@@ -38583,7 +38583,7 @@ msgstr "لقد وصلت إلى الحد الأقصى من المجتمعات"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "لقد وصلت إلى النهاية"
@@ -38627,7 +38627,7 @@ msgstr "لقد تلقيت هدية"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "لقد طلبت عددًا كبيرًا جدًا من رسائل البريد الإلكتروني للتحقق. يُرجى الانتظار لحظة والمحاولة مرة أخرى."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "لقد شاهدت جميع الإشارات الأخيرة. ستظهر المزيد هنا قريبًا."
File diff suppressed because it is too large Load Diff
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(вие)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# член} other {# члена}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} не поддържа абонаменти при плащане чрез {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# общност} other {# общности}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} споменавания"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# споменаване} other {# споменавания}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# отметка} other {# отметки}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# общност намерена} other {# общности намерени}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# общност е временно недостъпна поради неизправност на флукс кондензатора.} other {# общности са временно недостъпни поради неизправност на флукс кондензатора.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# избрано устройство за излизане} other {# избрани устройства за излизане}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} покани за приятелство"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} непрочетени лични съобщения"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} минути"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Папка \"{folderName}\""
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 ден"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 покана за приятелство"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 непрочетено"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 непрочетено лично съобщение"
@@ -2248,13 +2248,13 @@ msgstr "Клик за активиране"
msgid "Active"
msgstr "Активен"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Активен акаунт"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "активно обаждане"
@@ -2907,8 +2907,8 @@ msgstr "Контролите за подравняване са налични
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Всички"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Всички полета са напълно интерактивни, така че пишете смело."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Всички езици"
@@ -5785,8 +5785,8 @@ msgstr "Не може да се качват файлове тук"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Не може да се качват файлове тук"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Картите могат да запазят цените в TRY сле
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Категории"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "категория"
@@ -6313,7 +6313,7 @@ msgstr "Промените се прилагат незабавно към ак
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "Канал"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Канал"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Канал {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Достъп до канал"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Достъпът до канала е отказан"
@@ -6408,7 +6408,7 @@ msgstr "Идентификаторът на канала е копиран в к
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "линк към канал"
@@ -7009,7 +7009,7 @@ msgstr "Заяви акаунта си"
msgid "Claim your account and verify your email to send reports."
msgstr "Заявете профила си и потвърдете имейла си, за да изпращате доклади."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Заявете профила си, като добавите имейл и парола. Ще изпратим код за потвърждение на имейла ви, преди да приключите."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Свиване"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Свиване на {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Свиване на непрочетените съобщения за {
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "свито"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Свързване с {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "свързан"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Копирай URL на банер"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Копирай инфо за версията"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Копирайте ключа за настройка във вашето приложение за удостоверяване."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Копирай потребителски ID"
@@ -8923,7 +8923,7 @@ msgstr "Копирай видеоклип"
msgid "Copy video link"
msgstr "Копиране на връзка към видеоклипа"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Копиране на гласова диагностика"
@@ -11195,13 +11195,13 @@ msgstr "Състояние за разработчици"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Инструменти за разработчици"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Инструментите за разработчици са достъпни от значката за персонал в заглавката на канала."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Заявлението за откриване е оттеглено"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Категории за откриване"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Навигация за откриване"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Резултати от открития"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Търсене в Discovery"
@@ -12366,7 +12366,7 @@ msgstr "Редактиране на прикачен файл"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Редактиране или изтриване на емоджита
msgid "Edit overwrites for roles and members in this channel."
msgstr "Редактиране на отменяния за роли и членове в този канал."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Редактиране на профил"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Емотикони"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Няма любими"
@@ -13465,7 +13465,7 @@ msgstr "Въведете кода, показан в приложението,
msgid "Enter the code we emailed to your new address."
msgstr "Въведете кода, който изпратихме на новия ви имейл адрес."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Въведете кода, който изпратихме на имейла ви, за да го потвърдите. Паролата ви ще бъде зададена, след като кодът бъде потвърден."
@@ -13802,8 +13802,8 @@ msgstr "Разгъване на непрочетените съобщения з
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "разгънато"
@@ -13831,7 +13831,7 @@ msgstr "Изтича след"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Настройки на филтъра за изрично съдържание"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Разглеждане"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Филтриране по метод на присъединяване"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Филтриране по език"
@@ -14801,7 +14801,7 @@ msgstr "Фокусиран глас"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Папка"
@@ -17155,7 +17155,7 @@ msgstr "В режим \"Операционна система\" посочени
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "В браузър функцията \"натисни и говори\" работи само докато разделът на {PRODUCT_NAME} е активен. Инсталирайте настолното приложение за \"натисни и говори\" в цялата система."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "В разговор"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Връзката за покана е скрита, докато споделяте:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Линкът за покана е скрит, докато споделяте"
@@ -17756,7 +17756,7 @@ msgstr "Маскиране на покани"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Премини към {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Към {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Към текущото обаждане"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Отиди на свързания канал"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Към свързаното съобщение"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Премини към съобщението от {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Към съобщението в {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Светла тема"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "Харесване"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Харесано."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "харесвания"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Стил на връзките"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Връзката не е налична"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Зареждане на блокирани потребители"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Зареждане на общности"
@@ -19268,7 +19268,7 @@ msgstr "Зловреден софтуер, кражба на данни или
msgid "Manage"
msgstr "Управление"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Управление на профили"
@@ -20079,8 +20079,8 @@ msgstr "съобщение"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Изпрати съобщение"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Оформление на съобщенията"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "линк към съобщението"
@@ -20665,7 +20665,7 @@ msgstr "Месечен подарък"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Спиране на звука от стрийма"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Нови"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Ново"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Няма разрешение {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Няма достъп"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Отваряне на {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Отвори {labelText} в настройките"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Отваряне на чата"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Изход от {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "цитат"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "цитати"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Потребителски таг на подадения сигнал (по избор)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "Репост"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "репостове"
@@ -26470,7 +26470,7 @@ msgstr "Изисква всичко от средно ниво, плюс чле
msgid "Reschedule message"
msgstr "Пренасрочване на съобщението"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Изпрати отново ({originalSecondsRemaining}с)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Изпращане отново ({resendCooldownSeconds}с)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Изпрати отново ({resendSecondsRemaining}с)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Наситеност"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Запазване"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Запазено."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "запазвания"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Търсене на канали или директни съобщения"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Търсене на общности"
@@ -27758,7 +27758,7 @@ msgstr "Филтър за търсене: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Филтри за търсене"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Резултати от търсенето"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Резултати от търсене за „{query}“"
@@ -28232,8 +28232,8 @@ msgstr "Избираем текст"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Бутон за изпращане"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Изпращане на злонамерен софтуер или опасни връзки"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Изпращането на съобщения е деактивирано в тази общност"
@@ -28623,7 +28623,7 @@ msgstr "Сесии"
msgid "Set {fieldNode} to {0}."
msgstr "Задайте {fieldNode} на {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Задаване на персонализиран статус"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Настройки"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "настройки връзка"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Пропусни тази стъпка"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Към съдържанието"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Бавен режим"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Забавен режим · изчакайте {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Шведски"
msgid "Switch account"
msgstr "Превключване на профил"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Смени профила"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Този канал с връзки е маркиран за съдържание за възрастни и може да отваря материали, които може да са неподходящи за някои потребители."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Тази връзка не е налична за вашия акаунт."
@@ -34716,9 +34716,9 @@ msgstr "Групов чат без закачане"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Гласово активиране"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "гласова активност"
@@ -36716,7 +36716,7 @@ msgstr "Гласово повикване. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "гласов канал"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Промени тага си, докато ползваше {PREMIUM_PRODUCT_NAME}. Той ще бъде променен на случаен принцип, когато изтече абонаментът ти за {PREMIUM_PRODUCT_NAME}, освен ако не го подновиш."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Нямаш достъп до канала, където е изпратено това съобщение."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "За да промените имейла си оттук, трябва да имате достъп до текущия си имейл. Използвайте потвърждение по телефона, ако е налично, или се свържете с поддръжката."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Нямате разрешение \"{attachFilesPermissionLabel}\", за да прикачвате файлове в този канал"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Нужно е разрешение \"{embedLinksPermissionLabel}\", за да вграждате връзки в този канал"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Нямате разрешение \"{permissionLabel}\", за да използвате стикери от други общности тук."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Нужно е разрешение \"{sendMessagesPermissionLabel}\", за да изпращате съобщения в този канал"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Използвате стара тарифа. Текущата цена за този план е {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Времето ви за изчакване в тази общност изтече"
@@ -38583,7 +38583,7 @@ msgstr "Достигнали сте лимита за общности"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Достигнахте края"
@@ -38627,7 +38627,7 @@ msgstr "Получихте подарък"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Изпратили сте твърде много имейли за потвърждение. Моля, изчакайте малко и опитайте отново."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Прегледали сте всичките си скорошни споменавания. Скоро тук ще се появят още."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(vy)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# člen} other {# členové}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} nepodporuje předplatné v pokladně {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# komunita} few {# komunity} many {# komunity} other {# komunit}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} zmínek"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# zmínka} few {# zmínky} other {# zmínek}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# záložka} few {# záložky} many {# záložek} other {# záložky}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# komunita nalezena} other {# komunit nalezeno} few {# komunity nalezeny}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# komunita je dočasně nedostupná kvůli poruše \"flux kondenzátoru\".} few {# komunity jsou dočasně nedostupné kvůli poruše \"flux kondenzátoru\".} many {# komunit je dočasně nedostupných kvůli poruše \"flux kondenzátoru\".} other {# komunit je dočasně nedostupných kvůli poruše \"flux kondenzátoru\".}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# zařízení vybráno pro odhlášení} other {# zařízení vybrána pro odhlášení}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} žádostí o přátelství"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} nepřečtených zpráv"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minut"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Složka {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 den"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 žádost o přátelství"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 nepřečtená"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 nepřečtená zpráva"
@@ -2248,13 +2248,13 @@ msgstr "Kliknutí na aktivaci"
msgid "Active"
msgstr "Aktivní"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktivní účet"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "aktivní hovor"
@@ -2907,8 +2907,8 @@ msgstr "Ovládací prvky zarovnání jsou dostupné pouze na širších obrazovk
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Vše"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Všechna pole jsou plně interaktivní, takže můžete psát."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Všechny jazyky"
@@ -5785,8 +5785,8 @@ msgstr "Sem nelze nahrávat soubory"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Sem nelze nahrávat soubory"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Karty si mohou ponechat cenu v TRY po rychlém ověření přes {payment
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Kategorie"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "kategorie"
@@ -6313,7 +6313,7 @@ msgstr "Změny se okamžitě projeví v živém klientovi."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "kanál"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Kanál"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Kanál {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Přístup k kanálu"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Přístup k tomuto kanálu odepřen"
@@ -6408,7 +6408,7 @@ msgstr "ID kanálu zkopírováno do schránky"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "odkaz na kanál"
@@ -7009,7 +7009,7 @@ msgstr "Nárokovat účet"
msgid "Claim your account and verify your email to send reports."
msgstr "Nárokujte si účet a ověřte svůj e-mail, abyste mohli odesílat hlášení."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Získejte přístup ke svému účtu přidáním e-mailu a hesla. Před dokončením vám zašleme ověřovací kód k potvrzení e-mailu."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Sbalit"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Sbalit složku {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Sbalit nepřečtené zprávy pro {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "sbaleno"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Připojit přes {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "připojeno"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Kopírovat URL banneru"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopírovat informace o sestavení"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Zkopírujte klíč pro nastavení do vaší aplikace pro ověřování."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopírovat ID uživatele"
@@ -8923,7 +8923,7 @@ msgstr "Kopírovat video"
msgid "Copy video link"
msgstr "Kopírovat odkaz na video"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Kopírovat diagnostiku hlasu"
@@ -11195,13 +11195,13 @@ msgstr "Stav pro vývojáře"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Nástroje pro vývojáře"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Nástroje pro vývojáře jsou dostupné z odznaku pro zaměstnance v záhlaví kanálu."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Žádost o objevování stažena"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Kategorie objevování"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Navigace Objevit"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Výsledky objevování"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Vyhledávání v Discovery"
@@ -12366,7 +12366,7 @@ msgstr "Upravit přílohu"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Upravit nebo smazat emoji a nálepky vytvořené jinými členy."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Upravit přepsání pro role a členy v tomto kanálu."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Upravit profil"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Emotikony"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Oblíbené položky jsou prázdné"
@@ -13465,7 +13465,7 @@ msgstr "Zadejte kód zobrazený v aplikaci a pokračujte."
msgid "Enter the code we emailed to your new address."
msgstr "Zadejte kód, který jsme vám poslali e-mailem na vaši novou adresu."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Zadejte kód, který jsme vám poslali na e-mail, abyste ho ověřili. Heslo se nastaví po potvrzení kódu."
@@ -13802,8 +13802,8 @@ msgstr "Rozbalit nepřečtené zprávy pro {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "rozbaleno"
@@ -13831,7 +13831,7 @@ msgstr "Vyprší po"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Nastavení filtru explicitního obsahu"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Prozkoumat"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Filtrovat podle způsobu připojení"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filtrovat podle jazyka"
@@ -14801,7 +14801,7 @@ msgstr "Zaměřený hlas"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Složka"
@@ -17155,7 +17155,7 @@ msgstr "V režimu \"Operační systém\" jsou výše uvedené slovníky pouze do
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "V prohlížeči funguje funkce push-to-talk pouze, když je karta {PRODUCT_NAME} aktivní. Nainstalujte si desktopovou aplikaci pro funkci push-to-talk v celém systému."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "V hovoru"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Odkaz na pozvánku je skrytý, když sdílíte:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Odkaz na pozvánku je při sdílení maskován"
@@ -17756,7 +17756,7 @@ msgstr "Maskování pozvánek"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Přejít na {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Přejít na {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Přejít na aktuální hovor"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Přejít na odkazovaný kanál"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Přejít na odkazovanou zprávu"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Přejít ke zprávě od {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Přejít na zprávu v {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Světlý motiv"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "To se mi líbí"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Označeno jako To se mi líbí."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "To se mi líbí"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Styl odkazů"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Odkaz není k dispozici"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Načítání zablokovaných uživatelů"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Načítání komunit"
@@ -19268,7 +19268,7 @@ msgstr "Malware, krádež přihlašovacích údajů nebo škodlivé soubory."
msgid "Manage"
msgstr "Spravovat"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Spravovat účty"
@@ -20079,8 +20079,8 @@ msgstr "zpráva"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Zpráva"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Rozložení zpráv"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "odkaz ve zprávě"
@@ -20665,7 +20665,7 @@ msgstr "Měsíční dárek"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Ztlumit zvuk streamu"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Nové"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Nové"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Chybí oprávnění {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Bez přístupu"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Otevřít {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Otevřít {labelText} v nastavení"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Otevřít chat"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Ukončit aplikaci {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "citace"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "citace"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Označení nahlášeného uživatele (volitelné)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "přeposlat"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "znovu odesláno"
@@ -26470,7 +26470,7 @@ msgstr "Vyžaduje vše ze střední úrovně a navíc členství v komunitě po
msgid "Reschedule message"
msgstr "Přeplánovat zprávu"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Znovu odeslat ({originalSecondsRemaining}s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Znovu odeslat ({resendCooldownSeconds}s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Znovu odeslat ({resendSecondsRemaining}s)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Sytost"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "uložit"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Uloženo."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "uložení"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Hledat kanály nebo zprávy"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Hledat komunity"
@@ -27758,7 +27758,7 @@ msgstr "Vyhledávací filtr: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Filtry vyhledávání"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Výsledky hledání"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Výsledky vyhledávání pro „{query}“"
@@ -28232,8 +28232,8 @@ msgstr "Volitelný text"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Tlačítko Odeslat"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Odesílání malwaru nebo nebezpečných odkazů"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "V této komunitě je odesílání zpráv zakázáno"
@@ -28623,7 +28623,7 @@ msgstr "Relace"
msgid "Set {fieldNode} to {0}."
msgstr "Nastaveno {fieldNode} na {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Nastavit vlastní status"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Nastavení"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "nastavení odkaz"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Přeskočit tento krok"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Přejít na obsah"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Pomalý režim"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Pomalý režim · čekejte {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Švédština"
msgid "Switch account"
msgstr "Přepnout účet"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Přepnout účty"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Tento kanál s odkazem je označen jako obsah pro dospělé a může obsahovat materiál, který nemusí být vhodný pro některé uživatele."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Tento odkaz není pro váš účet dostupný."
@@ -34716,9 +34716,9 @@ msgstr "Skupinová zpráva (nepřipnuto)"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Hlasová aktivace"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "hlasová aktivita"
@@ -36716,7 +36716,7 @@ msgstr "Hlasový hovor. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "hlasový kanál"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Změnili jste si svůj tag, když jste měli aktivní {PREMIUM_PRODUCT_NAME}. Náhodně se změní, až vaše předplatné {PREMIUM_PRODUCT_NAME} vyprší, pokud se neobnoví."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Nemáte přístup k chatu, kam byla tato zpráva odeslána."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Pro změnu e-mailu potřebujete přístup k tomu stávajícímu. Použijte ověření telefonem, pokud je k dispozici, nebo kontaktujte podporu."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "K připojení souborů v tomto kanálu potřebujete oprávnění \"{attachFilesPermissionLabel}\""
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "K vkládání odkazů do tohoto kanálu potřebujete oprávnění \"{embedLinksPermissionLabel}\""
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "K používání nálepek z jiných komunit zde potřebujete oprávnění \"{permissionLabel}\"."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "K odesílání zpráv v tomto kanálu potřebujete oprávnění \"{sendMessagesPermissionLabel}\""
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Používáte starší tarif. Aktuální cena tohoto plánu je {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "V této komunitě máte pauzu"
@@ -38583,7 +38583,7 @@ msgstr "Dosáhli jste limitu komunit"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Dostali jste se na konec"
@@ -38627,7 +38627,7 @@ msgstr "Dostali jste dárek"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Vyžádali jste si příliš mnoho ověřovacích e-mailů. Počkejte chvíli a zkuste to znovu."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Všechny nedávné zmínky jste si prohlédli. Další se zde brzy objeví."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(dig)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# medlem} other {# medlemmer}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} understøtter ikke abonnementer i {paymentProviderName}-kassen."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# fællesskab} other {# fællesskaber}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} omtaler"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# omtale} other {# omtaler}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# bogmærke} other {# bogmærker}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# fællesskab fundet} other {# fællesskaber fundet}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# fællesskab er midlertidigt utilgængeligt på grund af en fejl i fluxkondensatoren.} other {# fællesskaber er midlertidigt utilgængelige på grund af en fejl i fluxkondensatoren.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# enhed valgt til at blive logget ud} other {# enheder valgt til at blive logget ud}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} venneanmodninger"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} ulæste DM'er"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minutter"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Mappen {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 dag"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 venneanmodning"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 ulæst"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 ulæst direkte besked"
@@ -2248,13 +2248,13 @@ msgstr "Aktiveringsklik"
msgid "Active"
msgstr "Aktiv"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktiv konto"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "aktivt opkald"
@@ -2907,8 +2907,8 @@ msgstr "Justering er kun tilgængelig på bredere skærme"
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Alle"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Alle inputfelter er fuldt interaktive, så du kan bare skrive løs."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Alle sprog"
@@ -5785,8 +5785,8 @@ msgstr "Kan ikke uploade filer her"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Kan ikke uploade filer her"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Kort kan beholde TRY-priser efter en hurtig {paymentProviderName}-bekræ
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Kategorier"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "Kategori"
@@ -6313,7 +6313,7 @@ msgstr "Ændringer anvendes med det samme i den aktive klient."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "kanal"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Kanal"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Kanal {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Kanaladgang"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Adgang til kanal nægtet"
@@ -6408,7 +6408,7 @@ msgstr "Kanal-id kopieret til udklipsholder"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "kanallink"
@@ -7009,7 +7009,7 @@ msgstr "Gør krav på din konto"
msgid "Claim your account and verify your email to send reports."
msgstr "Gør krav på din konto, og bekræft din e-mail for at sende rapporter."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Gør krav på din konto ved at tilføje en e-mail og adgangskode. Vi sender en bekræftelseskode for at bekræfte din e-mail, før du er færdig."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Skjul"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Skjul {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Skjul ulæste beskeder for {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "skjult"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Opret forbindelse med {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "forbundet"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Kopiér banner-URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopiér buildinfo"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopiér opsætelsesnøglen ind i din autentifikationsapp."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopiér bruger-id"
@@ -8923,7 +8923,7 @@ msgstr "Kopiér video"
msgid "Copy video link"
msgstr "Kopiér videolink"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Kopiér stemmediagnostik"
@@ -11195,13 +11195,13 @@ msgstr "Udviklerstatus"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Udviklerværktøjer"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Udviklerværktøjer er tilgængelige via medarbejderikonet i kanalens header."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Ansøgning om opdagelse trukket tilbage"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Kategorier i Oplev"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Opdagelsesnavigation"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Opdagelsesresultater"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Discovery-søgning"
@@ -12366,7 +12366,7 @@ msgstr "Rediger vedhæftet fil"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Rediger eller slet emoji og stickers, der er oprettet af andre medlemmer
msgid "Edit overwrites for roles and members in this channel."
msgstr "Rediger tilsidesættelser for roller og medlemmer i denne kanal."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Rediger profil"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Emojis"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Tomme favoritter"
@@ -13465,7 +13465,7 @@ msgstr "Indtast koden, der vises i appen, for at fortsætte."
msgid "Enter the code we emailed to your new address."
msgstr "Indtast den kode, vi har sendt til din nye adresse."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Indtast den kode, vi har sendt til din e-mail, for at bekræfte den. Din adgangskode bliver indstillet, når koden er bekræftet."
@@ -13802,8 +13802,8 @@ msgstr "Udvid ulæste beskeder for {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "udvidet"
@@ -13831,7 +13831,7 @@ msgstr "Udløber efter"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Indstilling for filter af eksplicit indhold"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Udforsk"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Filtrer efter tilmeldingsmetode"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filtrer efter sprog"
@@ -14801,7 +14801,7 @@ msgstr "Fokuseret stemme"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Mappe"
@@ -17155,7 +17155,7 @@ msgstr "I tilstanden \"Operativsystem\" er ordbøgerne ovenfor vejledende. {PROD
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "I en browser fungerer push-to-talk kun, når fanen {PRODUCT_NAME} er i fokus. Installer desktopappen for push-to-talk på hele systemet."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "I et opkald"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Inviteringslink er skjult under deling:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Inviteringslink maskeret under deling"
@@ -17756,7 +17756,7 @@ msgstr "Inviteringsmaskering"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Gå til {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Gå til {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Gå til det aktuelle opkald"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Gå til den linkede kanal"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Gå til den linkede besked"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Gå til beskeden fra {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Gå til beskeden i {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Lyst tema"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "Synes godt om"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Likede."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "synes godt om"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Linktypografi"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Link ikke tilgængeligt"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Indlæser udelukkede brugere"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Indlæser fællesskaber"
@@ -19268,7 +19268,7 @@ msgstr "Malware, tyveri af loginoplysninger eller skadelige filer."
msgid "Manage"
msgstr "Administrer"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Administrer konti"
@@ -20079,8 +20079,8 @@ msgstr "Besked"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Besked"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Beskedlayout"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "link i besked"
@@ -20665,7 +20665,7 @@ msgstr "Månedlig gave"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Slå lyd fra for stream"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Ny"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Ny"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Ingen {sendMessagesPermission}-tilladelse"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Ingen adgang"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Åbn {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Åbn {labelText} i indstillingerne"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Åbn chat"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Afslut {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "citat"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "citater"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Rapporteret brugers tag (valgfrit)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "repost"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "reopslag"
@@ -26470,7 +26470,7 @@ msgstr "Kræver alt fra \"medium\" samt at have været medlem af fællesskabet i
msgid "Reschedule message"
msgstr "Omplanlæg besked"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Send igen ({originalSecondsRemaining}s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Send igen ({resendCooldownSeconds}s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Send igen ({resendSecondsRemaining}s)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Mætning"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Gem"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Gemt."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "gemmer"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Søg kanaler eller direkte beskeder"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Søg i fællesskaber"
@@ -27758,7 +27758,7 @@ msgstr "Søgning filter: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Søgefiltre"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Søgeresultater"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Søgeresultater for »{query}«"
@@ -28232,8 +28232,8 @@ msgstr "Tekst, der kan vælges"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Send-knap"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Sender malware eller farlige links"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Afsendelse af beskeder er deaktiveret i dette fællesskab"
@@ -28623,7 +28623,7 @@ msgstr "Sessioner"
msgid "Set {fieldNode} to {0}."
msgstr "Sæt {fieldNode} til {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Angiv en brugerdefineret status"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Indstillinger"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "indstillingslink"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Spring dette trin over"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Spring til indhold"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Langsom tilstand"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Langsom tilstand · vent {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Svensk"
msgid "Switch account"
msgstr "Skift konto"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Skift konto"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Denne linkkanal er markeret som værende med modent indhold og kan åbne materiale, der kan være upassende for nogle brugere."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Dette link er ikke tilgængeligt for din konto."
@@ -34716,9 +34716,9 @@ msgstr "Gruppe-DM af fastgørelse ophævet"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Stemmeaktivering"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "stemmeaktivitet"
@@ -36716,7 +36716,7 @@ msgstr "Lydopkald. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "stemmekanal"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Du ændrede dit tag, mens du havde {PREMIUM_PRODUCT_NAME}. Det vil blive ændret tilfældigt, når dit {PREMIUM_PRODUCT_NAME} udløber, medmindre det fornyes."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Du har ikke adgang til den kanal, hvor denne besked blev sendt."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Du skal have adgang til din nuværende e-mail for at ændre den herfra. Brug telefonbekræftelse, hvis det er muligt, eller kontakt support."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Du skal have tilladelsen \"{attachFilesPermissionLabel}\" for at vedhæfte filer i denne kanal"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Du skal have tilladelsen \"{embedLinksPermissionLabel}\" for at kunne indlejre links i denne kanal"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Du skal have tilladelsen \"{permissionLabel}\" for at bruge stickers fra andre fællesskaber her."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Du skal have tilladelsen \"{sendMessagesPermissionLabel}\" for at sende beskeder i denne kanal"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Du har en ældre pris. Den nuværende pris for denne plan er {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Du er sat i timeout i dette fællesskab"
@@ -38583,7 +38583,7 @@ msgstr "Du har nået grænsen for fællesskaber"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Du har nået slutningen"
@@ -38627,7 +38627,7 @@ msgstr "Du har modtaget en gave"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Du har anmodet om for mange bekræftelsesmails. Vent et øjeblik, og prøv igen."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Du har set alle dine seneste omtaler. Nye vises her snart."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(du)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# Mitglied} other {# Mitglieder}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} unterstützt keine Abonnements im {paymentProviderName}-Checkout."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# Community} other {# Communities}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} Erwähnungen"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# Erwähnung} other {# Erwähnungen}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# Lesezeichen} other {# Lesezeichen}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# Community gefunden} other {# Communitys gefunden}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# Community ist aufgrund einer Fehlfunktion des Fluxkompensators vorübergehend nicht verfügbar.} other {# Communitys sind aufgrund einer Fehlfunktion des Fluxkompensators vorübergehend nicht verfügbar.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# Gerät zum Abmelden ausgewählt} other {# Geräte zum Abmelden ausgewählt}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} Freundschaftsanfragen"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} ungelesene DMs"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} Minuten"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Ordner \"{folderName}\""
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 Tag"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 Freundschaftsanfrage"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 ungelesene Nachricht"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 ungelesene DM"
@@ -2248,13 +2248,13 @@ msgstr "Klick zur Aktivierung"
msgid "Active"
msgstr "Aktiv"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktiver Account"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "Aktueller Anruf"
@@ -2907,8 +2907,8 @@ msgstr "Ausrichtungsoptionen sind nur auf breiteren Bildschirmen verfügbar"
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Alle"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Alle Eingabefelder sind voll interaktiv, also leg los."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Alle Sprachen"
@@ -5785,8 +5785,8 @@ msgstr "Dateien können hier nicht hochgeladen werden"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Dateien können hier nicht hochgeladen werden"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Karten können den TRY-Preis nach einer kurzen {paymentProviderName}-Ver
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Kategorien"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "Kategorie"
@@ -6313,7 +6313,7 @@ msgstr "Änderungen werden sofort im Live-Client angewendet."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "Kanal"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Kanal"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Kanal {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Kanalzugriff"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Kanalzugriff verweigert"
@@ -6408,7 +6408,7 @@ msgstr "Kanal-ID in die Zwischenablage kopiert"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "Kanal-Link"
@@ -7009,7 +7009,7 @@ msgstr "Deinen Account beanspruchen"
msgid "Claim your account and verify your email to send reports."
msgstr "Beanspruche deinen Account und bestätige deine E-Mail-Adresse, um Berichte zu senden."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Fordere deinen Account an, indem du eine E-Mail-Adresse und ein Passwort hinzufügst. Wir senden dir einen Bestätigungscode, um deine E-Mail-Adresse vor dem Abschluss zu bestätigen."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Einklappen"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "{folderName} einklappen"
@@ -7641,8 +7641,8 @@ msgstr "Ungelesene Nachrichten für {channelHeading} einklappen"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "ausgeblendet"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Mit {providerName} verbinden"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "verbunden"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Banner-URL kopieren"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Build-Info kopieren"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopiere den Schlüssel in deine Authentifizierungs-App."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Nutzer-ID kopieren"
@@ -8923,7 +8923,7 @@ msgstr "Video kopieren"
msgid "Copy video link"
msgstr "Videolink kopieren"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Sprachdiagnose kopieren"
@@ -11195,13 +11195,13 @@ msgstr "Entwicklerstatus"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Entwicklertools"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Entwicklertools sind über das Mitarbeiter-Abzeichen in der Kanalüberschrift verfügbar."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Discovery-Antrag zurückgezogen"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Discovery-Kategorien"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Discovery-Navigation"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Discovery-Ergebnisse"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Discovery-Suche"
@@ -12366,7 +12366,7 @@ msgstr "Anhang bearbeiten"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Emojis und Sticker bearbeiten oder löschen, die von anderen Mitgliedern
msgid "Edit overwrites for roles and members in this channel."
msgstr "Berechtigungen für Rollen und Mitglieder in diesem Kanal bearbeiten."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Profil bearbeiten"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Esc"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Favoriten leer"
@@ -13465,7 +13465,7 @@ msgstr "Gib den in der App angezeigten Code ein, um fortzufahren."
msgid "Enter the code we emailed to your new address."
msgstr "Gib den Code ein, den wir an deine neue Adresse gemailt haben."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Gib den Code ein, den wir dir per E-Mail geschickt haben, um sie zu verifizieren. Dein Passwort wird festgelegt, sobald der Code bestätigt wurde."
@@ -13802,8 +13802,8 @@ msgstr "Ungelesene Nachrichten für {channelHeading} einblenden"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "Erweitert"
@@ -13831,7 +13831,7 @@ msgstr "Läuft ab nach"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Filtereinstellung für explizite Inhalte"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Entdecken"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Nach Beitrittsmethode filtern"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Nach Sprache filtern"
@@ -14801,7 +14801,7 @@ msgstr "Fokussierte Stimme"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Ordner"
@@ -17155,7 +17155,7 @@ msgstr "Im Modus \"Betriebssystem\" sind die oben aufgeführten Wörterbücher b
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Im Browser funktioniert Push-to-Talk nur, wenn der Tab \"{PRODUCT_NAME}\" im Fokus ist. Installiere die Desktop-App für systemweites Push-to-Talk."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "Im Anruf"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Einladungslink ist ausgeblendet, während du teilst:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Einladungslink ausgeblendet, während du teilst"
@@ -17756,7 +17756,7 @@ msgstr "Einladungsmaskierung"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Zu {displayName} springen"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Springe zu {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Zum aktuellen Anruf springen"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Zum verlinkten Kanal springen"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Zur verlinkten Nachricht springen"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Gehe zu der Nachricht von {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Zur Nachricht in {labelText} springen"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Helles Design"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "Gefällt mir"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Mit „Gefällt mir“ markiert."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "Gefällt mir"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Link-Stil"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Link nicht verfügbar"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Gebannte Nutzer werden geladen"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Communitys werden geladen"
@@ -19268,7 +19268,7 @@ msgstr "Malware, Zugangsdaten-Diebstahl oder schädliche Dateien."
msgid "Manage"
msgstr "Verwalten"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Accounts verwalten"
@@ -20079,8 +20079,8 @@ msgstr "Nachricht"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Nachricht"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Nachrichtenlayout"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "Nachrichtenlink"
@@ -20665,7 +20665,7 @@ msgstr "Monatliches Geschenk"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Stream-Audio stummschalten"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Neu"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Neu"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Keine Berechtigung \"{sendMessagesPermission}\""
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Kein Zugriff"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "{displayName} öffnen"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Öffne {labelText} in den Einstellungen"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Chat öffnen"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "{appName} beenden"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "Zitat"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "Zitate"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Gemeldeter Nutzer-Tag (optional)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "geteilt"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "Reposts"
@@ -26470,7 +26470,7 @@ msgstr "Erfordert alles, was in \"Mittel\" enthalten ist, plus eine Mitgliedscha
msgid "Reschedule message"
msgstr "Nachricht neu planen"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Erneut senden ({originalSecondsRemaining}s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Erneut senden ({resendCooldownSeconds}s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Erneut senden ({resendSecondsRemaining}s)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Sättigung"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Speichern"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Gespeichert."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "Speicherungen"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Kanäle oder DMs suchen"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Communitys suchen"
@@ -27758,7 +27758,7 @@ msgstr "Suchfilter: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Suchfilter"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Suchergebnisse"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Suchergebnisse für „{query}“"
@@ -28232,8 +28232,8 @@ msgstr "Auswählbarer Text"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Senden-Taste"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Malware oder gefährliche Links senden"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Das Senden von Nachrichten ist in dieser Community deaktiviert"
@@ -28623,7 +28623,7 @@ msgstr "Sitzungen"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} auf {0} gesetzt."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Einen eigenen Status festlegen"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Einstellungen"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "Einstellungen-Link"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Diesen Schritt überspringen"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Zum Inhalt springen"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Slow-Modus"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Slow-Modus · warte {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Schwedisch"
msgid "Switch account"
msgstr "Konto wechseln"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Accounts wechseln"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Dieser Link-Kanal ist als nicht jugendfrei gekennzeichnet und kann Inhalte enthalten, die für manche Nutzer unangemessen sein könnten."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Dieser Link ist für deinen Account nicht verfügbar."
@@ -34716,9 +34716,9 @@ msgstr "Gruppen-DM nicht mehr angepinnt"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Sprachaktivierung"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "Sprachaktivität"
@@ -36716,7 +36716,7 @@ msgstr "Sprachanruf. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "Sprachkanal"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Du hast deinen Tag geändert, während du {PREMIUM_PRODUCT_NAME} hattest. Er wird zufällig neu generiert, wenn dein {PREMIUM_PRODUCT_NAME} abläuft, es sei denn, es wird verlängert."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Du hast keinen Zugriff auf den Kanal, in dem diese Nachricht gesendet wurde."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Du benötigst Zugriff auf deine aktuelle E-Mail-Adresse, um sie hier zu ändern. Nutze, falls verfügbar, die Telefonverifizierung oder kontaktiere den Support."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Du benötigst die Berechtigung \"{attachFilesPermissionLabel}\", um Dateien in diesem Kanal anzuhängen"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Du benötigst die Berechtigung \"{embedLinksPermissionLabel}\", um Links in diesem Kanal einzubetten"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Du benötigst die Berechtigung \"{permissionLabel}\", um hier Sticker aus anderen Communitys zu verwenden."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Du benötigst die Berechtigung \"{sendMessagesPermissionLabel}\", um Nachrichten in diesem Kanal zu senden"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Sie nutzen einen älteren Tarif. Der aktuelle Preis für diesen Plan ist {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Du bist in dieser Community stummgeschaltet"
@@ -38583,7 +38583,7 @@ msgstr "Du bist der maximalen Anzahl an Communitys beigetreten"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Du hast das Ende erreicht"
@@ -38627,7 +38627,7 @@ msgstr "Du hast ein Geschenk erhalten"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Du hast zu viele Verifizierungs-E-Mails angefordert. Bitte warte einen Moment und versuche es erneut."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Du hast alle deine letzten Erwähnungen gesehen. Weitere werden hier bald erscheinen."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(εσείς)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# μέλος} other {# μέλη}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "Το {blikPaymentMethod} δεν υποστηρίζει συνδρομές στην ολοκλήρωση αγοράς {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# κοινότητα} other {# κοινότητες}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} αναφορές"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# αναφορά} other {# αναφορές}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# σελιδοδείκτη} other {# σελιδοδείκτες}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# κοινότητα βρέθηκε} other {# κοινότητες βρέθηκαν}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# κοινότητα είναι προσωρινά μη διαθέσιμη λόγω δυσλειτουργίας του πυκνωτή ροής.} other {# κοινότητες είναι προσωρινά μη διαθέσιμες λόγω δυσλειτουργίας του πυκνωτή ροής.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# συσκευή επιλέχθηκε για αποσύνδεση} other {# συσκευές επιλέχθηκαν για αποσύνδεση}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} αιτήματα φιλίας"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} μη αναγνωσμένα DM"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} λεπτά"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Φάκελος {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 ημέρα"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 αίτημα φιλίας"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 μη αναγνωσμένο"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 μη αναγνωσμένο μήνυμα"
@@ -2248,13 +2248,13 @@ msgstr "Κλικ ενεργοποίησης"
msgid "Active"
msgstr "Ενεργό"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Ενεργός λογαριασμός"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "ενεργή κλήση"
@@ -2907,8 +2907,8 @@ msgstr "Οι ρυθμίσεις στοίχισης είναι διαθέσιμε
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Όλα"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Όλα τα πεδία είναι πλήρως διαδραστικά, οπότε μπορείτε να πληκτρολογήσετε ελεύθερα."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Όλες οι γλώσσες"
@@ -5785,8 +5785,8 @@ msgstr "Δεν μπορείς να ανεβάσεις αρχεία εδώ"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Δεν μπορείς να ανεβάσεις αρχεία εδώ"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Οι κάρτες μπορούν να διατηρήσουν την τι
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Κατηγορίες"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "κατηγορία"
@@ -6313,7 +6313,7 @@ msgstr "Οι αλλαγές εφαρμόζονται άμεσα στο πρόγ
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "Κανάλι"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Κανάλι"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Κανάλι {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Πρόσβαση σε κανάλι"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Δεν επιτρέπεται η πρόσβαση στο κανάλι"
@@ -6408,7 +6408,7 @@ msgstr "Το αναγνωριστικό καναλιού αντιγράφηκε
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "σύνδεσμος καναλιού"
@@ -7009,7 +7009,7 @@ msgstr "Διεκδίκησε τον λογαριασμό σου"
msgid "Claim your account and verify your email to send reports."
msgstr "Διεκδικήστε τον λογαριασμό σας και επαληθεύστε το email σας για να στείλετε αναφορές."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Διεκδικήστε τον λογαριασμό σας προσθέτοντας ένα email και έναν κωδικό πρόσβασης. Θα στείλουμε έναν κωδικό επαλήθευσης για να επιβεβαιώσουμε το email σας πριν ολοκληρώσουμε τη διαδικασία."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Σύμπτυξη"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Σύμπτυξη {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Σύμπτυξη μη αναγνωσμένων μηνυμάτων για
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "συμπτυγμένο"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Σύνδεση με {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "συνδέθηκε"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Αντιγραφή URL banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Αντιγραφή πληροφοριών έκδοσης"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Αντιγράψτε το κλειδί εγκατάστασης στην εφαρμογή ελέγχου ταυτότητας."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Αντιγραφή αναγνωριστικού χρήστη"
@@ -8923,7 +8923,7 @@ msgstr "Αντιγραφή βίντεο"
msgid "Copy video link"
msgstr "Αντιγραφή συνδέσμου βίντεο"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Αντιγραφή διαγνωστικών φωνής"
@@ -11195,13 +11195,13 @@ msgstr "Κατάσταση προγραμματιστή"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Εργαλεία προγραμματιστή"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Τα εργαλεία προγραμματιστή είναι διαθέσιμα από το σήμα προσωπικού στην κεφαλίδα του καναλιού."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Η αίτηση ανακάλυψης αποσύρθηκε"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Κατηγορίες ανακάλυψης"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Πλοήγηση στην ανακάλυψη"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Αποτελέσματα ανακάλυψης"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Αναζήτηση Ανακάλυψης"
@@ -12366,7 +12366,7 @@ msgstr "Επεξεργασία συνημμένου"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Επεξεργασία ή διαγραφή emoji και αυτοκόλλ
msgid "Edit overwrites for roles and members in this channel."
msgstr "Επεξεργασία εξαιρέσεων για ρόλους και μέλη σε αυτό το κανάλι."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Επεξεργασία προφίλ"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Emoji"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Κενά αγαπημένα"
@@ -13465,7 +13465,7 @@ msgstr "Εισαγάγετε τον κωδικό που εμφανίζεται
msgid "Enter the code we emailed to your new address."
msgstr "Εισάγετε τον κωδικό που στείλαμε στην καινούργια σας διεύθυνση email."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Εισάγετε τον κωδικό που στείλαμε στο email σας για να το επαληθεύσετε. Ο κωδικός πρόσβασής σας θα οριστεί μόλις επιβεβαιωθεί ο κωδικός."
@@ -13802,8 +13802,8 @@ msgstr "Ανάπτυξη μη αναγνωσμένων μηνυμάτων για
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "αναπτυγμένο"
@@ -13831,7 +13831,7 @@ msgstr "Λήξη μετά από"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Ρύθμιση φίλτρου ρητού περιεχομένου"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Εξερεύνηση"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Φιλτράρισμα κατά μέθοδο σύνδεσης"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Φιλτράρισμα ανά γλώσσα"
@@ -14801,7 +14801,7 @@ msgstr "Εστιασμένη φωνή"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Φάκελος"
@@ -17155,7 +17155,7 @@ msgstr "Στη λειτουργία \"Λειτουργικό σύστημα\",
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Σε ένα πρόγραμμα περιήγησης, η λειτουργία push-to-talk λειτουργεί μόνο όταν η καρτέλα {PRODUCT_NAME} είναι ενεργή. Εγκαταστήστε την εφαρμογή υπολογιστή για push-to-talk σε όλο το σύστημα."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "Σε κλήση"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Ο σύνδεσμος πρόσκλησης είναι κρυφός κατά την κοινή χρήση:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Ο σύνδεσμος πρόσκλησης αποκρύφτηκε κατά την κοινή χρήση"
@@ -17756,7 +17756,7 @@ msgstr "Μάσκα προσκλήσεων"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Μετάβαση στο/στη {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Μετάβαση σε {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Μετάβαση στην τρέχουσα κλήση"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Μετάβαση στο συνδεδεμένο κανάλι"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Μετάβαση στο μήνυμα του συνδέσμου"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Μετάβαση στο μήνυμα από τον {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Μετάβαση στο μήνυμα στο {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Ανοιχτό θέμα"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "μου αρέσει"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Δηλώθηκε ως αγαπημένο."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "μου αρέσει"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Στιλ συνδέσμου"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Ο σύνδεσμος δεν είναι διαθέσιμος"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Φόρτωση αποκλεισμένων χρηστών"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Φόρτωση κοινοτήτων"
@@ -19268,7 +19268,7 @@ msgstr "Κακόβουλο λογισμικό, κλοπή διαπιστευτη
msgid "Manage"
msgstr "Διαχείριση"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Διαχείριση λογαριασμών"
@@ -20079,8 +20079,8 @@ msgstr "Μήνυμα"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Μήνυμα"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Διάταξη μηνυμάτων"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "σύνδεσμος μηνύματος"
@@ -20665,7 +20665,7 @@ msgstr "Μηνιαίο δώρο"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Σίγαση ήχου ροής"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Νέα"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Νέο"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Δεν υπάρχει δικαίωμα {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Δεν υπάρχει πρόσβαση"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Άνοιγμα {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Άνοιξε τις {labelText} στις ρυθμίσεις"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Άνοιγμα συνομιλίας"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Έξοδος από το {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "παράθεση"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "αποσπάσματα"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Ετικέτα αναφερόμενου χρήστη (προαιρετικό)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "αναδημοσίευση"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "αναδημοσιεύσεις"
@@ -26470,7 +26470,7 @@ msgstr "Απαιτεί ό,τι και το \"Μεσαίο\", συν να είσ
msgid "Reschedule message"
msgstr "Επαναπρογραμματισμός μηνύματος"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Επανάληψη αποστολής ({originalSecondsRemaining}δ)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Επανάληψη αποστολής ({resendCooldownSeconds}δ)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Επανάληψη αποστολής ({resendSecondsRemaining}δ)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Κορεσμός"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Αποθήκευση"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Αποθηκεύτηκε."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "αποθηκεύσεις"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Αναζήτηση καναλιών ή προσωπικών μηνυμάτων"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Αναζήτηση κοινοτήτων"
@@ -27758,7 +27758,7 @@ msgstr "Φίλτρο αναζήτησης: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Φίλτρα αναζήτησης"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Αποτελέσματα αναζήτησης"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Αποτελέσματα αναζήτησης για «{query}»"
@@ -28232,8 +28232,8 @@ msgstr "Επιλέξιμο κείμενο"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Κουμπί αποστολής"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Αποστολή κακόβουλου λογισμικού ή επικίνδυνων συνδέσμων"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Η αποστολή μηνυμάτων έχει απενεργοποιηθεί σε αυτήν την κοινότητα"
@@ -28623,7 +28623,7 @@ msgstr "Συνδέσεις"
msgid "Set {fieldNode} to {0}."
msgstr "Ορίστηκε το {fieldNode} σε {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Ορισμός προσαρμοσμένης κατάστασης"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Ρυθμίσεις"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "σύνδεσμος ρυθμίσεων"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Παράλειψη αυτού του βήματος"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Μετάβαση στο περιεχόμενο"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Αργή λειτουργία"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Αργή λειτουργία · αναμονή {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Σουηδικά"
msgid "Switch account"
msgstr "Αλλαγή λογαριασμού"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Εναλλαγή λογαριασμών"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Αυτό το κανάλι συνδέσμων έχει επισημανθεί για ενήλικο περιεχόμενο και ενδέχεται να περιέχει υλικό που μπορεί να είναι ακατάλληλο για ορισμένους χρήστες."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Αυτός ο σύνδεσμος δεν είναι διαθέσιμος για τον λογαριασμό σας."
@@ -34716,9 +34716,9 @@ msgstr "Η ομαδική συνομιλία δεν είναι πλέον καρ
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Ενεργοποίηση φωνής"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "φωνητική δραστηριότητα"
@@ -36716,7 +36716,7 @@ msgstr "Φωνητική κλήση. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "κανάλι φωνητικής συνομιλίας"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Άλλαξες το tag σου ενώ είχες {PREMIUM_PRODUCT_NAME}. Θα αλλάξει τυχαία όταν λήξει το {PREMIUM_PRODUCT_NAME} σου, εκτός αν ανανεωθεί."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Δεν έχεις πρόσβαση στο κανάλι όπου στάλθηκε αυτό το μήνυμα."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Για να αλλάξεις το email σου από εδώ, πρέπει να έχεις πρόσβαση στο τρέχον email σου. Χρησιμοποίησε την επαλήθευση μέσω τηλεφώνου, αν είναι διαθέσιμη, ή επικοινώνησε με την υποστήριξη."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Χρειάζεστε την άδεια \"{attachFilesPermissionLabel}\" για να επισυνάψετε αρχεία σε αυτό το κανάλι"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Χρειάζεστε την άδεια \"{embedLinksPermissionLabel}\" για να ενσωματώσετε συνδέσμους σε αυτό το κανάλι"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Χρειάζεστε την άδεια \"{permissionLabel}\" για να χρησιμοποιήσετε αυτοκόλλητα από άλλες κοινότητες εδώ."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Χρειάζεστε την άδεια \"{sendMessagesPermissionLabel}\" για να στέλνετε μηνύματα σε αυτό το κανάλι"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Έχετε παλιό τιμολόγιο. Η τρέχουσα τιμή για αυτό το πρόγραμμα είναι {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Έχεις timeout σε αυτήν την κοινότητα"
@@ -38583,7 +38583,7 @@ msgstr "Έχετε φτάσει το όριο κοινοτήτων"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Έφτασες στο τέλος"
@@ -38627,7 +38627,7 @@ msgstr "Έλαβες ένα δώρο"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Έχετε ζητήσει πάρα πολλά email επαλήθευσης. Περιμένετε λίγο και δοκιμάστε ξανά."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Έχεις δει όλες τις πρόσφατες αναφορές σου. Σύντομα θα εμφανιστούν κι άλλες εδώ."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(you)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# member} other {# members}}"
@@ -288,14 +288,15 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} does not support subscriptions in {paymentProviderName} checkout."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
# auto-i18n: reviewed unchanged
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} mentions"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +357,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# bookmark} other {# bookmarks}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# community found} other {# communities found}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
@@ -634,12 +635,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# device selected for sign out} other {# devices selected for sign out}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} friend requests"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} unread DMs"
@@ -726,7 +727,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minutes"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "{folderName} folder"
@@ -1567,7 +1568,7 @@ msgid "1 day"
msgstr "1 day"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 friend request"
@@ -1622,7 +1623,7 @@ msgid "1 unread"
msgstr "1 unread"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 unread DM"
@@ -2248,13 +2249,13 @@ msgstr "Activation click"
msgid "Active"
msgstr "Active"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Active account"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "active call"
@@ -2907,8 +2908,8 @@ msgstr "Alignment controls are only available on wider screens"
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "All"
@@ -2985,7 +2986,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "All inputs are fully interactive, so type away."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "All languages"
@@ -5785,8 +5786,8 @@ msgstr "Can't upload files here"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5813,7 @@ msgstr "Can't upload files here"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5999,12 @@ msgstr "Cards can keep TRY pricing after a quick {paymentProviderName} verificat
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Categories"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "Category"
@@ -6313,7 +6314,7 @@ msgstr "Changes apply instantly to the live client."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "Channel"
@@ -6333,7 +6334,7 @@ msgid "Channel"
msgstr "Channel"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Channel {id}"
@@ -6343,7 +6344,7 @@ msgid "Channel access"
msgstr "Channel access"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Channel access denied"
@@ -6408,7 +6409,7 @@ msgstr "Channel ID copied to clipboard"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "Channel link"
@@ -7009,7 +7010,7 @@ msgstr "Claim your account"
msgid "Claim your account and verify your email to send reports."
msgstr "Claim your account and verify your email to send reports."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Claim your account by adding an email and password. We'll send a verification code to confirm your email before finishing."
@@ -7597,7 +7598,7 @@ msgid "Collapse"
msgstr "Collapse"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Collapse {folderName}"
@@ -7641,8 +7642,8 @@ msgstr "Collapse unread messages for {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "(collapsed)"
@@ -8266,7 +8267,7 @@ msgid "Connect with {providerName}"
msgstr "Connect with {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "Connected"
@@ -8666,7 +8667,7 @@ msgid "Copy banner URL"
msgstr "Copy banner URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copy build info"
@@ -8898,7 +8899,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copy the setup key into your authenticator app."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copy user ID"
@@ -8923,7 +8924,7 @@ msgstr "Copy video"
msgid "Copy video link"
msgstr "Copy video link"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Copy voice diagnostics"
@@ -11195,13 +11196,13 @@ msgstr "Developer state"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Developer tools"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Developer tools are available from the staff badge in the channel header."
@@ -11657,7 +11658,7 @@ msgid "Discovery application withdrawn"
msgstr "Discovery application withdrawn"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Discovery categories"
@@ -11671,12 +11672,12 @@ msgid "Discovery navigation"
msgstr "Discovery navigation"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Discovery results"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Discovery search"
@@ -12366,7 +12367,7 @@ msgstr "Edit attachment"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12466,11 @@ msgstr "Edit or delete emoji and stickers created by other members."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edit overwrites for roles and members in this channel."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Edit profile"
@@ -12885,7 +12886,7 @@ msgid "Emoticons"
msgstr "Emoticons"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Empty favourites"
@@ -13465,7 +13466,7 @@ msgstr "Enter the code shown in the app to continue."
msgid "Enter the code we emailed to your new address."
msgstr "Enter the code we emailed to your new address."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
@@ -13802,8 +13803,8 @@ msgstr "Expand unread messages for {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "Expanded"
@@ -13831,7 +13832,7 @@ msgstr "Expire after"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13916,7 @@ msgid "Explicit content filter setting"
msgstr "Explicit content filter setting"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Explore"
@@ -14601,7 +14602,7 @@ msgid "Filter by join method"
msgstr "Filter by join method"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filter by language"
@@ -14801,7 +14802,7 @@ msgstr "Focused voice"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Folder"
@@ -17155,7 +17156,7 @@ msgstr "In \"Operating system\" mode, the dictionaries listed above are advisory
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "In a call"
@@ -17734,7 +17735,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Invite link is hidden while sharing:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Invite link masked while sharing"
@@ -17756,7 +17757,7 @@ msgstr "Invite masking"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18163,7 @@ msgid "Jump to {displayName}"
msgstr "Jump to {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Jump to {labelText}"
@@ -18219,12 +18220,12 @@ msgid "Jump to the current call"
msgstr "Jump to the current call"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Jump to the linked channel"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Jump to the linked message"
@@ -18234,7 +18235,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Jump to the message from {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Jump to the message in {labelText}"
@@ -18712,7 +18713,7 @@ msgid "Light theme"
msgstr "Light theme"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "Like"
@@ -18722,7 +18723,7 @@ msgid "Liked."
msgstr "Liked."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "Likes"
@@ -18819,7 +18820,7 @@ msgid "Link styling"
msgstr "Link styling"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Link unavailable"
@@ -18928,7 +18929,7 @@ msgid "Loading banned users"
msgstr "Loading banned users"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Loading communities"
@@ -19268,7 +19269,7 @@ msgstr "Malware, credential theft, or harmful files."
msgid "Manage"
msgstr "Manage"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Manage accounts"
@@ -20079,8 +20080,8 @@ msgstr "Message"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Message"
@@ -20220,7 +20221,7 @@ msgid "Message layout"
msgstr "Message layout"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "message link"
@@ -20665,7 +20666,7 @@ msgstr "Monthly gift"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21015,8 @@ msgstr "Mute stream audio"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21390,7 @@ msgid "New"
msgstr "New"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "New"
@@ -21577,7 +21578,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "No {sendMessagesPermission} permission"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "No access"
@@ -22683,7 +22684,7 @@ msgid "Open {displayName}"
msgstr "Open {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Open {labelText} in settings"
@@ -22803,7 +22804,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Open chat"
@@ -25153,12 +25154,12 @@ msgid "Quit {appName}"
msgstr "Quit {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "Quote"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "Quotes"
@@ -26334,12 +26335,12 @@ msgid "Reported user tag (optional)"
msgstr "Reported user tag (optional)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "Repost"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "reposts"
@@ -26470,7 +26471,7 @@ msgstr "Requires everything in medium, plus being a member of the community for
msgid "Reschedule message"
msgstr "Reschedule message"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26490,7 @@ msgstr "Resend ({originalSecondsRemaining}s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Resend ({resendCooldownSeconds}s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Resend ({resendSecondsRemaining}s)"
@@ -27250,7 +27251,7 @@ msgid "Saturation"
msgstr "Saturation"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Save"
@@ -27370,7 +27371,7 @@ msgid "Saved."
msgstr "Saved."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "saves"
@@ -27719,7 +27720,7 @@ msgid "Search channels or DMs"
msgstr "Search channels or DMs"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Search communities"
@@ -27758,7 +27759,7 @@ msgstr "Search filter: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Search filters"
@@ -27852,7 +27853,7 @@ msgid "Search results"
msgstr "Search results"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Search results for “{query}”"
@@ -28232,8 +28233,8 @@ msgstr "Selectable text"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28366,7 @@ msgid "Send button"
msgstr "Send button"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28516,7 @@ msgid "Sending malware or dangerous links"
msgstr "Sending malware or dangerous links"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Sending messages is disabled in this community"
@@ -28623,7 +28624,7 @@ msgstr "Sessions"
msgid "Set {fieldNode} to {0}."
msgstr "Set {fieldNode} to {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Set a custom status"
@@ -28877,7 +28878,7 @@ msgid "Settings"
msgstr "Settings"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "settings link"
@@ -29848,7 +29849,7 @@ msgid "Skip this step"
msgstr "Skip this step"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Skip to content"
@@ -29935,7 +29936,7 @@ msgid "Slowmode"
msgstr "Slowmode"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Slowmode · wait {remaining}"
@@ -31352,7 +31353,7 @@ msgstr "Swedish"
msgid "Switch account"
msgstr "Switch account"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Switch accounts"
@@ -32795,7 +32796,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "This link channel is marked for mature content and may open material that may be inappropriate for some users."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "This link isn't available for your account."
@@ -34716,9 +34717,9 @@ msgstr "Unpinned group DM"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36660,7 @@ msgstr "Voice activation"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "Voice activity"
@@ -36716,7 +36717,7 @@ msgstr "Voice call. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "Voice channel"
@@ -38084,7 +38085,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll randomly when your {PREMIUM_PRODUCT_NAME} expires, unless it renews."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "You don't have access to the channel where this message was sent."
@@ -38231,12 +38232,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "You need access to your current email to change it from here. Use phone verification if available or contact support."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
@@ -38274,7 +38275,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "You need the \"{permissionLabel}\" permission to use stickers from other communities here."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
@@ -38514,7 +38515,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "You're on a legacy rate. The current price for this plan is {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "You're on timeout in this community"
@@ -38583,7 +38584,7 @@ msgstr "You’ve reached the community limit"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "You've reached the end"
@@ -38627,7 +38628,7 @@ msgstr "You've received a gift"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "You've requested too many verification emails. Please wait a moment and try again."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "You've seen all your recent mentions. More will appear here soon."
@@ -50,7 +50,7 @@ msgid "(you)"
msgstr "(you)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# member} other {# members}}"
@@ -289,14 +289,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} does not support subscriptions in {paymentProviderName} checkout."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} mentions"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -357,11 +357,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# bookmark} other {# bookmarks}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# community found} other {# communities found}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
@@ -635,12 +635,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# device selected for sign out} other {# devices selected for sign out}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} friend requests"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} unread DMs"
@@ -727,7 +727,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minutes"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "{folderName} folder"
@@ -1568,7 +1568,7 @@ msgid "1 day"
msgstr "1 day"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 friend request"
@@ -1623,7 +1623,7 @@ msgid "1 unread"
msgstr "1 unread"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 unread DM"
@@ -2249,13 +2249,13 @@ msgstr "Activation click"
msgid "Active"
msgstr "Active"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Active account"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "active call"
@@ -2908,8 +2908,8 @@ msgstr "Alignment controls are only available on wider screens"
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "All"
@@ -2986,7 +2986,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "All inputs are fully interactive, so type away."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "All languages"
@@ -5786,8 +5786,8 @@ msgstr "Can't upload files here"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5813,7 +5813,7 @@ msgstr "Can't upload files here"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5999,12 +5999,12 @@ msgstr "Cards can keep TRY pricing after a quick {paymentProviderName} verificat
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Categories"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "category"
@@ -6314,7 +6314,7 @@ msgstr "Changes apply instantly to the live client."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "channel"
@@ -6334,7 +6334,7 @@ msgid "Channel"
msgstr "Channel"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Channel {id}"
@@ -6344,7 +6344,7 @@ msgid "Channel access"
msgstr "Channel access"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Channel access denied"
@@ -6409,7 +6409,7 @@ msgstr "Channel ID copied to clipboard"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "channel link"
@@ -7010,7 +7010,7 @@ msgstr "Claim your account"
msgid "Claim your account and verify your email to send reports."
msgstr "Claim your account and verify your email to send reports."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
@@ -7598,7 +7598,7 @@ msgid "Collapse"
msgstr "Collapse"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Collapse {folderName}"
@@ -7642,8 +7642,8 @@ msgstr "Collapse unread messages for {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "collapsed"
@@ -8267,7 +8267,7 @@ msgid "Connect with {providerName}"
msgstr "Connect with {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "connected"
@@ -8667,7 +8667,7 @@ msgid "Copy banner URL"
msgstr "Copy banner URL"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copy build info"
@@ -8899,7 +8899,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copy the setup key into your authenticator app."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copy user ID"
@@ -8924,7 +8924,7 @@ msgstr "Copy video"
msgid "Copy video link"
msgstr "Copy video link"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Copy voice diagnostics"
@@ -11196,13 +11196,13 @@ msgstr "Developer state"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Developer tools"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Developer tools are available from the staff badge in the channel header."
@@ -11658,7 +11658,7 @@ msgid "Discovery application withdrawn"
msgstr "Discovery application withdrawn"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Discovery categories"
@@ -11672,12 +11672,12 @@ msgid "Discovery navigation"
msgstr "Discovery navigation"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Discovery results"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Discovery search"
@@ -12367,7 +12367,7 @@ msgstr "Edit attachment"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12466,11 +12466,11 @@ msgstr "Edit or delete emoji and stickers created by other members."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edit overwrites for roles and members in this channel."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Edit profile"
@@ -12886,7 +12886,7 @@ msgid "Emoticons"
msgstr "Emoticons"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Empty favorites"
@@ -13466,7 +13466,7 @@ msgstr "Enter the code shown in the app to continue."
msgid "Enter the code we emailed to your new address."
msgstr "Enter the code we emailed to your new address."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
@@ -13803,8 +13803,8 @@ msgstr "Expand unread messages for {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "expanded"
@@ -13832,7 +13832,7 @@ msgstr "Expire after"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13916,7 +13916,7 @@ msgid "Explicit content filter setting"
msgstr "Explicit content filter setting"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Explore"
@@ -14602,7 +14602,7 @@ msgid "Filter by join method"
msgstr "Filter by join method"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filter by language"
@@ -14802,7 +14802,7 @@ msgstr "Focused voice"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Folder"
@@ -17156,7 +17156,7 @@ msgstr "In \"Operating system\" mode, dictionaries listed above are advisory. {P
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "In a call"
@@ -17735,7 +17735,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Invite link is hidden while sharing:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Invite link masked while sharing"
@@ -17757,7 +17757,7 @@ msgstr "Invite masking"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18163,7 +18163,7 @@ msgid "Jump to {displayName}"
msgstr "Jump to {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Jump to {labelText}"
@@ -18220,12 +18220,12 @@ msgid "Jump to the current call"
msgstr "Jump to the current call"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Jump to the linked channel"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Jump to the linked message"
@@ -18235,7 +18235,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Jump to the message from {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Jump to the message in {labelText}"
@@ -18713,7 +18713,7 @@ msgid "Light theme"
msgstr "Light theme"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "like"
@@ -18723,7 +18723,7 @@ msgid "Liked."
msgstr "Liked."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "likes"
@@ -18820,7 +18820,7 @@ msgid "Link styling"
msgstr "Link styling"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Link unavailable"
@@ -18929,7 +18929,7 @@ msgid "Loading banned users"
msgstr "Loading banned users"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Loading communities"
@@ -19269,7 +19269,7 @@ msgstr "Malware, credential theft, or harmful files."
msgid "Manage"
msgstr "Manage"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Manage accounts"
@@ -20080,8 +20080,8 @@ msgstr "message"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Message"
@@ -20221,7 +20221,7 @@ msgid "Message layout"
msgstr "Message layout"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "message link"
@@ -20666,7 +20666,7 @@ msgstr "Monthly gift"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21015,8 +21015,8 @@ msgstr "Mute stream audio"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21390,7 +21390,7 @@ msgid "New"
msgstr "New"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "New"
@@ -21578,7 +21578,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "No {sendMessagesPermission} permission"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "No access"
@@ -22684,7 +22684,7 @@ msgid "Open {displayName}"
msgstr "Open {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Open {labelText} in settings"
@@ -22804,7 +22804,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Open chat"
@@ -25154,12 +25154,12 @@ msgid "Quit {appName}"
msgstr "Quit {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "quote"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "quotes"
@@ -26335,12 +26335,12 @@ msgid "Reported user tag (optional)"
msgstr "Reported user tag (optional)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "repost"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "reposts"
@@ -26471,7 +26471,7 @@ msgstr "Requires everything in medium, plus being a member of the community for
msgid "Reschedule message"
msgstr "Reschedule message"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26490,7 +26490,7 @@ msgstr "Resend ({originalSecondsRemaining}s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Resend ({resendCooldownSeconds}s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Resend ({resendSecondsRemaining}s)"
@@ -27251,7 +27251,7 @@ msgid "Saturation"
msgstr "Saturation"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "save"
@@ -27371,7 +27371,7 @@ msgid "Saved."
msgstr "Saved."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "saves"
@@ -27720,7 +27720,7 @@ msgid "Search channels or DMs"
msgstr "Search channels or DMs"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Search communities"
@@ -27759,7 +27759,7 @@ msgstr "Search filter: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Search filters"
@@ -27853,7 +27853,7 @@ msgid "Search results"
msgstr "Search results"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Search results for “{query}”"
@@ -28233,8 +28233,8 @@ msgstr "Selectable text"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28366,7 +28366,7 @@ msgid "Send button"
msgstr "Send button"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28516,7 +28516,7 @@ msgid "Sending malware or dangerous links"
msgstr "Sending malware or dangerous links"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Sending messages is disabled in this community"
@@ -28624,7 +28624,7 @@ msgstr "Sessions"
msgid "Set {fieldNode} to {0}."
msgstr "Set {fieldNode} to {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Set a custom status"
@@ -28878,7 +28878,7 @@ msgid "Settings"
msgstr "Settings"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "settings link"
@@ -29849,7 +29849,7 @@ msgid "Skip this step"
msgstr "Skip this step"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Skip to content"
@@ -29936,7 +29936,7 @@ msgid "Slowmode"
msgstr "Slowmode"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Slowmode · wait {remaining}"
@@ -31353,7 +31353,7 @@ msgstr "Swedish"
msgid "Switch account"
msgstr "Switch account"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Switch accounts"
@@ -32796,7 +32796,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "This link channel is marked for mature content and may open material that may be inappropriate for some users."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "This link is not available for your account."
@@ -34717,9 +34717,9 @@ msgstr "Unpinned group DM"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36660,7 +36660,7 @@ msgstr "Voice activation"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "voice activity"
@@ -36717,7 +36717,7 @@ msgstr "Voice call. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "voice channel"
@@ -38085,7 +38085,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll randomly when your {PREMIUM_PRODUCT_NAME} expires, unless it renews."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "You do not have access to the channel where this message was sent."
@@ -38232,12 +38232,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "You need access to your current email to change it from here. Use phone verification if available or contact support."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
@@ -38275,7 +38275,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "You need the \"{permissionLabel}\" permission to use stickers from other communities here."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
@@ -38515,7 +38515,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "You're on a legacy rate. The current price for this plan is {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "You're on timeout in this community"
@@ -38584,7 +38584,7 @@ msgstr "You've reached the community limit"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "You've reached the end"
@@ -38628,7 +38628,7 @@ msgstr "You've received a gift"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "You've requested too many verification emails. Please wait a moment and try again."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "You've seen all your recent mentions. More will appear here soon."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(tú)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# miembro} other {# miembros}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} no admite suscripciones en la compra de {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# comunidad} many {# comunidades} other {# comunidades}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} menciones"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# mención} other {# menciones}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# marcador} other {# marcadores}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# comunidad encontrada} other {# comunidades encontradas}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# comunidad no está disponible temporalmente debido a una falla en el condensador de flujo.} other {# comunidades no están disponibles temporalmente debido a una falla en el condensador de flujo.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# dispositivo seleccionado para cerrar sesión} other {# dispositivos seleccionados para cerrar sesión}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} solicitudes de amistad"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} MD no leídos"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minutos"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Carpeta {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 día"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 solicitud de amistad"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 no leído"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 mensaje sin leer"
@@ -2248,13 +2248,13 @@ msgstr "Clic de activación"
msgid "Active"
msgstr "Activa"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Cuenta activa"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "llamada activa"
@@ -2907,8 +2907,8 @@ msgstr "Los controles de alineación solo están disponibles en pantallas más a
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Todo"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Todos los campos son interactivos, así que escribe lo que quieras."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Todos los idiomas"
@@ -5785,8 +5785,8 @@ msgstr "No se pueden subir archivos aquí"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "No se pueden subir archivos aquí"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Las tarjetas pueden mantener los precios en TRY después de una verifica
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Categorías"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "categoría"
@@ -6313,7 +6313,7 @@ msgstr "Los cambios se aplican al instante en el cliente en vivo."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "canal"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Canal"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Canal {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Acceso al canal"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Acceso al canal denegado"
@@ -6408,7 +6408,7 @@ msgstr "ID del canal copiado al portapapeles"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "enlace al canal"
@@ -7009,7 +7009,7 @@ msgstr "Reclama tu cuenta"
msgid "Claim your account and verify your email to send reports."
msgstr "Reclama tu cuenta y verifica tu correo electrónico para enviar informes."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Reclama tu cuenta agregando un correo electrónico y una contraseña. Te enviaremos un código de verificación para confirmar tu correo antes de finalizar."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Contraer"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Contraer {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Contraer mensajes no leídos de {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "contraído"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Conectar con {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "conectado"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Copiar URL del banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copiar información de la versión"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copia la clave de configuración en tu aplicación de autenticación."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copiar ID de usuario"
@@ -8923,7 +8923,7 @@ msgstr "Copiar video"
msgid "Copy video link"
msgstr "Copiar enlace del video"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Copiar diagnóstico de voz"
@@ -11195,13 +11195,13 @@ msgstr "Estado de desarrollador"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Herramientas de desarrollador"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Las herramientas de desarrollador están disponibles desde la insignia de personal en el encabezado del canal."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Solicitud de descubrimiento retirada"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Categorías de descubrimiento"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Navegación de descubrimiento"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Resultados de descubrimiento"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Búsqueda de Descubrimiento"
@@ -12366,7 +12366,7 @@ msgstr "Editar archivo adjunto"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Editar o eliminar emojis y stickers creados por otros miembros."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edita los permisos de roles y miembros en este canal."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Editar perfil"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Emoticones"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Favoritos vacíos"
@@ -13465,7 +13465,7 @@ msgstr "Ingresa el código que aparece en la app para continuar."
msgid "Enter the code we emailed to your new address."
msgstr "Ingresa el código que enviamos a tu nueva dirección de correo."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Ingresa el código que enviamos a tu correo electrónico para verificarlo. Tu contraseña se establecerá una vez que se confirme el código."
@@ -13802,8 +13802,8 @@ msgstr "Expandir mensajes no leídos de {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "expandido"
@@ -13831,7 +13831,7 @@ msgstr "Vence después de"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Ajuste del filtro de contenido explícito"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Explorar"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Filtrar por método de unión"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filtrar por idioma"
@@ -14801,7 +14801,7 @@ msgstr "Voz enfocada"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Carpeta"
@@ -17155,7 +17155,7 @@ msgstr "En el modo \"Sistema operativo\", los diccionarios que se muestran arrib
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "En un navegador, la función pulsar para hablar solo funciona mientras la pestaña de {PRODUCT_NAME} esté activa. Instala la aplicación de escritorio para usar pulsar para hablar en todo el sistema."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "En una llamada"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "El enlace de invitación está oculto mientras compartes:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Enlace de invitación oculto mientras compartes pantalla"
@@ -17756,7 +17756,7 @@ msgstr "Ocultar invitaciones"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Ir a {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Ir a {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Ir a la llamada actual"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Ir al canal enlazado"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Ir al mensaje enlazado"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Ir al mensaje de {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Ir al mensaje en {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Tema claro"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "me gusta"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Te gusta."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "me gusta"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Estilo de enlaces"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Enlace no disponible"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Cargando usuarios bloqueados"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Cargando comunidades"
@@ -19268,7 +19268,7 @@ msgstr "Malware, robo de credenciales o archivos dañinos."
msgid "Manage"
msgstr "Administrar"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Administrar cuentas"
@@ -20079,8 +20079,8 @@ msgstr "mensaje"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Mensaje"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Diseño de mensajes"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "enlace del mensaje"
@@ -20665,7 +20665,7 @@ msgstr "Regalo mensual"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Silenciar audio de la transmisión"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Nuevo"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Nuevo"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Sin permiso de {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Sin acceso"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Abrir {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Abrir {labelText} en la configuración"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Abrir chat"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Salir de {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "cita"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "citas"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Etiqueta del usuario reportado (opcional)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "republicar"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "republicaciones"
@@ -26470,7 +26470,7 @@ msgstr "Requiere todo lo de nivel medio, además de ser miembro de la comunidad
msgid "Reschedule message"
msgstr "Reprogramar mensaje"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Reenviar ({originalSecondsRemaining}s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Reenviar ({resendCooldownSeconds}s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Reenviar ({resendSecondsRemaining}s)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Saturación"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "guardar"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Guardado."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "guardados"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Buscar canales o mensajes directos"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Buscar comunidades"
@@ -27758,7 +27758,7 @@ msgstr "Filtro de búsqueda: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Filtros de búsqueda"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Resultados de búsqueda"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Resultados de búsqueda para “{query}”"
@@ -28232,8 +28232,8 @@ msgstr "Texto seleccionable"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Botón de enviar"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Enviar malware o enlaces peligrosos"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "No se pueden enviar mensajes en esta comunidad"
@@ -28623,7 +28623,7 @@ msgstr "Sesiones"
msgid "Set {fieldNode} to {0}."
msgstr "Establecer {fieldNode} en {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Establecer un estado personalizado"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Configuración"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "configuración enlace"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Omitir este paso"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Saltar al contenido"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Modo lento"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Modo lento · espera {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Sueco"
msgid "Switch account"
msgstr "Cambiar de cuenta"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Cambiar de cuenta"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Este canal de enlaces está marcado para contenido para adultos y puede mostrar material que no es apropiado para algunos usuarios."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Este enlace no está disponible para tu cuenta."
@@ -34716,9 +34716,9 @@ msgstr "MD de grupo desanclado"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Activación por voz"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "actividad de voz"
@@ -36716,7 +36716,7 @@ msgstr "Llamada de voz. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "canal de voz"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Cambiaste tu tag mientras usabas {PREMIUM_PRODUCT_NAME}. Se volverá a generar aleatoriamente cuando tu {PREMIUM_PRODUCT_NAME} expire, a menos que se renueve."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "No tienes acceso al canal donde se envió este mensaje."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Necesitas acceso a tu correo electrónico actual para cambiarlo desde aquí. Usa la verificación por teléfono si está disponible o contacta a soporte."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Necesitas el permiso \"{attachFilesPermissionLabel}\" para adjuntar archivos en este canal"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Necesitas el permiso \"{embedLinksPermissionLabel}\" para insertar enlaces en este canal"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Necesitas el permiso \"{permissionLabel}\" para usar stickers de otras comunidades aquí."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Necesitas el permiso \"{sendMessagesPermissionLabel}\" para enviar mensajes en este canal"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Tienes una tarifa anterior. El precio actual de este plan es {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Estás en un tiempo fuera en esta comunidad"
@@ -38583,7 +38583,7 @@ msgstr "Alcanzaste el límite de comunidades"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Llegaste al final"
@@ -38627,7 +38627,7 @@ msgstr "Recibiste un regalo"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Has solicitado demasiados correos de verificación. Espera un momento y vuelve a intentarlo."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Ya viste todas tus menciones recientes. Pronto aparecerán más aquí."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(tú)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# miembro} other {# miembros}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} no admite suscripciones en el proceso de pago de {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# comunidad} many {# comunidades} other {# comunidades}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} menciones"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# mención} other {# menciones}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# marcador} other {# marcadores}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# comunidad encontrada} other {# comunidades encontradas}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# comunidad no está disponible temporalmente debido a un fallo en el condensador de flujo.} other {# comunidades no están disponibles temporalmente debido a un fallo en el condensador de flujo.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# dispositivo seleccionado para cerrar sesión} other {# dispositivos seleccionados para cerrar sesión}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} solicitudes de amistad"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} MD sin leer"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minutos"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Carpeta {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 día"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 solicitud de amistad"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 no leído"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 mensaje sin leer"
@@ -2248,13 +2248,13 @@ msgstr "Clic de activación"
msgid "Active"
msgstr "Activa"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Cuenta activa"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "llamada activa"
@@ -2907,8 +2907,8 @@ msgstr "Los controles de alineación solo están disponibles en pantallas más a
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Todo"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Todos los campos son totalmente interactivos, así que escribe lo que quieras."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Todos los idiomas"
@@ -5785,8 +5785,8 @@ msgstr "No se pueden subir archivos aquí"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "No se pueden subir archivos aquí"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Las tarjetas pueden mantener el precio en TRY tras una verificación rá
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Categorías"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "categoría"
@@ -6313,7 +6313,7 @@ msgstr "Los cambios se aplican al instante en el cliente."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "canal"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Canal"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Canal {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Acceso al canal"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Acceso al canal denegado"
@@ -6408,7 +6408,7 @@ msgstr "ID del canal copiado al portapapeles"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "enlace del canal"
@@ -7009,7 +7009,7 @@ msgstr "Reclama tu cuenta"
msgid "Claim your account and verify your email to send reports."
msgstr "Reclama tu cuenta y verifica tu correo electrónico para enviar informes."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Reclama tu cuenta añadiendo un correo electrónico y una contraseña. Te enviaremos un código de verificación para confirmar tu correo antes de finalizar."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Contraer"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Contraer {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Contraer los mensajes no leídos de {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "contraído"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Conectar con {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "conectado"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Copiar URL del banner"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copiar información de la compilación"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copia la clave de configuración en tu aplicación de autenticación."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copiar ID de usuario"
@@ -8923,7 +8923,7 @@ msgstr "Copiar vídeo"
msgid "Copy video link"
msgstr "Copiar enlace del vídeo"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Copiar diagnóstico de voz"
@@ -11195,13 +11195,13 @@ msgstr "Estado de desarrollador"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Herramientas de desarrollador"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Las herramientas de desarrollador están disponibles desde la insignia de personal en el encabezado del canal."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Solicitud de descubrimiento retirada"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Categorías de descubrimiento"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Navegación de Descubrimiento"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Resultados de descubrimiento"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Búsqueda de Discovery"
@@ -12366,7 +12366,7 @@ msgstr "Editar archivo adjunto"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Editar o eliminar emojis y stickers creados por otros miembros."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Edita las anulaciones para roles y miembros en este canal."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Editar perfil"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Emoticones"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Favoritos vacíos"
@@ -13465,7 +13465,7 @@ msgstr "Introduce el código que aparece en la aplicación para continuar."
msgid "Enter the code we emailed to your new address."
msgstr "Introduce el código que te hemos enviado por correo electrónico a tu nueva dirección."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Introduce el código que te hemos enviado a tu correo electrónico para verificarlo. Tu contraseña se establecerá una vez que se confirme el código."
@@ -13802,8 +13802,8 @@ msgstr "Expandir mensajes no leídos de {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "expandido"
@@ -13831,7 +13831,7 @@ msgstr "Caduca después de"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Ajuste del filtro de contenido explícito"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Explorar"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Filtrar por método de unión"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filtrar por idioma"
@@ -14801,7 +14801,7 @@ msgstr "Voz enfocada"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Carpeta"
@@ -17155,7 +17155,7 @@ msgstr "En el modo \"Sistema operativo\", los diccionarios indicados anteriormen
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "En un navegador, la función pulsar para hablar solo funciona si la pestaña de {PRODUCT_NAME} está activa. Instala la aplicación de escritorio para usar la función pulsar para hablar en todo el sistema."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "En una llamada"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "El enlace de invitación está oculto mientras compartes:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Enlace de invitación oculto mientras compartes pantalla"
@@ -17756,7 +17756,7 @@ msgstr "Ocultar invitaciones"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Ir a {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Ir a {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Ir a la llamada actual"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Ir al canal enlazado"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Ir al mensaje enlazado"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Ir al mensaje de {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Ir al mensaje en {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Tema claro"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "Me gusta"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Marcado con Me gusta."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "Me gusta"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Estilo de los enlaces"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Enlace no disponible"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Cargando usuarios bloqueados"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Cargando comunidades"
@@ -19268,7 +19268,7 @@ msgstr "Malware, robo de credenciales o archivos dañinos."
msgid "Manage"
msgstr "Administrar"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Gestionar cuentas"
@@ -20079,8 +20079,8 @@ msgstr "mensaje"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Mensaje"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Diseño de los mensajes"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "enlace del mensaje"
@@ -20665,7 +20665,7 @@ msgstr "Regalo mensual"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Silenciar audio de la transmisión"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Nuevo"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Nuevo"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Sin permiso de {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Sin acceso"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Abrir {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Abrir {labelText} en la configuración"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Abrir chat"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Salir de {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "Cita"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "citas"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Etiqueta del usuario denunciado (opcional)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "republicar"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "republicaciones"
@@ -26470,7 +26470,7 @@ msgstr "Requiere todo lo de nivel medio, además de ser miembro de la comunidad
msgid "Reschedule message"
msgstr "Reprogramar mensaje"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Reenviar ({originalSecondsRemaining} s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Reenviar ({resendCooldownSeconds} s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Reenviar ({resendSecondsRemaining} s)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Saturación"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Guardar"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Guardado."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "guardados"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Buscar canales o MD"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Buscar comunidades"
@@ -27758,7 +27758,7 @@ msgstr "Filtro de búsqueda: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Filtros de búsqueda"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Resultados de búsqueda"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Resultados de búsqueda para «{query}»"
@@ -28232,8 +28232,8 @@ msgstr "Texto seleccionable"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Botón de enviar"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Enviar malware o enlaces peligrosos"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "El envío de mensajes está deshabilitado en esta comunidad"
@@ -28623,7 +28623,7 @@ msgstr "Sesiones"
msgid "Set {fieldNode} to {0}."
msgstr "Establecer {fieldNode} en {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Establecer un estado personalizado"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Ajustes"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "enlace de configuración"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Omitir este paso"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Saltar al contenido"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Modo lento"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Modo lento · espera {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Sueco"
msgid "Switch account"
msgstr "Cambiar de cuenta"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Cambiar de cuenta"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Este canal de enlaces está marcado para contenido para adultos y puede abrir material que podría ser inapropiado para algunos usuarios."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Este enlace no está disponible para tu cuenta."
@@ -34716,9 +34716,9 @@ msgstr "MD de grupo desanclado"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Activación por voz"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "actividad de voz"
@@ -36716,7 +36716,7 @@ msgstr "Llamada de voz. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "canal de voz"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Cambiaste tu etiqueta mientras usabas {PREMIUM_PRODUCT_NAME}. Se volverá a generar aleatoriamente cuando caduque tu {PREMIUM_PRODUCT_NAME}, a menos que se renueve."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "No tienes acceso al canal donde se envió este mensaje."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Necesitas acceder a tu correo electrónico actual para cambiarlo desde aquí. Usa la verificación por teléfono si está disponible o contacta con soporte."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Necesitas el permiso \"{attachFilesPermissionLabel}\" para adjuntar archivos en este canal"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Necesitas el permiso \"{embedLinksPermissionLabel}\" para insertar enlaces en este canal"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Necesitas el permiso \"{permissionLabel}\" para usar stickers de otras comunidades aquí."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Necesitas el permiso \"{sendMessagesPermissionLabel}\" para enviar mensajes en este canal"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Tienes una tarifa antigua. El precio actual de este plan es {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Tienes un tiempo de espera en esta comunidad"
@@ -38583,7 +38583,7 @@ msgstr "Has alcanzado el límite de comunidades"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Has llegado al final"
@@ -38627,7 +38627,7 @@ msgstr "Has recibido un regalo"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Has solicitado demasiados correos de verificación. Espera un momento y vuelve a intentarlo."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Has visto todas tus menciones recientes. Pronto aparecerán más aquí."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(sinä)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# jäsen} other {# jäsentä}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} ei tue tilauksia {paymentProviderName}-maksupalvelussa."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# yhteisö} other {# yhteisöä}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} mainintaa"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# maininta} other {# mainintaa}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# kirjanmerkki} other {# kirjanmerkkiä}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# yhteisö löytyi} other {# yhteisöä löytyi}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# yhteisö on tilapäisesti pois käytöstä toimintahäiriön vuoksi.} other {# yhteisöä on tilapäisesti pois käytöstä toimintahäiriön vuoksi.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# laite valittu uloskirjautumista varten} other {# laitetta valittu uloskirjautumista varten}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} kaveripyyntöä"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} lukematonta DM:ää"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minuuttia"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Kansio: {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 päivä"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 kaveripyyntö"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 lukematon"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 lukematon yksityisviesti"
@@ -2248,13 +2248,13 @@ msgstr "Aktivointiklikkaus"
msgid "Active"
msgstr "Aktiivinen"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktiivinen tili"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "aktiivinen puhelu"
@@ -2907,8 +2907,8 @@ msgstr "Kohdistussäätimet ovat käytettävissä vain leveämmillä näytöill
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Kaikki"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Kaikki kentät ovat täysin interaktiivisia, joten voit kirjoittaa niihin vapaasti."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Kaikki kielet"
@@ -5785,8 +5785,8 @@ msgstr "Tiedostojen lähetys ei onnistu tähän"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Tiedostojen lähetys ei onnistu tähän"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Kortit voivat säilyttää TRY-hinnoittelun nopean {paymentProviderName}
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Kategoriat"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "kategoria"
@@ -6313,7 +6313,7 @@ msgstr "Muutokset tulevat voimaan välittömästi live-asiakasohjelmassa."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "kanava"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Kanava"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Kanava {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Kanavan käyttöoikeus"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Kanavan käyttö estetty"
@@ -6408,7 +6408,7 @@ msgstr "Kanavan tunnus kopioitu leikepöydälle"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "kanavalinkki"
@@ -7009,7 +7009,7 @@ msgstr "Lunasta tilisi"
msgid "Claim your account and verify your email to send reports."
msgstr "Lunasta tilisi ja vahvista sähköpostiosoitteesi lähettääksesi ilmoituksia."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Lunasta tilisi lisäämällä sähköpostiosoite ja salasana. Lähetämme vahvistuskoodin sähköpostiisi ennen viimeistelyä."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Tiivistä"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Kutista {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Tiivistä lukemattomat viestit kanavalta {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "tiivistetty"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Yhdistä palveluun {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "Yhdistetty"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Kopioi bannerin URL-osoite"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopioi koontiversion tiedot"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopioi asennusavain autentikointisovellukseesi."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopioi käyttäjätunnus"
@@ -8923,7 +8923,7 @@ msgstr "Kopioi video"
msgid "Copy video link"
msgstr "Kopioi videolinkki"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Kopioi puhediagnostiikka"
@@ -11195,13 +11195,13 @@ msgstr "Kehittäjän tila"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Kehittäjän työkalut"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Kehittäjän työkalut ovat käytettävissä kanavan otsikon henkilöstömerkistä."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Hakemus peruutettu"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Löydä-kategoriat"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Löydä-osion navigointi"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Hakutulokset"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Discovery-haku"
@@ -12366,7 +12366,7 @@ msgstr "Muokkaa liitettä"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Muokkaa tai poista muiden jäsenten luomia emojeita ja tarroja."
msgid "Edit overwrites for roles and members in this channel."
msgstr "Muokkaa roolien ja jäsenten ohituksia tällä kanavalla."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Muokkaa profiilia"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Hymiöt"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Ei suosikkeja"
@@ -13465,7 +13465,7 @@ msgstr "Jatka syöttämällä sovelluksessa näkyvä koodi."
msgid "Enter the code we emailed to your new address."
msgstr "Anna uuteen osoitteeseesi lähettämämme koodi."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Vahvista sähköpostiosoitteesi antamalla siihen lähettämämme koodi. Salasanasi asetetaan, kun koodi on vahvistettu."
@@ -13802,8 +13802,8 @@ msgstr "Laajenna lukemattomat viestit kohteelle {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "Laajennettu"
@@ -13831,7 +13831,7 @@ msgstr "Vanhenee"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Asetus arkaluonteisen sisällön suodattimelle"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Tutustu"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Suodata liittymistavan mukaan"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Suodata kielen mukaan"
@@ -14801,7 +14801,7 @@ msgstr "Kohdennettu ääni"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Kansio"
@@ -17155,7 +17155,7 @@ msgstr "Käyttöjärjestelmä-tilassa yllä luetellut sanakirjat ovat ohjeellisi
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Selaimessa paina ja puhu -toiminto toimii vain, kun {PRODUCT_NAME}-välilehti on aktiivinen. Asenna työpöytäsovellus, jos haluat käyttää paina ja puhu -toimintoa koko järjestelmässä."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "Puhelussa"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Kutsu linkki on piilotettu jakamisen aikana:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Kutsu linkki piilotettu jakamisen aikana"
@@ -17756,7 +17756,7 @@ msgstr "Kutsujen peittäminen"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Siirry kohtaan {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Siirry kohtaan {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Siirry puheluun"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Siirry linkitettyyn kanavaan"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Siirry linkitettyyn viestiin"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Siirry viestin kirjoittajan viestiin {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Siirry viestiin kohteessa {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Vaalea teema"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "tykkää"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Tykätty."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "tykkäystä"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Linkkien tyyli"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Linkki ei saatavilla"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Ladataan porttikiellettyjä käyttäjiä"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Ladataan yhteisöjä"
@@ -19268,7 +19268,7 @@ msgstr "Haittaohjelmat, tunnusten kalastelu tai haitalliset tiedostot."
msgid "Manage"
msgstr "Hallitse"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Hallinnoi tilejä"
@@ -20079,8 +20079,8 @@ msgstr "viesti"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Viesti"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Viestin asettelu"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "viestilinkki"
@@ -20665,7 +20665,7 @@ msgstr "Kuukausilahja"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Mykistä striimin ääni"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Uudet"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Uusi"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Ei {sendMessagesPermission}-oikeutta"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Ei käyttöoikeutta"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Avaa {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Avaa {labelText} asetuksissa"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Avaa chat"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Lopeta {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "lainaus"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "lainaukset"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Ilmoitetun käyttäjän tunnus (valinnainen)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "uudelleenjaettu"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "uudelleenjaot"
@@ -26470,7 +26470,7 @@ msgstr "Edellyttää kaikkea, mitä keskimmäinen taso edellyttää, sekä sitä
msgid "Reschedule message"
msgstr "Ajoita viesti uudelleen"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Lähetä uudelleen ({originalSecondsRemaining} s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Lähetä uudelleen ({resendCooldownSeconds} s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Lähetä uudelleen ({resendSecondsRemaining} s)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Kylläisyys"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "tallenna"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Tallennettu."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "tallennusta"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Hae kanavia tai yksityisviestejä"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Hae yhteisöjä"
@@ -27758,7 +27758,7 @@ msgstr "Haku: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Hakusuodattimet"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Hakutulokset"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Hakutulokset haulle ”{query}”"
@@ -28232,8 +28232,8 @@ msgstr "Valittava teksti"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Lähetä-painike"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Haittaohjelmien tai vaarallisten linkkien lähettäminen"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Viestien lähettäminen on poistettu käytöstä tässä yhteisössä"
@@ -28623,7 +28623,7 @@ msgstr "Istunnot"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} asetettu arvoon {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Aseta mukautettu tila"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Asetukset"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "asetuslinkki"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Ohita tämä vaihe"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Siirry sisältöön"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Hidas tila"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Hidas tila · odota {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "ruotsi"
msgid "Switch account"
msgstr "Vaihda tiliä"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Vaihda tiliä"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Tämä linkkikanava on merkitty aikuisille suunnatuksi sisällöksi, ja se voi sisältää materiaalia, joka ei sovi kaikille käyttäjille."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Tämä linkki ei ole käytettävissä tililläsi."
@@ -34716,9 +34716,9 @@ msgstr "Ryhmäkeskustelu irrotettu"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Ääniaktivointi"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "puheaktiivisuus"
@@ -36716,7 +36716,7 @@ msgstr "Äänipuhelu. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "äänikanava"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Vaihdoit tunnuksesi ollessasi {PREMIUM_PRODUCT_NAME}-tilauksen käyttäjä. Tunnuksesi arvotaan uudelleen satunnaisesti, kun {PREMIUM_PRODUCT_NAME}-tilauksesi päättyy, ellei sitä uusita."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Sinulla ei ole pääsyä kanavalle, jolle tämä viesti lähetettiin."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Jotta voit vaihtaa sähköpostiosoitteesi täältä, tarvitset pääsyn nykyiseen sähköpostiisi. Käytä puhelinvarmennusta, jos se on saatavilla, tai ota yhteyttä tukeen."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Tarvitset luvan \"{attachFilesPermissionLabel}\" liittääksesi tiedostoja tähän kanavaan"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Tarvitset luvan \"{embedLinksPermissionLabel}\" upottaaksesi linkkejä tähän kanavaan"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Tarvitset luvan \"{permissionLabel}\" käyttääksesi tarroja muista yhteisöistä täällä."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Tarvitset luvan \"{sendMessagesPermissionLabel}\" lähettääksesi viestejä tällä kanavalla"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Käytössäsi on vanha hinta. Tämän tilauksen nykyinen hinta on {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Olet aikakatkaistuna tässä yhteisössä"
@@ -38583,7 +38583,7 @@ msgstr "Olet saavuttanut yhteisöjen enimmäismäärän"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Olet saavuttanut lopun"
@@ -38627,7 +38627,7 @@ msgstr "Olet saanut lahjan"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Olet pyytänyt liian monta vahvistussähköpostia. Odota hetki ja yritä uudelleen."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Olet nähnyt kaikki viimeisimmät mainintasi. Uusia ilmestyy pian tähän."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(vous)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# membre} other {# membres}}"
@@ -288,14 +288,15 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "Les abonnements ne sont pas pris en charge par {blikPaymentMethod} dans le processus de paiement {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# communauté} many {# communautés} other {# communautés}}"
# auto-i18n: reviewed unchanged
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} mentions"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +357,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# signet} other {# signets}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# communauté trouvée} other {# communautés trouvées}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# communauté est temporairement indisponible en raison d'un dysfonctionnement du condensateur de flux.} other {# communautés sont temporairement indisponibles en raison d'un dysfonctionnement du condensateur de flux.}}"
@@ -634,12 +635,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# appareil sélectionné pour la déconnexion} other {# appareils sélectionnés pour la déconnexion}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} demandes d'ami"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} MP non lus"
@@ -726,7 +727,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minutes"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Dossier {folderName}"
@@ -1567,7 +1568,7 @@ msgid "1 day"
msgstr "1 jour"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 demande d'ami"
@@ -1622,7 +1623,7 @@ msgid "1 unread"
msgstr "1 non lu"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 MP non lu"
@@ -2248,13 +2249,13 @@ msgstr "Clic d'activation"
msgid "Active"
msgstr "Actif"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Compte actif"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "appel en cours"
@@ -2907,8 +2908,8 @@ msgstr "Les contrôles d'alignement ne sont disponibles que sur les écrans plus
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Tout"
@@ -2985,7 +2986,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Tous les champs sont entièrement interactifs, alors n'hésitez pas à taper."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Toutes les langues"
@@ -5785,8 +5786,8 @@ msgstr "Impossible de charger des fichiers ici"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5813,7 @@ msgstr "Impossible de charger des fichiers ici"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5999,12 @@ msgstr "Les cartes peuvent conserver la tarification en TRY après une vérifica
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Catégories"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "Catégorie"
@@ -6313,7 +6314,7 @@ msgstr "Les modifications s'appliquent instantanément au client en direct."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "salon"
@@ -6333,7 +6334,7 @@ msgid "Channel"
msgstr "Chaîne"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Chaîne {id}"
@@ -6343,7 +6344,7 @@ msgid "Channel access"
msgstr "Accès aux salons"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Accès à la chaîne refusé"
@@ -6408,7 +6409,7 @@ msgstr "ID du salon copié dans le presse-papiers"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "Lien de chaîne"
@@ -7009,7 +7010,7 @@ msgstr "Réclamer votre compte"
msgid "Claim your account and verify your email to send reports."
msgstr "Réclamez votre compte et vérifiez votre adresse e-mail pour envoyer des signalements."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Récupérez votre compte en ajoutant un e-mail et un mot de passe. Nous vous enverrons un code de vérification pour confirmer votre e-mail avant de finaliser."
@@ -7597,7 +7598,7 @@ msgid "Collapse"
msgstr "Réduire"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Réduire {folderName}"
@@ -7641,8 +7642,8 @@ msgstr "Réduire les messages non lus pour {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "réduit"
@@ -8266,7 +8267,7 @@ msgid "Connect with {providerName}"
msgstr "Se connecter avec {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "connecté"
@@ -8666,7 +8667,7 @@ msgid "Copy banner URL"
msgstr "Copier l'URL de la bannière"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Copier les infos de build"
@@ -8898,7 +8899,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Copiez la clé de configuration dans votre application d’authentification."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Copier l'identifiant de l'utilisateur"
@@ -8923,7 +8924,7 @@ msgstr "Copier la vidéo"
msgid "Copy video link"
msgstr "Copier le lien de la vidéo"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Copier les diagnostics vocaux"
@@ -11195,13 +11196,13 @@ msgstr "État du développeur"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Outils de développement"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Les outils de développement sont accessibles depuis le badge du personnel dans l'en-tête du salon."
@@ -11657,7 +11658,7 @@ msgid "Discovery application withdrawn"
msgstr "Demande de découverte retirée"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Catégories Découverte"
@@ -11671,12 +11672,12 @@ msgid "Discovery navigation"
msgstr "Navigation Découverte"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Résultats de la découverte"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Recherche dans la Découverte"
@@ -12366,7 +12367,7 @@ msgstr "Modifier la pièce jointe"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12466,11 @@ msgstr "Modifier ou supprimer les émojis et autocollants créés par d'autres m
msgid "Edit overwrites for roles and members in this channel."
msgstr "Modifier les remplacements pour les rôles et les membres dans ce salon."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Modifier le profil"
@@ -12885,7 +12886,7 @@ msgid "Emoticons"
msgstr "Émoticônes"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Favoris vides"
@@ -13465,7 +13466,7 @@ msgstr "Saisissez le code affiché dans l'application pour continuer."
msgid "Enter the code we emailed to your new address."
msgstr "Saisissez le code que nous avons envoyé à votre nouvelle adresse e-mail."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Saisissez le code que nous avons envoyé à votre adresse e-mail pour la vérifier. Votre mot de passe sera défini une fois le code confirmé."
@@ -13802,8 +13803,8 @@ msgstr "Afficher les nouveaux messages pour {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "développé"
@@ -13831,7 +13832,7 @@ msgstr "Expire après"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13916,7 @@ msgid "Explicit content filter setting"
msgstr "Paramètre du filtre de contenu explicite"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Explorer"
@@ -14601,7 +14602,7 @@ msgid "Filter by join method"
msgstr "Filtrer par méthode d'adhésion"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filtrer par langue"
@@ -14801,7 +14802,7 @@ msgstr "Voix focalisée"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Dossier"
@@ -17155,7 +17156,7 @@ msgstr "En mode \" Système d'exploitation \", les dictionnaires listés ci-dess
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Dans un navigateur, la fonction \" Appuyer pour parler \" ne fonctionne que lorsque l'onglet {PRODUCT_NAME} est actif. Installez l'application de bureau pour utiliser cette fonction à l'échelle du système."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "En appel"
@@ -17734,7 +17735,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Le lien d'invitation est masqué pendant le partage :"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Lien d’invitation masqué pendant le partage d’écran"
@@ -17756,7 +17757,7 @@ msgstr "Masquage des invitations"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18163,7 @@ msgid "Jump to {displayName}"
msgstr "Aller à {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Aller à {labelText}"
@@ -18219,12 +18220,12 @@ msgid "Jump to the current call"
msgstr "Rejoindre l'appel en cours"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Accéder au salon lié"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Aller au message lié"
@@ -18234,7 +18235,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Aller au message de {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Aller au message dans {labelText}"
@@ -18712,7 +18713,7 @@ msgid "Light theme"
msgstr "Thème clair"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "J'aime"
@@ -18722,7 +18723,7 @@ msgid "Liked."
msgstr "Aimé."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "J'aime"
@@ -18819,7 +18820,7 @@ msgid "Link styling"
msgstr "Style des liens"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Lien indisponible"
@@ -18928,7 +18929,7 @@ msgid "Loading banned users"
msgstr "Chargement des utilisateurs bannis"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Chargement des communautés"
@@ -19268,7 +19269,7 @@ msgstr "Logiciels malveillants, vol d'identifiants ou fichiers nuisibles."
msgid "Manage"
msgstr "Gérer"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Gérer les comptes"
@@ -20079,8 +20080,8 @@ msgstr "message"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Message"
@@ -20220,7 +20221,7 @@ msgid "Message layout"
msgstr "Disposition des messages"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "lien du message"
@@ -20665,7 +20666,7 @@ msgstr "Cadeau mensuel"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21015,8 @@ msgstr "Couper le son du flux"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21390,7 @@ msgid "New"
msgstr "Nouveau"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Nouveau"
@@ -21577,7 +21578,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Aucune autorisation {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Accès refusé"
@@ -22683,7 +22684,7 @@ msgid "Open {displayName}"
msgstr "Ouvrir {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Ouvrir {labelText} dans les paramètres"
@@ -22803,7 +22804,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Ouvrir le chat"
@@ -25153,12 +25154,12 @@ msgid "Quit {appName}"
msgstr "Quitter {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "citation"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "citations"
@@ -26334,12 +26335,12 @@ msgid "Reported user tag (optional)"
msgstr "Tag de l'utilisateur signalé (facultatif)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "republier"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "Reposts"
@@ -26470,7 +26471,7 @@ msgstr "Nécessite tout ce qui est en moyen, plus être membre de la communauté
msgid "Reschedule message"
msgstr "Reprogrammer le message"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26490,7 @@ msgstr "Renvoyer ({originalSecondsRemaining} s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Renvoyer ({resendCooldownSeconds} s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Renvoyer ({resendSecondsRemaining} s)"
@@ -27250,7 +27251,7 @@ msgid "Saturation"
msgstr "Saturation"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Enregistrer"
@@ -27370,7 +27371,7 @@ msgid "Saved."
msgstr "Enregistré."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "enregistrements"
@@ -27719,7 +27720,7 @@ msgid "Search channels or DMs"
msgstr "Rechercher des salons ou des messages directs"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Rechercher des communautés"
@@ -27758,7 +27759,7 @@ msgstr "Filtre de recherche : {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Filtres de recherche"
@@ -27852,7 +27853,7 @@ msgid "Search results"
msgstr "Résultats de recherche"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Résultats de recherche pour « {query} »"
@@ -28232,8 +28233,8 @@ msgstr "Texte sélectionnable"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28366,7 @@ msgid "Send button"
msgstr "Bouton d'envoi"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28516,7 @@ msgid "Sending malware or dangerous links"
msgstr "Envoi de logiciels malveillants ou de liens dangereux"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "L'envoi de messages est désactivé dans cette communauté"
@@ -28623,7 +28624,7 @@ msgstr "Sessions"
msgid "Set {fieldNode} to {0}."
msgstr "Définir {fieldNode} sur {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Définir un statut personnalisé"
@@ -28877,7 +28878,7 @@ msgid "Settings"
msgstr "Réglages"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "paramètre du type de lien"
@@ -29848,7 +29849,7 @@ msgid "Skip this step"
msgstr "Passer cette étape"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Aller au contenu"
@@ -29935,7 +29936,7 @@ msgid "Slowmode"
msgstr "Mode lent"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Mode lent · attendez {remaining}"
@@ -31352,7 +31353,7 @@ msgstr "Suédois"
msgid "Switch account"
msgstr "Changer de compte"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Changer de compte"
@@ -32795,7 +32796,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Ce salon de lien est marqué pour un contenu mature et peut ouvrir du matériel qui pourrait être inapproprié pour certains utilisateurs."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Ce lien n'est pas disponible pour votre compte."
@@ -34716,9 +34717,9 @@ msgstr "MP de groupe désépinglé"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36660,7 @@ msgstr "Activation vocale"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "activité vocale"
@@ -36716,7 +36717,7 @@ msgstr "Appel vocal. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "salon vocal"
@@ -38084,7 +38085,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Vous avez changé votre tag alors que vous étiez abonné à {PREMIUM_PRODUCT_NAME}. Il sera modifié aléatoirement à l'expiration de votre abonnement {PREMIUM_PRODUCT_NAME}, sauf s'il est renouvelé."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Vous n'avez pas accès au salon où ce message a été envoyé."
@@ -38231,12 +38232,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Vous devez avoir accès à votre adresse e-mail actuelle pour la modifier d'ici. Utilisez la vérification par téléphone si disponible ou contactez l'assistance."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Vous avez besoin de la permission \" {attachFilesPermissionLabel} \" pour joindre des fichiers dans ce salon"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Vous avez besoin de la permission \" {embedLinksPermissionLabel} \" pour intégrer des liens dans ce salon"
@@ -38274,7 +38275,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Vous avez besoin de l'autorisation \" {permissionLabel} \" pour utiliser des autocollants d'autres communautés ici."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Vous avez besoin de l'autorisation \" {sendMessagesPermissionLabel} \" pour envoyer des messages dans ce salon"
@@ -38514,7 +38515,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Vous bénéficiez d'un tarif historique. Le prix actuel de ce forfait est de {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Vous êtes en pause dans cette communauté"
@@ -38583,7 +38584,7 @@ msgstr "Vous avez atteint la limite de communautés"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Vous avez atteint la fin"
@@ -38627,7 +38628,7 @@ msgstr "Vous avez reçu un cadeau"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Vous avez demandé trop d’e-mails de vérification. Veuillez patienter un instant et réessayer."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Vous avez vu toutes vos mentions récentes. D'autres apparaîtront bientôt ici."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(אתה)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# חבר} other {# חברים}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} אינו תומך במנויים בתשלום דרך {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# קהילה} two {# קהילות} other {# קהילות}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} אזכורים"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# אזכור} other {# אזכורים}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# סימנייה} other {# סימניות}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# קהילה נמצאה} other {# קהילות נמצאו}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# קהילה אינה זמינה באופן זמני עקב תקלה בקבלן השטף.} other {# קהילות אינן זמינות באופן זמני עקב תקלה בקבלן השטף.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# מכשיר נבחר לניתוק} other {# מכשירים נבחרו לניתוק}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} בקשות חברות"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} הודעות פרטיות שלא נקראו"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} דקות"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "תיקיית {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "יום אחד"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "בקשת חבר אחת"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 שלא נקרא"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "הודעה אישית אחת שלא נקראה"
@@ -2248,13 +2248,13 @@ msgstr "לחיצת הפעלה"
msgid "Active"
msgstr "פעיל"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "חשבון פעיל"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "שיחה פעילה"
@@ -2907,8 +2907,8 @@ msgstr "פקדי יישור זמינים רק במסכים רחבים יותר"
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "הכל"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "כל הקלטים אינטראקטיביים לחלוטין, אז אפשר להקליד חופשי."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "כל השפות"
@@ -5785,8 +5785,8 @@ msgstr "לא ניתן להעלות קבצים לכאן"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "לא ניתן להעלות קבצים לכאן"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "כרטיסים יכולים לשמור על תמחור TRY לאחר אי
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "קטגוריות"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "קטגוריה"
@@ -6313,7 +6313,7 @@ msgstr "השינויים יחולו באופן מיידי על הלקוח הפע
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "ערוץ"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "ערוץ"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "ערוץ {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "גישה לערוץ"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "הגישה לערוץ נדחתה"
@@ -6408,7 +6408,7 @@ msgstr "מזהה הערוץ הועתק ללוח הגזירים"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "קישור לערוץ"
@@ -7009,7 +7009,7 @@ msgstr "תבעו את החשבון שלכם"
msgid "Claim your account and verify your email to send reports."
msgstr "כדי לשלוח דיווחים, יש לתבוע את החשבון ולאמת את כתובת האימייל."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "תבעו את חשבונכם על ידי הוספת אימייל וסיסמה. נשלח קוד אימות כדי לאשר את האימייל שלכם לפני השלמת התהליך."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "כיווץ"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "כיווץ {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "לכווץ הודעות שלא נקראו עבור {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "(מכווץ)"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "התחבר/ה עם {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "מחובר"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "העתקת כתובת ה-URL של הבאנר"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "העתקת פרטי בנייה"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "העתק את מפתח ההגדרה לאפליקציית האימות שלך."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "העתקת מזהה משתמש"
@@ -8923,7 +8923,7 @@ msgstr "העתק סרטון"
msgid "Copy video link"
msgstr "העתקת קישור לסרטון"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "העתקת אבחון קולי"
@@ -11195,13 +11195,13 @@ msgstr "מצב מפתח"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "כלי מפתחים"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "כלי מפתחים זמינים דרך תג הצוות בכותרת הערוץ."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "בקשת גילוי נסיגה"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "קטגוריות גילוי"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "ניווט גילוי"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "תוצאות גילוי"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "חיפוש ב-Discovery"
@@ -12366,7 +12366,7 @@ msgstr "עריכת קובץ מצורף"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "עריכה או מחיקה של אימוג'י ומדבקות שנוצר
msgid "Edit overwrites for roles and members in this channel."
msgstr "ערוך עקיפות עבור תפקידים וחברים בערוץ זה."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "עריכת פרופיל"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "אמוטיקונים"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "אין מועדפים"
@@ -13465,7 +13465,7 @@ msgstr "הזן את הקוד שמופיע באפליקציה כדי להמשיך
msgid "Enter the code we emailed to your new address."
msgstr "הזן את הקוד ששלחנו למייל החדש שלך."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "הזן את הקוד ששלחנו למייל שלך כדי לאמת אותו. הסיסמה שלך תוגדר לאחר אישור הקוד."
@@ -13802,8 +13802,8 @@ msgstr "הצג הודעות שלא נקראו עבור {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "מורחב"
@@ -13831,7 +13831,7 @@ msgstr "יפוג לאחר"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "הגדרת סינון תוכן בוטה"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "גלו"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "סינון לפי שיטת הצטרפות"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "סינון לפי שפה"
@@ -14801,7 +14801,7 @@ msgstr "קול ממוקד"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "תיקייה"
@@ -17155,7 +17155,7 @@ msgstr "במצב \"מערכת הפעלה\", המילונים המפורטים ל
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "בדפדפן, דיבור בלחיצה (push-to-talk) פועל רק כשהכרטיסייה של {PRODUCT_NAME} ממוקדת. התקן את אפליקציית המחשב כדי להשתמש בדיבור בלחיצה בכל המערכת."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "בשיחה"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "קישור ההזמנה מוסתר בזמן שיתוף:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "קישור ההזמנה מוסתר בזמן שיתוף"
@@ -17756,7 +17756,7 @@ msgstr "הסתרת הזמנות"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "קפוץ אל {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "קפוץ אל {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "קפיצה לשיחה הנוכחית"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "מעבר לערוץ המקושר"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "קפוץ להודעה המקושרת"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "עבור להודעה של {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "קפוץ להודעה ב-{labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "ערכת נושא בהירה"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "אהבתי"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "סומן כאהוב."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "לייקים"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "עיצוב קישורים"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "הקישור אינו זמין"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "טוען משתמשים חסומים"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "טוען קהילות"
@@ -19268,7 +19268,7 @@ msgstr "תוכנות זדוניות, גניבת פרטי כניסה או קבצ
msgid "Manage"
msgstr "נהל"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "ניהול חשבונות"
@@ -20079,8 +20079,8 @@ msgstr "הודעה"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "הודעה"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "פריסת הודעות"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "קישור להודעה"
@@ -20665,7 +20665,7 @@ msgstr "מתנה חודשית"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "השתקת שמע מהזרם"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "חדש"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "חדש"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "אין הרשאת {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "אין גישה"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "פתח/י את {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "פתח את {labelText} בהגדרות"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "פתח צ'אט"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "יציאה מ-{appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "ציטוט"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "ציטוטים"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "תגית משתמש מדווח (אופציונלי)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "פורסם מחדש"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "שליחות חוזרת"
@@ -26470,7 +26470,7 @@ msgstr "דורש את כל מה שקיים בבינוני, בתוספת חברו
msgid "Reschedule message"
msgstr "תזמון מחדש של ההודעה"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "שלח שוב ({originalSecondsRemaining}שנ')"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "שלח שוב ({resendCooldownSeconds} שנ')"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "שלח שוב ({resendSecondsRemaining}ש׳)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "רוויה"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "שמור"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "נשמר."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "שמירות"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "חיפוש ערוצים או צ'אטים פרטיים"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "חיפוש קהילות"
@@ -27758,7 +27758,7 @@ msgstr "סינון חיפוש: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "מסנני חיפוש"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "תוצאות חיפוש"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "תוצאות חיפוש עבור \"{query}\""
@@ -28232,8 +28232,8 @@ msgstr "טקסט שניתן לבחירה"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "כפתור שליחה"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "שליחת תוכנות זדוניות או קישורים מסוכנים"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "שליחת הודעות מושבתת בקהילה זו"
@@ -28623,7 +28623,7 @@ msgstr "הפעלות"
msgid "Set {fieldNode} to {0}."
msgstr "הגדר/י את {fieldNode} ל- {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "הגדר סטטוס מותאם אישית"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "הגדרות"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "קישור להגדרות"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "דלג על שלב זה"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "דלג לתוכן"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "מצב איטי"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "מצב איטי · המתן {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "שוודית"
msgid "Switch account"
msgstr "החלף חשבון"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "החלף חשבונות"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "ערוץ קישור זה מסומן ככולל תוכן למבוגרים ועשוי להכיל חומר שאינו הולם עבור חלק מהמשתמשים."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "הקישור הזה אינו זמין לחשבון שלך."
@@ -34716,9 +34716,9 @@ msgstr "קבוצת צ׳אט לא מוצמדת"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "הפעלת קול"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "פעילות קולית"
@@ -36716,7 +36716,7 @@ msgstr "שיחת קול. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "ערוץ קולי"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "שינית את התג שלך בזמן שהיית ב-{PREMIUM_PRODUCT_NAME}. הוא ישתנה באופן אקראי כשתוקף ה-{PREMIUM_PRODUCT_NAME} שלך יפוג, אלא אם כן הוא יתחדש."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "אין לך גישה לערוץ שבו נשלחה ההודעה הזו."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "כדי לשנות את כתובת האימייל שלך מכאן, עליך לגשת לאימייל הנוכחי שלך. השתמש באימות טלפוני אם זמין, או פנה לתמיכה."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "עליך לקבל את ההרשאה \"{attachFilesPermissionLabel}\" כדי לצרף קבצים בערוץ זה"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "עליך לקבל את ההרשאה \"{embedLinksPermissionLabel}\" כדי להטמיע קישורים בערוץ זה"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "אתה צריך את ההרשאה \"{permissionLabel}\" כדי להשתמש במדבקות מקהילות אחרות כאן."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "עליך לקבל את ההרשאה \"{sendMessagesPermissionLabel}\" כדי לשלוח הודעות בערוץ זה"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "אתה משתמש בתעריף מדור קודם. המחיר הנוכחי של תוכנית זו הוא {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "אתה בהשעיה בקהילה זו"
@@ -38583,7 +38583,7 @@ msgstr "הגעת למספר הקהילות המקסימלי"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "הגעת לקצה"
@@ -38627,7 +38627,7 @@ msgstr "קיבלת מתנה"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "שלחת יותר מדי הודעות אימייל לאימות. המתן רגע ונסה שוב."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "ראית את כל האזכורים האחרונים שלך. נוספים יופיעו כאן בקרוב."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(आप)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# सदस्य} other {# सदस्य}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod}, {paymentProviderName} चेकआउट में सदस्यताओं का समर्थन नहीं करता है।"
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# कम्युनिटी} other {# कम्युनिटीज़}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} उल्लेख"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# उल्लेख} other {# उल्लेख}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# बुकमार्क} other {# बुकमार्क}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# समुदाय मिला} other {# समुदाय मिले}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# समुदाय फ्लक्स कैपेसिटर में खराबी के कारण अस्थायी रूप से अनुपलब्ध है।} other {# समुदाय फ्लक्स कैपेसिटर में खराबी के कारण अस्थायी रूप से अनुपलब्ध हैं।}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# डिवाइस साइन आउट के लिए चयनित} other {# डिवाइस साइन आउट के लिए चयनित}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} दोस्त अनुरोध"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} अपठित DM"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} मिनट"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "{folderName} फ़ोल्डर"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 दिन"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 फ्रेंड रिक्वेस्ट"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 अपठित"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 अपठित DM"
@@ -2248,13 +2248,13 @@ msgstr "एक्टिवेशन क्लिक"
msgid "Active"
msgstr "सक्रिय"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "सक्रिय खाता"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "सक्रिय कॉल"
@@ -2907,8 +2907,8 @@ msgstr "अलाइनमेंट कंट्रोल केवल चौड
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "सभी"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "सभी इनपुट पूरी तरह से इंटरैक्टिव हैं, तो टाइप करना शुरू करें।"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "सभी भाषाएं"
@@ -5785,8 +5785,8 @@ msgstr "यहां फ़ाइलें अपलोड नहीं की
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "यहां फ़ाइलें अपलोड नहीं की
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "कार्ड, एक त्वरित {paymentProviderName} सत
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "श्रेणियां"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "श्रेणी"
@@ -6313,7 +6313,7 @@ msgstr "बदलाव तुरंत लाइव क्लाइंट प
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "चैनल"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "चैनल"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "चैनल {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "चैनल एक्सेस"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "चैनल ऐक्सेस अस्वीकृत"
@@ -6408,7 +6408,7 @@ msgstr "चैनल आईडी क्लिपबोर्ड पर कॉ
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "चैनल लिंक"
@@ -7009,7 +7009,7 @@ msgstr "अपना अकाउंट क्लेम करें"
msgid "Claim your account and verify your email to send reports."
msgstr "रिपोर्ट भेजने के लिए अपना अकाउंट क्लेम करें और अपनी ईमेल वेरिफाई करें।"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "ईमेल और पासवर्ड जोड़कर अपना अकाउंट क्लेम करें. पूरा करने से पहले हम आपके ईमेल की पुष्टि करने के लिए एक वेरिफिकेशन कोड भेजेंगे."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "छोटा करें"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "{folderName} को छोटा करें"
@@ -7641,8 +7641,8 @@ msgstr "{channelHeading} के लिए न पढ़े गए मैसे
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "कोलैप्स किया गया"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "{providerName} से कनेक्ट करें"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "कनेक्ट किया गया"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "बैनर यूआरएल कॉपी करें"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "बिल्ड की जानकारी कॉपी करें"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "अपनी ऑथेंटिकेटर ऐप में सेटअप कुंजी कॉपी करें।"
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "यूज़र आईडी कॉपी करें"
@@ -8923,7 +8923,7 @@ msgstr "वीडियो कॉपी करें"
msgid "Copy video link"
msgstr "वीडियो लिंक कॉपी करें"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "वॉइस डाइग्नोस्टिक्स कॉपी करें"
@@ -11195,13 +11195,13 @@ msgstr "डेवलपर स्थिति"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "डेवलपर टूल"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "चैनल हेडर में स्टाफ़ बैज से डेवलपर टूल उपलब्ध हैं।"
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "डिस्कवरी आवेदन वापस ले लिया गया"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "डिस्कवरी श्रेणियां"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "डिस्कवरी नेविगेशन"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "डिस्कवरी के नतीजे"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "डिस्कवरी सर्च"
@@ -12366,7 +12366,7 @@ msgstr "अटैचमेंट एडिट करें"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "दूसरे सदस्यों द्वारा बनाए
msgid "Edit overwrites for roles and members in this channel."
msgstr "इस चैनल में भूमिकाओं और सदस्यों के लिए ओवरराइट संपादित करें।"
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "प्रोफ़ाइल एडिट करें"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "इमोटिकॉन"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "पसंदीदा खाली हैं"
@@ -13465,7 +13465,7 @@ msgstr "जारी रखने के लिए ऐप में दिखा
msgid "Enter the code we emailed to your new address."
msgstr "वह कोड डालें जो हमने आपके नए ईमेल पते पर भेजा है।"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "इसे वेरिफ़ाई करने के लिए, हमने आपके ईमेल पर जो कोड भेजा है उसे डालें. कोड कन्फ़र्म होने के बाद आपका पासवर्ड सेट हो जाएगा."
@@ -13802,8 +13802,8 @@ msgstr "{channelHeading} के लिए न पढ़े गए मैसे
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "विस्तारित"
@@ -13831,7 +13831,7 @@ msgstr "इसके बाद समाप्त होगा"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "अश्लील सामग्री फ़िल्टर सेटिंग"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "एक्सप्लोर करें"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "शामिल होने के तरीके से फ़िल्टर करें"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "भाषा के अनुसार फ़िल्टर करें"
@@ -14801,7 +14801,7 @@ msgstr "फ़ोकस की गई आवाज़"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "फ़ोल्डर"
@@ -17155,7 +17155,7 @@ msgstr "\"ऑपरेटिंग सिस्टम\" मोड में, ऊ
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "ब्राउज़र में, पुश-टू-टॉक तभी काम करता है जब {PRODUCT_NAME} टैब फ़ोकस में हो। सिस्टम-वाइड पुश-टू-टॉक के लिए डेस्कटॉप ऐप इंस्टॉल करें।"
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "कॉल पर हैं"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "शेयर करते समय आमंत्रण लिंक छिपा हुआ है:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "शेयर करते समय आमंत्रण लिंक छिपाया गया"
@@ -17756,7 +17756,7 @@ msgstr "आमंत्रण मास्किंग"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "{displayName} पर जाएं"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "{labelText} पर जाएं"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "मौजूदा कॉल पर जाएं"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "लिंक किए गए चैनल पर जाएं"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "लिंक किए गए मैसेज पर जाएं"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "{authorNickname} से संदेश पर जाएँ"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "{labelText} में मैसेज पर जाएं"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "लाइट थीम"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "पसंद करें"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "लाइक किया गया।"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "पसंद"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "लिंक स्टाइल"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "लिंक उपलब्ध नहीं है"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "बैन किए गए यूज़र लोड हो रहे हैं"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "समुदाय लोड हो रहे हैं"
@@ -19268,7 +19268,7 @@ msgstr "मैलवेयर, क्रेडेंशियल चोरी
msgid "Manage"
msgstr "प्रबंधित करें"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "खाते प्रबंधित करें"
@@ -20079,8 +20079,8 @@ msgstr "मैसेज"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "मैसेज करें"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "मैसेज लेआउट"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "मैसेज लिंक"
@@ -20665,7 +20665,7 @@ msgstr "मासिक उपहार"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "स्ट्रीम ऑडियो म्यूट करें"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "नया"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "नया"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "{sendMessagesPermission} की अनुमति नहीं है"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "पहुँच नहीं है"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "{displayName} खोलें"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "सेटिंग्स में {labelText} खोलें"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "चैट खोलें"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "{appName} से बाहर निकलें"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "उद्धरण"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "उद्धरण"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "रिपोर्ट किए गए यूज़र का टैग (वैकल्पिक)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "रीपोस्ट करें"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "रीपोस्ट"
@@ -26470,7 +26470,7 @@ msgstr "मीडियम में सब कुछ चाहिए, साथ
msgid "Reschedule message"
msgstr "मैसेज रीशेड्यूल करें"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "फिर से भेजें ({originalSecondsRemaining}से)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "फिर से भेजें ({resendCooldownSeconds}से)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "फिर से भेजें ({resendSecondsRemaining}से)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "संतृप्ति"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "सेव करें"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "सहेजा गया।"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "सेव किए गए"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "चैनल या DM खोजें"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "कम्युनिटी खोजें"
@@ -27758,7 +27758,7 @@ msgstr "खोज फ़िल्टर: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "खोज फ़िल्टर"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "खोज के नतीजे"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "“{query}” के लिए खोज परिणाम"
@@ -28232,8 +28232,8 @@ msgstr "चुना जा सकने वाला टेक्स्ट"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "भेजें बटन"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "मैलवेयर या खतरनाक लिंक भेजना"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "इस कम्युनिटी में मैसेज भेजना बंद है"
@@ -28623,7 +28623,7 @@ msgstr "सेशन"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} को {0} पर सेट करें।"
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "कस्टम स्टेटस सेट करें"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "सेटिंग्स"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "सेटिंग लिंक"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "यह स्टेप छोड़ें"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "सामग्री पर जाएं"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "स्लोमोड"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "स्लोमोड · {remaining} प्रतीक्षा करें"
@@ -31352,7 +31352,7 @@ msgstr "स्वीडिश"
msgid "Switch account"
msgstr "खाता बदलें"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "खाते बदलें"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "यह लिंक चैनल परिपक्व सामग्री के लिए चिह्नित है और ऐसी सामग्री खोल सकता है जो कुछ उपयोगकर्ताओं के लिए अनुपयुक्त हो सकती है।"
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "यह लिंक आपके खाते के लिए उपलब्ध नहीं है."
@@ -34716,9 +34716,9 @@ msgstr "ग्रुप DM अनपिन किया गया"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "वॉइस ऐक्टिवेशन"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "वॉइस गतिविधि"
@@ -36716,7 +36716,7 @@ msgstr "वॉइस कॉल. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "वॉइस चैनल"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "आपने {PREMIUM_PRODUCT_NAME} पर रहते हुए अपना टैग बदल दिया है। जब आपकी {PREMIUM_PRODUCT_NAME} की अवधि खत्म हो जाएगी, तो यह अपने आप बदल जाएगा, बशर्ते कि इसका रिन्यूअल न हो।"
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "आपके पास उस चैनल का ऐक्सेस नहीं है जहाँ यह मैसेज भेजा गया था."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "इसे यहां से बदलने के लिए आपको अपने मौजूदा ईमेल का ऐक्सेस चाहिए। अगर उपलब्ध हो, तो फ़ोन वेरिफ़िकेशन का इस्तेमाल करें या सहायता से संपर्क करें।"
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "इस चैनल में फ़ाइलें अटैच करने के लिए आपको \"{attachFilesPermissionLabel}\" अनुमति चाहिए"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "इस चैनल में लिंक एम्बेड करने के लिए आपको \"{embedLinksPermissionLabel}\" अनुमति चाहिए"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "यहां अन्य कम्युनिटी से स्टिकर इस्तेमाल करने के लिए आपको \"{permissionLabel}\" अनुमति चाहिए।"
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "इस चैनल में मैसेज भेजने के लिए आपको \"{sendMessagesPermissionLabel}\" अनुमति चाहिए"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "आप पुरानी दर पर हैं। इस प्लान की मौजूदा कीमत {currentSubscriptionListPriceLabel} है।"
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "आप इस कम्युनिटी में टाइम आउट पर हैं"
@@ -38583,7 +38583,7 @@ msgstr "आप समुदाय की अधिकतम सीमा तक
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "आप अंत तक पहुँच गए हैं"
@@ -38627,7 +38627,7 @@ msgstr "आपको एक उपहार मिला है"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "आपने बहुत ज़्यादा पुष्टि करने वाले ईमेल का अनुरोध किया है। कृपया कुछ देर इंतज़ार करें और फिर से कोशिश करें।"
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "आपने अपने सभी हाल के उल्लेख देख लिए हैं। जल्द ही और भी यहां दिखाई देंगे।"
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(vi)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# član} other {# članova}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} ne podržava pretplate pri naplati putem {paymentProviderName}."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# zajednica} few {# zajednice} other {# zajednica}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} spominjanja"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# napomena} other {# napomena}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# oznaka} other {# oznake}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# zajednica pronađena} few {# zajednice pronađene} other {# zajednica pronađeno}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# zajednica privremeno nije dostupna zbog kvara na protočnom kondenzatoru.} other {# zajednice privremeno nisu dostupne zbog kvara na protočnom kondenzatoru.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# uređaj odabran za odjavu} other {# uređaja odabrano za odjavu}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} zahtjeva za prijateljstvo"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} nepročitanih izravnih poruka"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} minuta"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "Mapa {folderName}"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 dan"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 zahtjev za prijateljstvo"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 nepročitana"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 nepročitana poruka"
@@ -2248,13 +2248,13 @@ msgstr "Klik za aktivaciju"
msgid "Active"
msgstr "Aktivno"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktivan račun"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "aktivan poziv"
@@ -2907,8 +2907,8 @@ msgstr "Kontrole poravnanja dostupne su samo na širim zaslonima"
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Sve"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Svi su unosi potpuno interaktivni, stoga samo pišite."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Svi jezici"
@@ -5785,8 +5785,8 @@ msgstr "Ovdje nije moguće učitati datoteke"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Ovdje nije moguće učitati datoteke"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "Kartice mogu zadržati TRY cijene nakon brze provjere putem {paymentProv
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Kategorije"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "kategorija"
@@ -6313,7 +6313,7 @@ msgstr "Promjene se odmah primjenjuju na aktivni klijent."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "kanal"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Kanal"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Kanal {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Pristup kanalu"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Pristup kanalu odbijen"
@@ -6408,7 +6408,7 @@ msgstr "ID kanala kopiran u međuspremnik"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "poveznica kanala"
@@ -7009,7 +7009,7 @@ msgstr "Preuzmite svoj račun"
msgid "Claim your account and verify your email to send reports."
msgstr "Zatražite svoj račun i potvrdite e-poštu kako biste mogli slati izvješća."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Preuzmite svoj račun dodavanjem e-pošte i lozinke. Poslat ćemo vam kontrolni kôd za potvrdu e-pošte prije dovršetka."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Sažmi"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "Sažmi {folderName}"
@@ -7641,8 +7641,8 @@ msgstr "Sažmi nepročitane poruke za {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "sažeto"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Poveži se s {providerName}"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "povezano"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Kopiraj URL naslovne slike"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Kopiraj podatke o verziji"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Kopirajte ključ za postavljanje u svoju aplikaciju za autentifikaciju."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Kopiraj korisnički ID"
@@ -8923,7 +8923,7 @@ msgstr "Kopiraj videozapis"
msgid "Copy video link"
msgstr "Kopiraj poveznicu videozapisa"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Kopiraj dijagnostiku glasa"
@@ -11195,13 +11195,13 @@ msgstr "Stanje razvojnog programera"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Alati za razvojne programere"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "Alati za razvojne programere dostupni su putem značke osoblja u zaglavlju kanala."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Prijava za otkrivanje povučena"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Kategorije otkrivanja"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Navigacija otkrivanja"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Rezultati otkrivanja"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Pretraživanje Otkrivanja"
@@ -12366,7 +12366,7 @@ msgstr "Uredi privitak"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Uređivanje ili brisanje emojija i naljepnica koje su izradili drugi čl
msgid "Edit overwrites for roles and members in this channel."
msgstr "Uredite nadjačavanja za uloge i članove u ovom kanalu."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Uredi profil"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Emotikoni"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Prazni favoriti"
@@ -13465,7 +13465,7 @@ msgstr "Unesite kôd prikazan u aplikaciji za nastavak."
msgid "Enter the code we emailed to your new address."
msgstr "Unesite kod koji smo poslali na vašu novu adresu e-pošte."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Unesite kod koji smo vam poslali e-poštom da biste je potvrdili. Vaša će lozinka biti postavljena nakon što se kod potvrdi."
@@ -13802,8 +13802,8 @@ msgstr "Proširi nepročitane poruke za {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "prošireno"
@@ -13831,7 +13831,7 @@ msgstr "Istječe nakon"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Postavka filtra eksplicitnog sadržaja"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Istražite"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Filtriraj po načinu pridruživanja"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Filtriraj po jeziku"
@@ -14801,7 +14801,7 @@ msgstr "Fokusirani glas"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Mapa"
@@ -17155,7 +17155,7 @@ msgstr "U načinu rada \"Operativni sustav\" gore navedeni rječnici su savjetod
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "U pregledniku, pritisni za razgovor radi samo dok je kartica {PRODUCT_NAME} aktivna. Instalirajte desktop aplikaciju za pritisni za razgovor na cijelom sustavu."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "U pozivu"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "Veza za poziv skrivena je tijekom dijeljenja:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "Poveznica za pozivnicu maskirana tijekom dijeljenja"
@@ -17756,7 +17756,7 @@ msgstr "Maskiranje pozivnica"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Skoči na {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Skoči na {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Skoči na trenutačni poziv"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Skoči na povezani kanal"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Skoči na povezanu poruku"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Idi na poruku od {authorNickname}"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Skoči na poruku u {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Svijetla tema"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "sviđa mi se"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Lajkano."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "sviđanja"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Stil veze"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "Veza nedostupna"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Učitavanje blokiranih korisnika"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Učitavanje zajednica"
@@ -19268,7 +19268,7 @@ msgstr "Zlonamjerni softver, krađa vjerodajnica ili štetne datoteke."
msgid "Manage"
msgstr "Upravljanje"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Upravljanje računima"
@@ -20079,8 +20079,8 @@ msgstr "Poruka"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Poruka"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Izgled poruka"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "poveznica poruke"
@@ -20665,7 +20665,7 @@ msgstr "Mjesečni dar"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Isključi zvuk prijenosa"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Novo"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Novo"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Nema dozvole {sendMessagesPermission}"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Nema pristupa"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "Otvori {displayName}"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Otvorite {labelText} u postavkama"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Otvori čavrljanje"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Zatvori {appName}"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "citat"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "citati"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Oznaka prijavljenog korisnika (neobavezno)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "ponovno objavljeno"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "ponovne objave"
@@ -26470,7 +26470,7 @@ msgstr "Zahtijeva sve iz srednje razine, plus članstvo u zajednici najmanje 10
msgid "Reschedule message"
msgstr "Ponovno zakaži poruku"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Ponovno pošalji ({originalSecondsRemaining}s)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Ponovno pošalji ({resendCooldownSeconds}s)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Ponovno pošalji ({resendSecondsRemaining}s)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Zasićenost"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "Spremi"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Spremljeno."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "spremanja"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Pretražite kanale ili izravne poruke"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Pretražite zajednice"
@@ -27758,7 +27758,7 @@ msgstr "Filter pretraživanja: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Filtri pretraživanja"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Rezultati pretraživanja"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Rezultati pretraživanja za „{query}”"
@@ -28232,8 +28232,8 @@ msgstr "Tekst koji se može odabrati"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Gumb za slanje"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Slanje zlonamjernog softvera ili opasnih poveznica"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Slanje poruka onemogućeno je u ovoj zajednici"
@@ -28623,7 +28623,7 @@ msgstr "Sesije"
msgid "Set {fieldNode} to {0}."
msgstr "Postavljeno {fieldNode} na {0}."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Postavi prilagođeni status"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Postavke"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "poveznica postavki"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Preskoči ovaj korak"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Preskoči na sadržaj"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Usporeni način"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Usporeni način · čekajte {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "Švedski"
msgid "Switch account"
msgstr "Prebaci račun"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Promijeni račun"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Ovaj kanal s poveznicama označen je kao sadržaj za odrasle i može sadržavati materijal koji možda nije prikladan za neke korisnike."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Ova poveznica nije dostupna za vaš račun."
@@ -34716,9 +34716,9 @@ msgstr "Grupa DM nije prikvačena"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Glasovna aktivacija"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "glasovna aktivnost"
@@ -36716,7 +36716,7 @@ msgstr "Glasovni poziv. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "glasovni kanal"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Promijenili ste svoju oznaku dok ste bili na {PREMIUM_PRODUCT_NAME}. Nasumično će se ponovno odabrati kada vam istekne {PREMIUM_PRODUCT_NAME}, osim ako se ne obnovi."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Nemate pristup kanalu na koji je poslana ova poruka."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Za promjenu e-pošte ovdje morate imati pristup svojoj trenutačnoj adresi e-pošte. Upotrijebite provjeru telefonom ako je dostupna ili se obratite podršci."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Potrebna vam je dozvola \"{attachFilesPermissionLabel}\" za prilaganje datoteka u ovom kanalu"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Potrebna vam je dozvola \"{embedLinksPermissionLabel}\" za ugradnju poveznica u ovaj kanal"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Potrebna vam je dozvola \"{permissionLabel}\" za korištenje naljepnica iz drugih zajednica ovdje."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Potrebna vam je dozvola \"{sendMessagesPermissionLabel}\" za slanje poruka u ovom kanalu"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Koristite stariju cijenu. Trenutna cijena za ovaj plan je {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Na hlađenju ste u ovoj zajednici"
@@ -38583,7 +38583,7 @@ msgstr "Dosegnuli ste ograničenje zajednica"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Došli ste do kraja"
@@ -38627,7 +38627,7 @@ msgstr "Primili ste dar"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Previše ste puta zatražili e-poštu za potvrdu. Pričekajte trenutak pa pokušajte ponovno."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Pregledali ste sva nedavna spominjanja. Uskoro će se ovdje pojaviti nova."
@@ -49,7 +49,7 @@ msgid "(you)"
msgstr "(te)"
#. placeholder {0}: guild.member_count
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:146
#: src/features/discovery/discovery/DiscoveryGuildCard.tsx:184
msgid "{0, plural, one {# member} other {# members}}"
msgstr "{0, plural, one {# tag} other {# tag}}"
@@ -288,14 +288,14 @@ msgid "{blikPaymentMethod} does not support subscriptions in {paymentProviderNam
msgstr "{blikPaymentMethod} nem támogatja az előfizetéseket a(z) {paymentProviderName} fizetési felületén."
#. Accessible label for a category row in the Discovery search sidebar. {categoryLabel} is the category name and {count} is how many communities match the current search in it. Both are inserted by code.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:35
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:37
msgid "{categoryLabel}, {count, plural, one {# community} other {# communities}}"
msgstr "{categoryLabel}, {count, plural, one {# közösség} other {# közösség}}"
#. Short label in the unread channels content. Preserve placeholders {channelHeading}, {mentionCount}; they are inserted by code.
#: src/features/app/components/floating/UnreadChannelsContent.tsx:52
msgid "{channelHeading}, {mentionCount} mentions"
msgstr "{channelHeading}, {mentionCount} említés"
msgid "{channelHeading}, {mentionCount, plural, one {# mention} other {# mentions}}"
msgstr "{channelHeading}, {mentionCount, plural, one {# említés} other {# említés}}"
#. Short label in the channel layout. Keep it concise. Preserve {channelName}; it is inserted by code.
#: src/features/channel/components/ChannelLayout.tsx:17
@@ -356,11 +356,11 @@ msgid "{count, plural, one {# bookmark} other {# bookmarks}}"
msgstr "{count, plural, one {# könyvjelző} other {# könyvjelző}}"
#. Screen-reader status text in Discovery. {count} is the total number of matching communities.
#: src/features/discovery/discovery/DiscoveryPage.tsx:33
#: src/features/discovery/discovery/DiscoveryPage.tsx:34
msgid "{count, plural, one {# community found} other {# communities found}}"
msgstr "{count, plural, one {# közösség található} other {# közösség található}}"
#: src/features/app/components/layout/GuildsLayout.tsx:1926
#: src/features/app/components/layout/GuildsLayout.tsx:1949
msgid "{count, plural, one {# community is temporarily unavailable due to a flux capacitor malfunction.} other {# communities are temporarily unavailable due to a flux capacitor malfunction.}}"
msgstr "{count, plural, one {# közösség átmenetileg nem elérhető egy \"fluxuskondenzátor\" meghibásodása miatt.} other {# közösség átmenetileg nem elérhető egy \"fluxuskondenzátor\" meghibásodása miatt.}}"
@@ -634,12 +634,12 @@ msgid "{deviceCount, plural, one {# device selected for sign out} other {# devic
msgstr "{deviceCount, plural, one {# kiválasztott eszköz a kijelentkezéshez} other {# kiválasztott eszközök a kijelentkezéshez}}"
#. Sidebar Fluxer-home button tooltip showing how many incoming friend requests are pending. Count is interpolated.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:50
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:49
msgid "{displayedIncomingFriendRequestCount} friend requests"
msgstr "{displayedIncomingFriendRequestCount} barátkérelem"
#. Short label in the sidebar navigation fluxer button. Preserve {displayedUnreadDmCount}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:41
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:40
msgid "{displayedUnreadDmCount} unread DMs"
msgstr "{displayedUnreadDmCount} olvasatlan DM"
@@ -726,7 +726,7 @@ msgid "{fifteenMinutes} minutes"
msgstr "{fifteenMinutes} perc"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:78
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:77
msgid "{folderName} folder"
msgstr "{folderName} mappa"
@@ -1567,7 +1567,7 @@ msgid "1 day"
msgstr "1 nap"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:46
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:45
msgid "1 friend request"
msgstr "1 ismerősjelölés"
@@ -1622,7 +1622,7 @@ msgid "1 unread"
msgstr "1 olvasatlan"
#. Short label in the sidebar navigation fluxer button.
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:37
#: src/features/app/components/layout/sidebar_nav/FluxerButton.tsx:36
msgid "1 unread DM"
msgstr "1 olvasatlan DM"
@@ -2248,13 +2248,13 @@ msgstr "Aktiválási kattintás"
msgid "Active"
msgstr "Aktív"
#: src/features/app/components/floating/UserAreaPopout.tsx:355
#: src/features/auth/components/accounts/AccountRow.tsx:135
#: src/features/app/components/floating/UserAreaPopout.tsx:358
#: src/features/auth/components/accounts/AccountRow.tsx:136
msgid "Active account"
msgstr "Aktív fiók"
#. Lowercase screen-reader fragment in the sidebar navigation guild list DM item.
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:64
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:66
msgid "active call"
msgstr "aktív hívás"
@@ -2907,8 +2907,8 @@ msgstr "Az igazítási vezérlők csak szélesebb képernyőkön érhetők el"
#: src/features/channel/components/MobileMemesPicker.tsx:40
#: src/features/channel/components/pickers/memes/MemesPickerHeader.tsx:12
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:11
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:20
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:25
#: src/features/guild/components/modals/GuildNotificationSettingsModal.tsx:131
msgid "All"
msgstr "Összes"
@@ -2985,7 +2985,7 @@ msgid "All inputs are fully interactive, so type away."
msgstr "Minden beviteli mező teljesen interaktív, úgyhogy csak írj bátran."
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:27
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:29
msgid "All languages"
msgstr "Összes nyelv"
@@ -5785,8 +5785,8 @@ msgstr "Ide nem tölthetsz fel fájlokat"
#: src/features/auth/components/modals/AccountDisableModal.tsx:45
#: src/features/auth/components/modals/BackupCodesRegenerateModal.tsx:78
#: src/features/auth/components/modals/BackupCodesViewModal.tsx:61
#: src/features/auth/components/modals/ClaimAccountModal.tsx:210
#: src/features/auth/components/modals/ClaimAccountModal.tsx:226
#: src/features/auth/components/modals/ClaimAccountModal.tsx:216
#: src/features/auth/components/modals/ClaimAccountModal.tsx:232
#: src/features/auth/components/modals/DeviceRevokeModal.tsx:74
#: src/features/auth/components/modals/PasskeyNameModal.tsx:80
#: src/features/auth/components/modals/PasskeyPinModal.tsx:104
@@ -5812,7 +5812,7 @@ msgstr "Ide nem tölthetsz fel fájlokat"
#: src/features/messaging/components/modals/AttachmentEditModal.tsx:133
#: src/features/messaging/components/modals/EditAltTextModal.tsx:190
#: src/features/messaging/components/modals/ExternalLinkWarningModal.tsx:111
#: src/features/messaging/components/modals/ForwardModal.tsx:627
#: src/features/messaging/components/modals/ForwardModal.tsx:628
#: src/features/messaging/components/modals/ImageCropModal.tsx:925
#: src/features/messaging/components/modals/MessageHistoryThresholdModal.tsx:107
#: src/features/messaging/components/popouts/ScheduledMessagesContent.tsx:47
@@ -5998,12 +5998,12 @@ msgstr "A kártyák megtarthatják a TRY árazást egy gyors {paymentProviderNam
#. Heading above the category filter list in the Discovery search sidebar.
#. Short label in the discovery category bottom sheet. Keep it concise.
#: src/features/discovery/components/bottomsheets/DiscoveryCategoryBottomSheet.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:19
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:21
msgid "Categories"
msgstr "Kategóriák"
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:79
#: src/features/app/components/layout/ChannelItem.tsx:84
msgid "category"
msgstr "kategória"
@@ -6313,7 +6313,7 @@ msgstr "A módosítások azonnal érvénybe lépnek az élő kliensen."
#. Fallback channel-name placeholder used inside the textarea message hint when no name is available. Lowercase.
#. Lowercase generic channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:87
#: src/features/app/components/layout/ChannelItem.tsx:92
#: src/features/channel/components/channel_textarea/shared.ts:11
msgid "channel"
msgstr "csatorna"
@@ -6333,7 +6333,7 @@ msgid "Channel"
msgstr "Csatorna"
#. Short label in the settings dialog forward channel selection. Preserve {id}; it is inserted by code.
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:22
#: src/features/app/components/dialogs/shared/UseForwardChannelObservations.ts:27
msgid "Channel {id}"
msgstr "Csatorna {id}"
@@ -6343,7 +6343,7 @@ msgid "Channel access"
msgstr "Csatorna-hozzáférés"
#. Title of the alert shown when clicking a message link the user does not have permission to view.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:110
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:111
msgid "Channel access denied"
msgstr "Csatorna hozzáférés megtagadva"
@@ -6408,7 +6408,7 @@ msgstr "Csatornaazonosító a vágólapra másolva"
#. Short label in the messaging mention renderer. Keep it concise.
#. Type chip suffix in tooltips for inline rendered channel mentions. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:79
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:80
#: src/features/messaging/components/markdown/renderers/MentionRenderer.tsx:39
msgid "channel link"
msgstr "csatornalink"
@@ -7009,7 +7009,7 @@ msgstr "Fiók igénylése"
msgid "Claim your account and verify your email to send reports."
msgstr "Igazold a fiókodat és erősítsd meg az e-mail címedet a jelentések küldéséhez."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:138
#: src/features/auth/components/modals/ClaimAccountModal.tsx:144
msgid "Claim your account by adding an email and password. We will send a verification code to confirm your email before finishing."
msgstr "Igényeld fiókodat e-mail-cím és jelszó hozzáadásával. A befejezés előtt ellenőrző kódot küldünk az e-mail-címed megerősítéséhez."
@@ -7597,7 +7597,7 @@ msgid "Collapse"
msgstr "Összecsukás"
#. Short label in the sidebar navigation guild folder item. Preserve {folderName}; it is inserted by code.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:98
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:97
msgid "Collapse {folderName}"
msgstr "{folderName} összecsukása"
@@ -7641,8 +7641,8 @@ msgstr "{channelHeading} olvasatlan üzeneteinek összecsukása"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for a collapsed category.
#: src/features/app/components/layout/ChannelItem.tsx:95
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:86
#: src/features/app/components/layout/ChannelItem.tsx:100
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:85
msgid "collapsed"
msgstr "összecsukva"
@@ -8266,7 +8266,7 @@ msgid "Connect with {providerName}"
msgstr "Kapcsolódás a(z) {providerName} szolgáltatással"
#. Lowercase state label used inside channel-list accessible text for the current voice channel.
#: src/features/app/components/layout/ChannelItem.tsx:111
#: src/features/app/components/layout/ChannelItem.tsx:116
msgid "connected"
msgstr "csatlakoztatva"
@@ -8666,7 +8666,7 @@ msgid "Copy banner URL"
msgstr "Banner URL másolása"
#. Tray menu item. Copies build / version diagnostics to the clipboard for bug reports.
#: src/features/app/components/floating/UserAreaPopout.tsx:711
#: src/features/app/components/floating/UserAreaPopout.tsx:714
#: src/features/platform/utils/DesktopLocaleBridge.ts:164
msgid "Copy build info"
msgstr "Buildinformációk másolása"
@@ -8898,7 +8898,7 @@ msgid "Copy the setup key into your authenticator app."
msgstr "Másold a beállítási kulcsot az autentikátor alkalmazásodba."
#. Developer-mode action that copies a user snowflake/ID to the clipboard.
#: src/features/app/components/floating/UserAreaPopout.tsx:696
#: src/features/app/components/floating/UserAreaPopout.tsx:699
#: src/features/i18n/utils/CommonMessageDescriptors.ts:172
msgid "Copy user ID"
msgstr "Felhasználói azonosító másolása"
@@ -8923,7 +8923,7 @@ msgstr "Videó másolása"
msgid "Copy video link"
msgstr "Videólink másolása"
#: src/features/app/components/floating/UserAreaPopout.tsx:724
#: src/features/app/components/floating/UserAreaPopout.tsx:727
msgid "Copy voice diagnostics"
msgstr "Hangdiagnosztika másolása"
@@ -11195,13 +11195,13 @@ msgstr "Fejlesztői állapot"
#. Short label in the channel and chat utility buttons. Keep it concise.
#. Title of the info alert shown when clicking an internal developer-tools deep link.
#: src/features/channel/components/channel_header_components/UtilityButtons.tsx:20
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:122
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:123
#: src/features/ui/action_menu/items/StaffDeveloperUserControlsMenuItem.tsx:13
msgid "Developer tools"
msgstr "Fejlesztői eszközök"
#. Body of the developer-tools info alert. Refers to the staff badge button in the channel header.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:126
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:127
msgid "Developer tools are available from the staff badge in the channel header."
msgstr "A fejlesztői eszközök a csatornafejlécben található személyzeti jelvényről érhetők el."
@@ -11657,7 +11657,7 @@ msgid "Discovery application withdrawn"
msgstr "Felfedezési kérelem visszavonva"
#. Accessible label for the category tabs in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:23
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:24
msgid "Discovery categories"
msgstr "Felfedezés kategóriák"
@@ -11671,12 +11671,12 @@ msgid "Discovery navigation"
msgstr "Felfedezés navigáció"
#. Accessible label for the Discovery community results region.
#: src/features/discovery/discovery/DiscoveryPage.tsx:29
#: src/features/discovery/discovery/DiscoveryPage.tsx:30
msgid "Discovery results"
msgstr "Felfedezési találatok"
#. Accessible label for the search form in the Discovery navigation bar.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:31
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:32
msgid "Discovery search"
msgstr "Keresés a Felfedezésben"
@@ -12366,7 +12366,7 @@ msgstr "Melléklet szerkesztése"
#. Action that opens the edit-category modal.
#. Action that opens the edit-category modal.
#. Tooltip and accessible label for the category settings button in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:115
#: src/features/app/components/layout/ChannelItem.tsx:120
#: src/features/ui/action_menu/items/CategoryMenuData.tsx:85
#: src/features/ui/action_menu/items/CategoryMenuItems.tsx:62
msgid "Edit category"
@@ -12465,11 +12465,11 @@ msgstr "Más tagok által létrehozott hangulatjelek és matricák szerkesztése
msgid "Edit overwrites for roles and members in this channel."
msgstr "A szerepkörök és tagok felülírásainak szerkesztése ebben a csatornában."
#: src/features/app/components/floating/UserAreaPopout.tsx:747
#: src/features/app/components/floating/UserAreaPopout.tsx:750
#: src/features/app/components/pages/YouPage.tsx:151
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:682
#: src/features/user/components/modals/UserProfileModal.tsx:587
#: src/features/user/components/popouts/UserProfilePopout.tsx:430
#: src/features/user/components/popouts/UserProfilePopout.tsx:432
msgid "Edit profile"
msgstr "Profil szerkesztése"
@@ -12885,7 +12885,7 @@ msgid "Emoticons"
msgstr "Emotikonok"
#. Short label in the app layout favorites channel list content.
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:65
#: src/features/app/components/layout/FavoritesChannelListContent.tsx:70
msgid "Empty favorites"
msgstr "Üres kedvencek"
@@ -13465,7 +13465,7 @@ msgstr "Írja be az alkalmazásban látható kódot a folytatáshoz."
msgid "Enter the code we emailed to your new address."
msgstr "Add meg az új e-mail címedre küldött kódot."
#: src/features/auth/components/modals/ClaimAccountModal.tsx:175
#: src/features/auth/components/modals/ClaimAccountModal.tsx:181
msgid "Enter the code we sent to your email to verify it. Your password will be set once the code is confirmed."
msgstr "Add meg az e-mail-címedre küldött kódot az ellenőrzéshez. A jelszavad a kód megerősítése után lesz beállítva."
@@ -13802,8 +13802,8 @@ msgstr "Olvasatlan üzenetek kibontása – {channelHeading}"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase state label used inside channel-list accessible text for an expanded category.
#: src/features/app/components/layout/ChannelItem.tsx:99
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:82
#: src/features/app/components/layout/ChannelItem.tsx:104
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:81
msgid "expanded"
msgstr "kibontva"
@@ -13831,7 +13831,7 @@ msgstr "Lejárati idő"
#. Short label in the authentication account row. Keep the tone plain and specific.
#. Subscription status badge meaning premium access has fully expired.
#: src/features/app/components/dialogs/components/plutonium/SubscriptionCard.tsx:348
#: src/features/auth/components/accounts/AccountRow.tsx:18
#: src/features/auth/components/accounts/AccountRow.tsx:19
#: src/features/channel/components/modals/GroupInvitesBottomSheet.tsx:41
#: src/features/invite/components/InviteListItem.tsx:30
msgid "Expired"
@@ -13915,7 +13915,7 @@ msgid "Explicit content filter setting"
msgstr "Explicit tartalom szűrő beállítása"
#. Short label in the app layout discovery guild header.
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:10
#: src/features/app/components/layout/DiscoveryGuildHeader.tsx:9
msgid "Explore"
msgstr "Felfedezés"
@@ -14601,7 +14601,7 @@ msgid "Filter by join method"
msgstr "Szűrés csatlakozási mód szerint"
#. Short label in the discovery page. Keep it concise.
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:31
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:33
msgid "Filter by language"
msgstr "Szűrés nyelv szerint"
@@ -14801,7 +14801,7 @@ msgstr "Fókuszált hang"
#. Folder icon option in the community-folder settings modal: a generic folder shape. Short standalone label.
#. Short label in the sidebar navigation guild folder item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:74
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:73
#: src/features/guild/components/modals/GuildFolderSettingsModal.tsx:39
msgid "Folder"
msgstr "Mappa"
@@ -17155,7 +17155,7 @@ msgstr "\"Operációs rendszer\" módban a fent felsorolt szótárak tájékozta
msgid "In a browser, push-to-talk only works while the {PRODUCT_NAME} tab is focused. Install the desktop app for system-wide push-to-talk."
msgstr "Böngészőben a nyomva tartva beszélés csak akkor működik, ha a {PRODUCT_NAME} lap aktív. Telepítse az asztali alkalmazást a rendszer egészére kiterjedő nyomva tartva beszéléshez."
#: src/features/app/components/floating/UserAreaPopout.tsx:725
#: src/features/app/components/floating/UserAreaPopout.tsx:728
msgid "In a call"
msgstr "Hívásban"
@@ -17734,7 +17734,7 @@ msgid "Invite link is hidden while sharing:"
msgstr "A meghívó link rejtett megosztás közben:"
#. Inline replacement text shown for invite links while streaming privacy is active.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:138
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:139
msgid "Invite link masked while sharing"
msgstr "A meghívó link elrejtve megosztás közben"
@@ -17756,7 +17756,7 @@ msgstr "Meghívó elrejtése"
#. Action label that opens the invite flow.
#. Button or menu action label in the guild header popout. Keep it concise.
#. Tooltip and accessible label for the invite button shown beside a channel in the channel list.
#: src/features/app/components/layout/ChannelItem.tsx:119
#: src/features/app/components/layout/ChannelItem.tsx:124
#: src/features/guild/components/popouts/GuildHeaderPopout.tsx:58
#: src/features/ui/action_menu/items/GuildMenuData.tsx:84
msgid "Invite members"
@@ -18162,7 +18162,7 @@ msgid "Jump to {displayName}"
msgstr "Ugrás ide: {displayName}"
#. Accessible label for an inline channel mention link. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:93
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:94
msgid "Jump to {labelText}"
msgstr "Ugrás ide: {labelText}"
@@ -18219,12 +18219,12 @@ msgid "Jump to the current call"
msgstr "Ugrás az aktuális híváshoz"
#. Fallback accessible label for an inline channel mention when the target name is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:97
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:98
msgid "Jump to the linked channel"
msgstr "Ugrás a hivatkozott csatornára"
#. Fallback accessible label for an inline message link when the target channel is not known.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:89
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:90
msgid "Jump to the linked message"
msgstr "Ugrás az üzenetre"
@@ -18234,7 +18234,7 @@ msgid "Jump to the message from {authorNickname}"
msgstr "Ugrás a {authorNickname} üzenetéhez"
#. Accessible label for an inline message link that jumps to a specific message in a channel. labelText is the channel display name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:84
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:85
msgid "Jump to the message in {labelText}"
msgstr "Ugrás az üzenethez itt: {labelText}"
@@ -18712,7 +18712,7 @@ msgid "Light theme"
msgstr "Világos téma"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:75
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:70
msgid "like"
msgstr "Tetszik"
@@ -18722,7 +18722,7 @@ msgid "Liked."
msgstr "Kedvelve."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:79
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:74
msgid "likes"
msgstr "kedvelés"
@@ -18819,7 +18819,7 @@ msgid "Link styling"
msgstr "Linkstílus"
#. Title of the alert shown when clicking an internal link that is not available to the current account.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:130
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:131
msgid "Link unavailable"
msgstr "A hivatkozás nem érhető el"
@@ -18928,7 +18928,7 @@ msgid "Loading banned users"
msgstr "Kitiltott felhasználók betöltése"
#. Screen-reader status text shown while Discovery communities are loading.
#: src/features/discovery/discovery/DiscoveryPage.tsx:37
#: src/features/discovery/discovery/DiscoveryPage.tsx:38
msgid "Loading communities"
msgstr "Közösségek betöltése"
@@ -19268,7 +19268,7 @@ msgstr "Kártevő, hitelesítő adatok lopása vagy káros fájlok."
msgid "Manage"
msgstr "Kezelés"
#: src/features/app/components/floating/UserAreaPopout.tsx:395
#: src/features/app/components/floating/UserAreaPopout.tsx:398
#: src/features/auth/components/accounts/AccountSwitcherModal.tsx:78
msgid "Manage accounts"
msgstr "Fiókok kezelése"
@@ -20079,8 +20079,8 @@ msgstr "üzenet"
#: src/features/user/components/modals/UserProfileMobileSheet.tsx:712
#: src/features/user/components/modals/UserProfileModal.tsx:562
#: src/features/user/components/modals/UserProfileModal.tsx:770
#: src/features/user/components/popouts/UserProfilePopout.tsx:416
#: src/features/user/components/popouts/UserProfilePopout.tsx:446
#: src/features/user/components/popouts/UserProfilePopout.tsx:418
#: src/features/user/components/popouts/UserProfilePopout.tsx:448
#: src/features/user/components/profile/ProfilePreview.tsx:321
msgid "Message"
msgstr "Üzenet küldése"
@@ -20220,7 +20220,7 @@ msgid "Message layout"
msgstr "Üzenetelrendezés"
#. Type chip suffix in tooltips for inline rendered message links. Lowercase because it follows the channel name.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:74
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:75
msgid "message link"
msgstr "üzenet linkje"
@@ -20665,7 +20665,7 @@ msgstr "Havi ajándék"
#. Short label in the buttons tab. Keep it concise.
#. Short label in the channel and chat friend list item. Keep it concise.
#. Tooltip on the overflow button in the inline message hover action bar. Opens the full action menu.
#: src/features/auth/components/accounts/AccountRow.tsx:22
#: src/features/auth/components/accounts/AccountRow.tsx:23
#: src/features/channel/components/bottomsheets/channel_details_bottom_sheet/ChannelDetailsBottomSheetShared.ts:142
#: src/features/channel/components/friends/FriendListItem.tsx:63
#: src/features/channel/components/MessageActionBar.tsx:88
@@ -21014,8 +21014,8 @@ msgstr "Stream hangjának némítása"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel is muted.
#. Screen-reader fragment announcing that the DM list row is muted. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:107
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:60
#: src/features/app/components/layout/ChannelItem.tsx:112
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:62
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:39
#: src/features/channel/components/direct_message/DMListItem.tsx:75
msgid "muted"
@@ -21389,7 +21389,7 @@ msgid "New"
msgstr "Új"
#. Small badge on a new or recently added app navigation item.
#: src/features/app/components/layout/GuildsLayout.tsx:131
#: src/features/app/components/layout/GuildsLayout.tsx:136
msgctxt "navigation-badge"
msgid "New"
msgstr "Új"
@@ -21577,7 +21577,7 @@ msgid "No {sendMessagesPermission} permission"
msgstr "Nincs {sendMessagesPermission} engedély"
#. Inline text shown inside a custom message link pill when the linked message cannot be accessed.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:118
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:119
msgid "No access"
msgstr "Nincs hozzáférés"
@@ -22683,7 +22683,7 @@ msgid "Open {displayName}"
msgstr "{displayName} megnyitása"
#. Accessible label for an inline settings deep-link pill. labelText is the resolved settings tab and section breadcrumb.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:101
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:102
msgid "Open {labelText} in settings"
msgstr "Nyissa meg a(z) {labelText} beállításokban"
@@ -22803,7 +22803,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:123
#: src/features/app/components/layout/ChannelItem.tsx:128
#: src/features/ui/action_menu/items/ChannelMenuData.tsx:152
msgid "Open chat"
msgstr "Csevegés megnyitása"
@@ -25153,12 +25153,12 @@ msgid "Quit {appName}"
msgstr "Kilépés a(z) {appName} alkalmazásból"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:67
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
msgid "quote"
msgstr "idézet"
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:71
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:66
msgid "quotes"
msgstr "idézetek"
@@ -26334,12 +26334,12 @@ msgid "Reported user tag (optional)"
msgstr "Jelentett felhasználó címkéje (opcionális)"
#. Singular external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:52
msgid "repost"
msgstr "újraposztolás"
#. Plural external-post stat label on a social post embed (e.g. Twitter/X). Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:62
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:57
msgid "reposts"
msgstr "újraposztok"
@@ -26470,7 +26470,7 @@ msgstr "Mindent megkövetel, ami a közepes szinten van, plusz legalább 10 perc
msgid "Reschedule message"
msgstr "Üzenet átütemezése"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
#: src/features/user/components/modals/EmailChangeModal.tsx:296
#: src/features/user/components/modals/EmailChangeModal.tsx:333
#: src/features/user/components/modals/PasswordChangeModal.tsx:244
@@ -26489,7 +26489,7 @@ msgstr "Újraküldés ({originalSecondsRemaining} mp)"
msgid "Resend ({resendCooldownSeconds}s)"
msgstr "Újraküldés ({resendCooldownSeconds} mp)"
#: src/features/auth/components/modals/ClaimAccountModal.tsx:234
#: src/features/auth/components/modals/ClaimAccountModal.tsx:240
msgid "Resend ({resendSecondsRemaining}s)"
msgstr "Újraküldés ({resendSecondsRemaining} mp múlva)"
@@ -27250,7 +27250,7 @@ msgid "Saturation"
msgstr "Telítettség"
#. Singular external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:83
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:78
msgid "save"
msgstr "mentés"
@@ -27370,7 +27370,7 @@ msgid "Saved."
msgstr "Mentve."
#. Plural external-post stat label on a social post embed. Lowercase to appear after the count.
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:87
#: src/features/channel/components/embeds/channel_embed/ChannelEmbedShared.ts:82
msgid "saves"
msgstr "mentések"
@@ -27719,7 +27719,7 @@ msgid "Search channels or DMs"
msgstr "Csatornák vagy közvetlen üzenetek keresése"
#. Accessible label and placeholder for the community search field in the Discovery page.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:27
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:28
msgid "Search communities"
msgstr "Közösségek keresése"
@@ -27758,7 +27758,7 @@ msgstr "Szűrés: {filter}"
#. Section header in the message search popout listing available filter operators.
#: src/features/channel/components/message_search_bar/FilterOption.tsx:14
#: src/features/channel/components/message_search_bar/HistorySection.tsx:17
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:15
#: src/features/discovery/discovery/DiscoverySearchFilters.tsx:17
msgid "Search filters"
msgstr "Keresési szűrők"
@@ -27852,7 +27852,7 @@ msgid "Search results"
msgstr "Keresési eredmények"
#. Heading in the Discovery navigation bar when a search is active. {query} is the text the user searched for.
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:35
#: src/features/discovery/discovery/DiscoveryNavbar.tsx:36
msgid "Search results for “{query}”"
msgstr "Keresési eredmények: „{query}”"
@@ -28232,8 +28232,8 @@ msgstr "Kijelölhető szöveg"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text for the selected channel.
#. Screen-reader suffix announcing that the DM list row is the active selection. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:91
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:52
#: src/features/app/components/layout/ChannelItem.tsx:96
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:54
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:35
#: src/features/channel/components/direct_message/DMListItem.tsx:67
msgid "selected"
@@ -28365,7 +28365,7 @@ msgid "Send button"
msgstr "Küldés gomb"
#. Primary button in the required-action modal. Requests a verification code.
#: src/features/auth/components/modals/ClaimAccountModal.tsx:213
#: src/features/auth/components/modals/ClaimAccountModal.tsx:219
#: src/features/auth/components/modals/required_action/RequiredActionDescriptors.ts:190
#: src/features/user/components/modals/EmailChangeModal.tsx:318
msgid "Send code"
@@ -28515,7 +28515,7 @@ msgid "Sending malware or dangerous links"
msgstr "Kártevő vagy veszélyes linkek küldése"
#. Short label in the settings dialog forward channel selection.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:13
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:14
msgid "Sending messages is disabled in this community"
msgstr "Az üzenetküldés le van tiltva ebben a közösségben"
@@ -28623,7 +28623,7 @@ msgstr "Munkamenetek"
msgid "Set {fieldNode} to {0}."
msgstr "{fieldNode} beállítása {0} értékre."
#: src/features/app/components/floating/UserAreaPopout.tsx:605
#: src/features/app/components/floating/UserAreaPopout.tsx:608
#: src/features/app/components/shared/custom_status_display/CustomStatusDisplay.tsx:312
msgid "Set a custom status"
msgstr "Egyéni állapot beállítása"
@@ -28877,7 +28877,7 @@ msgid "Settings"
msgstr "Beállítások"
#. Type chip suffix in tooltips for inline rendered fluxer://settings/user deep links. Lowercase.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:106
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:107
msgid "settings link"
msgstr "beállítási hivatkozás"
@@ -29848,7 +29848,7 @@ msgid "Skip this step"
msgstr "Lépés kihagyása"
#. Accessible skip-link label for keyboard users.
#: src/app/App.tsx:75
#: src/app/App.tsx:76
msgid "Skip to content"
msgstr "Ugrás a tartalomra"
@@ -29935,7 +29935,7 @@ msgid "Slowmode"
msgstr "Lassú mód"
#. Short label in the settings dialog forward channel selection. Preserve {remaining}; it is inserted by code.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:36
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:37
msgid "Slowmode · wait {remaining}"
msgstr "Lassú mód · várj {remaining}"
@@ -31352,7 +31352,7 @@ msgstr "svéd"
msgid "Switch account"
msgstr "Fiók váltása"
#: src/features/app/components/floating/UserAreaPopout.tsx:681
#: src/features/app/components/floating/UserAreaPopout.tsx:684
msgid "Switch accounts"
msgstr "Fiókváltás"
@@ -32795,7 +32795,7 @@ msgid "This link channel is marked for mature content and may open material that
msgstr "Ez a linkcsatorna felnőtt tartalomként van megjelölve, és olyan anyagokat nyithat meg, amelyek egyes felhasználók számára nem megfelelőek."
#. Body of the link-unavailable alert.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:134
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:135
msgid "This link is not available for your account."
msgstr "Ez a hivatkozás nem érhető el a fiókod számára."
@@ -34716,9 +34716,9 @@ msgstr "Rögzítés feloldva (csoportos DM)"
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#. Lowercase state label used inside channel-list accessible text when a channel has unread messages.
#. Screen-reader fragment announcing that the DM list row has unread messages. Lowercase fragment.
#: src/features/app/components/layout/ChannelItem.tsx:103
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:90
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:56
#: src/features/app/components/layout/ChannelItem.tsx:108
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:89
#: src/features/app/components/layout/sidebar_nav/GuildListDMItem.tsx:58
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:27
#: src/features/channel/components/direct_message/DMListItem.tsx:71
msgid "unread"
@@ -36659,7 +36659,7 @@ msgstr "Hangaktiválás"
#. Lowercase screen-reader fragment in the sidebar navigation guild folder item.
#. Lowercase screen-reader fragment in the sidebar navigation guild list item.
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:94
#: src/features/app/components/layout/sidebar_nav/GuildFolderItem.tsx:93
#: src/features/app/components/layout/sidebar_nav/UseGuildListItemState.ts:47
msgid "voice activity"
msgstr "hangtevékenység"
@@ -36716,7 +36716,7 @@ msgstr "Hanghívás. {statusText}."
#. Generic channel-type token used inside a wider delete confirmation string.
#. Lowercase channel type label used inside channel-list accessible text.
#: src/features/app/components/layout/ChannelItem.tsx:83
#: src/features/app/components/layout/ChannelItem.tsx:88
#: src/features/ui/action_menu/items/ChannelMenuItems.tsx:79
msgid "voice channel"
msgstr "hangcsatorna"
@@ -38084,7 +38084,7 @@ msgid "You changed your tag while on {PREMIUM_PRODUCT_NAME}. It will reroll rand
msgstr "Megváltoztattad a címkédet, miközben {PREMIUM_PRODUCT_NAME} előfizetésed volt. Véletlenszerűen újra fog generálódni, amikor a {PREMIUM_PRODUCT_NAME} előfizetésed lejár, hacsak nem újítod meg."
#. Body of the access-denied alert for clicked message links.
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:114
#: src/features/messaging/components/markdown/renderers/LinkRenderer.tsx:115
msgid "You do not have access to the channel where this message was sent."
msgstr "Nincs hozzáférésed ahhoz a csatornához, ahová ezt az üzenetet küldték."
@@ -38231,12 +38231,12 @@ msgid "You need access to your current email to change it from here. Use phone v
msgstr "Az e-mail-címed megváltoztatásához hozzá kell férned a jelenlegi címedhez. Használj telefonos ellenőrzést, ha elérhető, vagy vedd fel a kapcsolatot az ügyfélszolgálattal."
#. Forward dialog error shown when the forwarded message has attachments and the user lacks Attach Files in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:31
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:32
msgid "You need the \"{attachFilesPermissionLabel}\" permission to attach files in this channel"
msgstr "Nincs \"{attachFilesPermissionLabel}\" jogosultságod fájlok csatolásához ezen a csatornán"
#. Forward dialog error shown when the forwarded message contains embeds and the user lacks Embed Links in the target channel.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:26
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:27
msgid "You need the \"{embedLinksPermissionLabel}\" permission to embed links in this channel"
msgstr "Nincs \"{embedLinksPermissionLabel}\" jogosultságod linkek beágyazásához ezen a csatornán"
@@ -38274,7 +38274,7 @@ msgid "You need the \"{permissionLabel}\" permission to use stickers from other
msgstr "Nincs \"{permissionLabel}\" jogosultságod ahhoz, hogy más közösségekből származó matricákat használj itt."
#. Forward dialog error shown when the user lacks the Send Messages permission in the target channel. Permission name is interpolated.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:21
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:22
msgid "You need the \"{sendMessagesPermissionLabel}\" permission to send messages in this channel"
msgstr "Nincs \"{sendMessagesPermissionLabel}\" jogosultságod üzenetek küldéséhez ezen a csatornán"
@@ -38514,7 +38514,7 @@ msgid "You're on a legacy rate. The current price for this plan is {currentSubsc
msgstr "Ön egy korábbi díjszabású csomagot használ. A csomag jelenlegi ára: {currentSubscriptionListPriceLabel}."
#. Short label in the settings dialog forward channel selection. Keep the tone plain and specific.
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:17
#: src/features/app/components/dialogs/shared/ForwardChannelIndex.ts:18
msgid "You're on timeout in this community"
msgstr "Időtúllépésen vagy ebben a közösségben"
@@ -38583,7 +38583,7 @@ msgstr "Elérte a közösségi korlátot"
#. Short label in the shared app channel pins content.
#: src/features/app/components/shared/ChannelPinsContent.tsx:62
#: src/features/messaging/components/pages/MessageListPage.tsx:25
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:414
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:406
#: src/features/messaging/components/popouts/SavedMessagesContent.tsx:37
msgid "You've reached the end"
msgstr "Elérted a végét"
@@ -38627,7 +38627,7 @@ msgstr "Ajándékot kaptál"
msgid "You've requested too many verification emails. Please wait a moment and try again."
msgstr "Túl sok ellenőrző e-mailt kértél. Kérjük, várj egy kicsit, majd próbáld újra."
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:417
#: src/features/messaging/components/popouts/RecentMentionsContent.tsx:409
msgid "You've seen all your recent mentions. More will appear here soon."
msgstr "Minden új említést láttál. Hamarosan több is megjelenik itt."

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