mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-09 12:12:25 +09:00
Compare commits
16
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5660972c71 | ||
|
|
b4a5eb77a8 | ||
|
|
4bbfee4cec | ||
|
|
9e89539f0a | ||
|
|
fa71eb8682 | ||
|
|
49b7127bc7 | ||
|
|
9cb8812be0 | ||
|
|
7d82d188a0 | ||
|
|
5ce5669f17 | ||
|
|
9ea750152e | ||
|
|
e87e2fe7bf | ||
|
|
871b5116dc | ||
|
|
d7b2e67c35 | ||
|
|
7e1ca9ed6a | ||
|
|
1922d56188 | ||
|
|
cc105883a5 |
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -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."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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},
|
||||
|
||||
Generated
+3
-50
@@ -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"
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
@@ -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
Reference in New Issue
Block a user